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