我有一个运行一组命令的脚本,它需要在运行其中一个命令之前设置一些环境变量。问题是系统命令作为单独的进程启动,并且我在那里设置的任何环境变量对于脚本运行的上下文都是不可见的。我该如何克服这个问题?
system("set WALLET=NO");
do some perl commands; #this command needs env variable WALLET=NO to be set
Run Code Online (Sandbox Code Playgroud)
可以使用%ENV哈希在程序中设置环境变量
$ENV{WALLET} = 'NO';
run_perl_command_that_needs_ENV()
Run Code Online (Sandbox Code Playgroud)
该程序中设置的变量在该程序及其子程序中可见,而不是在其父程序中可见。
程序如何“知道”是否需要设置呢?这将通过先前执行的 shell 操作来传达,无论您认为最合适的方式。举一个简单的例子,他们可以返回一条指令来设置变量
my $set_var = qx("script_that_sets_var_and_returns_flag");
# perhaps need to process the return for the flag value
if ($set_var) {
$ENV{WALLET} = 'NO';
...
}
Run Code Online (Sandbox Code Playgroud)
此处以运算符形式qx使用的“反引号” ,从子 shell 中发生的任何内容返回标准输出流(与 不同system,后者没有)。有些库在运行外部命令方面更加复杂(或简单)。
根据 shell 中实际发生的情况,可能需要处理返回以提取所需标志的值。
或者,在 shell 中完成的操作可以编写某种配置文件,可能就像带有 var=value 对的行一样简单,然后返回到 Perl 脚本中可以读取该文件。然后你需要一些协议,可能相当简单,用于了解有哪些标志以及它们的含义。
有了更多细节,也许我们可以提供更准确的答案。
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |