【问题标题】:Ruby: pass environment variable to sudo script?Ruby:将环境变量传递给 sudo 脚本?
【发布时间】:2017-04-03 18:45:09
【问题描述】:

我有一个关于Shell out from ruby while setting an environment variable 的后续问题。我尝试通过 sudo 将环境变量提供给 shell 脚本,但没有成功。

这是示例单行脚本,“/usr/bin/wrapper.sh”。

echo $MYVAR

测试,

$ irb
> system({'MYVAR' => "42"}, "echo $MYVAR")        ==> GOOD
> system({'MYVAR' => "42"}, "wrapper.sh")         ==> GOOD
> system({'MYVAR' => "42"}, "sudo echo $MYVAR")   ==> GOOD
> system({'MYVAR' => "42"}, "sudo wrapper.sh")    ==> NOT GOOD

感谢您的帮助。

【问题讨论】:

  • 我不确定是否有办法将该变量标记为export,因此它会影响子shell。 wrapper.sh 没有在与sudo 的直接shell 相同的进程中运行。 ENV['MYVAR'] = 42 在运行之前是否正确传播?

标签: ruby shell environment-variables environment


【解决方案1】:

你需要 sudo -E

$ irb
>> system({'MYVAR' => "42"}, "sudo wrapper.sh")
=> true
>> system({'MYVAR' => "42"}, "wrapper.sh")
42
=> true
>> system({'MYVAR' => "42"}, "sudo -E wrapper.sh")
42
=> true
>> 

【讨论】:

    猜你喜欢
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    相关资源
    最近更新 更多