将环境变量传递给exec shell命令的正确方法

时间:2012-02-20 06:39:24

标签: ruby

我正在使用ruby 1.8.7补丁249.以下是将环境变量传递给我需要从我的ruby程序执行的shell命令的最佳/唯一方法吗?

fork do       
   ENV['A'] = 'A'
   exec "/bin/bash -c 'echo $A'"
end

Process.wait

4 个答案:

答案 0 :(得分:29)

有一种非常简单的方法:

system({"MYVAR" => "42"}, "echo $MYVAR")

所有归功于Avdi:https://stackoverflow.com/a/8301399/171933

答案 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'"