Powershellからbashの値を取得する。
Powershellから
bashを実行するには
下のよう「bash -c "コマンド"」という形式になる。にする。
Powershellからbashを実行して値を取得するには
したのようにすればよい。
文字列にPowershellの変数を埋め込むと
したのように、Powershellの変数をちゃんと展開してから、
Bashに渡していることがわかる。
さらに
bashからの戻り値は配列として取得することができる。
(これは、wsl,bashの性質というより、Powershell1の仕様だが。)
ただし、下のように
bash側で変数を定義して使いたいときには思ったように動かない。
bashを実行するには
下のよう「bash -c "コマンド"」という形式になる。にする。
PS C:\Users\katsu> bash -c "echo aaa"
aaa
Powershellからbashを実行して値を取得するには
したのようにすればよい。
PS C:\Users\katsu> $aaa = bash -c "echo aaa"
文字列にPowershellの変数を埋め込むと
したのように、Powershellの変数をちゃんと展開してから、
Bashに渡していることがわかる。
PS C:\Users\katsu> $str = "abcdef"
PS C:\Users\katsu> bash -c "for i in {1..3}; do echo ${str}; done"
abcdef
abcdef
abcdef
さらに
bashからの戻り値は配列として取得することができる。
(これは、wsl,bashの性質というより、Powershell1の仕様だが。)
PS C:\Users\katsu> $result = bash -c "for i in {1..3}; do echo ${str}; done"
PS C:\Users\katsu> $result[0]
abcdef
PS C:\Users\katsu> $result[1]
abcdef
PS C:\Users\katsu> $result[2]
abcdef
PS C:\Users\katsu> $result.Length
3
ただし、下のように
bash側で変数を定義して使いたいときには思ったように動かない。
PS C:\Users\katsu> bash -c "for i in {1..3}; do echo `$i; done"
これはPowershell側で変数の$(ダラー)を展開しないように、`(バッククォート)を
つけているわけだが、この`がBash側でこちらが期待したように解釈されないためだと
考えられる。
これは、`をさらにエスケープするように書くとうまく使えるようになる。
PS C:\Users\katsu> bash -c "for i in {1..3}; do echo \`$i; done"
1
2
3
この性質を用いて、bash側のコマンドをあたかも、Powershell
のコマンドのように使うことができる。
mkpasswd,dd,pasteコマンドあたりのPowershellには無いものを
Powershellから
呼び出すのに役に立つ。
コメント
コメントを投稿