首页 > 解决方案 > 环境变量是否通过 qx 在 perl 脚本中保留

问题描述

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

$ENV{"ENV_VAR_NAME"} = $envVar;

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

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

当 qx 执行新命令时,修改后的 ENV_VAR_NAME 是否可用。

标签: perlqx

解决方案


是的。

perlvar%ENV

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

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

这可以很容易地测试:

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

$ENV{X} = 42;

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

推荐阅读