【问题标题】:Change environment variable value during execution [duplicate]在执行期间更改环境变量值[重复]
【发布时间】:2013-07-23 16:42:35
【问题描述】:

考虑以下 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​​ 解释器时评估环境。是否可以在执行期间更新环境变量并将这些更改反映在正在运行的进程中?如果有,怎么做?

【问题讨论】:

标签: linux shell unix process environment-variables


【解决方案1】:

您可以在运行时更改该值 - 从 ruby​​ 脚本内部 - 使用:

ENV['VARIABLE_NAME'] = 'value'

在进程启动后,无法从进程外部更改环境值。这是设计使然,因为环境将在进程启动时传递。

【讨论】:

    【解决方案2】:

    没有。这是不可能的。一个进程永远不能直接操纵另一个已经运行的进程的环境。您所能做的就是为未出生的孩子设置环境,然后创建它们。

    唯一的其他方法是通过主动、协商的通信返回给父级。这就是为什么 tset(1)(即tset -s)的输出总是由父级评估的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 2019-04-28
      • 2021-07-25
      • 1970-01-01
      • 2013-02-22
      相关资源
      最近更新 更多