概要: Windows マシンで、Bourne シェルがアクティブな Ruby シェルになるようにするにはどうすればよいですか? これが私がしたいことです:
irb> exec('echo $SHELL')
/bin/sh
実際の出力は次のとおりです。
irb> exec('echo $SHELL')
$SHELL
でコマンドを手動で実行しようとするとどうなりますかcmd.exe
。Ruby docs によると、exec
コール チェック$RUBYSHELL
と$COMSPEC
(この順序で?) のように見えます。、、およびのコピーがある場所に設定$RUBYSHELL
しようとしましたが、どれも機能していないようです。基本的に完全に無視しているように見えます..."C:\Program Files (x86)\Git\bin\sh.exe"
sh
/bin/sh
/sh
RUBYSHELL
なんで?exec
: を呼び出して結果を渡すRuby gem を使用していますShellwords.shelljoin
。この呼び出しは文字をエスケープしますが、Bourne シェルに対してのみです。Windows の下で実行するcmd.exe
と、エスケープされた引用符文字をバーフし、代わりに無視するようです。その結果、コマンドが正しく解釈されません。私の問題を解決する別の方法は、クロスプラットフォームでエスケープ コマンド シーケンスを実行するためのより良い方法があるかどうかを知らせることだと思いますがsh
、アクティブな Ruby シェルを作成できれば問題は解決するように思えます。