Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Kernel.systemのコマンド内部で環境変数を扱う事ができる

Ruby1.9系からsystemコマンドで環境変数を設定できるようになりました。

まずは普通のsystemコマンドを見て行きます。

>> require 'dotenv'
#=> true

>> Dotenv.load
#=> {"USER_NAME"=>"Den2Taro", "PASSWORD"=>"Unique and Exciting Campus", "SENSOR"=>"123"}

>> puts ENV['USER_NAME']
Den2Taro
#=> nil

>> system 'echo $USER_NAME'
Den2Taro
#=> true

>> system 'echo `expr $SENSOR + 1`'
124
#=> true

シンボルでの記述は無理ぽいです

>> system({ALPHA: '20'}, 'echo `expr $ALPHA + 20`')
TypeError: no implicit conversion of Symbol into String

さて本題。
systemメソッドでは内部で環境変数を設定できます。

>> system({'ALPHA' => '20'}, 'echo `expr $ALPHA + 20`')
40
#=> true

更に、これは一時的なものでメソッドの外で呼び出しても無効です。

>> p ENV['ALPHA']
nil
#=> nil