我正在使用ruby 1.8.7补丁249.以下是将环境变量传递给我需要从我的ruby程序执行的shell命令的最佳/唯一方法吗?
fork do
ENV['A'] = 'A'
exec "/bin/bash -c 'echo $A'"
end
Process.wait
答案 0 :(得分:29)
有一种非常简单的方法:
system({"MYVAR" => "42"}, "echo $MYVAR")
答案 1 :(得分:12)
docs for Ruby's exec
method似乎不完整,但它确实说有一个名为env
的可选第一个参数,所以可能是指定了环境。通过有根据的猜测和一些实验,我发现使用它的正确方法是:
exec({"A"=>"A"}, "/bin/bash -c 'echo $A'")
编辑1:抱歉,对旧版本的Ruby不起作用。
答案 2 :(得分:3)
对于1.8~用户 - 复制了exec的1.9行为。与OP的初始尝试相同。
def exec_env(hash, cmd)
hash.each do |key,val|
ENV[key] = val
end
exec cmd
end
exec_env({"A"=>"A"}, "/bin/bash -c 'echo $A'")
答案 3 :(得分:0)
我会在一行中完成
exec "/bin/bash -c 'A=hello; echo $A'"