2016-08-13 5 views
2

ルビスクリプト内でWindowsマシンでコマンドを実行する前に、いくつかの環境変数を設定する必要があります。 Linuxの は、あなたがウィンドウ内の環境変数を使用したRubyシステムコール

cmd = 'echo $FOO' 
system({'FOO' => '123'}, cmd) 

OUTPUT is "123" 

を行うことができますが、Windows上で、これは動作しません、出力は私が窓のルビーのシステムコールに環境変数を設定することができますどのように$ FOO

です。私はENVのいくつかのバリエーションとエラーを持っているか、まだ動作しません。ホストのデフォルトのシェルが何であれ

system({$ENV[:VAR1] => "WIN7"}, 'echo $ENV[:VAR1]') 
+0

あなたがシェルに発行しようとしているコマンドは何ですか? –

+0

環境変数にアクセスしようとしていますが、Windowsで$ ENV [:var]を使用していますが、この環境変数にアクセスすると動作しないようです。 – ibaralf

答えて

3

Rubyのsystem()呼び出すには、そうあなたは、そのシェルの言語を話すする必要があります。

Windowsのデフォルトシェルはcmd.exeです。ここでは、環境変数FOOを展開するために%FOO%と参照する必要があります。

このように、あなたのコードは次のようになります。

cmd = 'echo %FOO%' 
system({'FOO' => '123'}, cmd) 
+0

こんにちはmkelement、普通の変数で、それは正常に動作しますが、私がしようとしていたものは、環境変数(ENV)を使用していました。それは理にかなっていますか?申し訳ありませんが、私は非常に明確ではなかった。 – ibaralf

+0

@ibaralf: 'cmd.exe'では、_all_変数は_environment_変数なので、'%FOO% 'は実際には環境変数' FOO'を参照します。 – mklement0

関連する問題