考虑以下Ruby代码
sleep 10
puts "Foo is #{ENV['foo']}"
将此文件保存到envtest.rb
从shell运行:
export foo=bar
ruby envtest.rb &
export foo=baz
( ... 10 seconds later ... )
=> Foo is bar
在启动ruby解释器时,似乎会评估环境。是否可以在执行期间更新环境变量并将这些更改反映在正在运行的进程中?如果是这样,怎么样?
答案 0 :(得分:3)
您可以在运行时 - 从ruby脚本内部 - 使用:
更改值ENV['VARIABLE_NAME'] = 'value'
启动后,无法从流程外部更改环境值。这是设计,因为环境将在流程启动时传递。
答案 1 :(得分:1)
没有。这是不可能的。一个进程永远不能直接操纵不同的已经运行的进程的环境。你所能做的就是为未出生的孩子设定环境,然后创造它们。
唯一的另一种方法是通过主动协商通信回到父母。这就是 tset (1)(即tset -s
)的输出始终由父级评估的原因。