【问题标题】:Are environment variables preserved through qx in a perl script环境变量是否通过 qx 在 perl 脚本中保留
【发布时间】:2020-03-26 10:56:13
【问题描述】:

我有一些遗留的 perl 脚本,它设置环境变量

$ENV{"ENV_VAR_NAME"} = $envVar;

然后使用 qx() 执行另一个 shell 命令

$command = "$xyz";
$result = qx($command);

修改后的 ENV_VAR_NAME 何时可用 qx 执行新命令。

【问题讨论】:

  • 你尝试的时候发生了什么?
  • 我在 $command 中调用了多个脚本,并且在某处我认为同一个 Env 变量似乎被覆盖了。我不确定 qx 是否保留了 env 变量,因此想到了询问。
  • 我看到我遇到的问题有所不同,我是在远程系统上执行命令。所以我有一些像 qx("ssh ...")... 在本地主机上它工作正常。

标签: perl qx


【解决方案1】:

是的。

perlvar%ENV

在 ENV 中设置一个值会更改您随后 fork() 关闭的任何子进程的环境。

qx 确实会产生一个子进程,因此可以访问您修改后的环境变量。

这很容易测试:

print "1: ", qx(echo \$X); # Prints "1: "

$ENV{X} = 42;

print "2: ", qx(echo \$X); # Prints "2: 42"

【讨论】:

  • 我发现我遇到的问题有所不同,我是在远程系统上执行命令。
猜你喜欢
  • 2013-10-12
  • 2013-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-26
  • 1970-01-01
  • 2019-05-17
相关资源
最近更新 更多