有什么办法在Perl中运行多个Linux命令,并保持它们之间的环境variables

我有一个Perl脚本,我想要做到以下几点:

系统(“源myscript.sh”);

myscript.sh导出多个envs,但是一旦系统完成,这些就会丢失,所以如果我现在这样做:

系统(“echo $ SOME_VAR”);

它失败了,因为$ SOME_VAR是由myscript.sh导出的,系统完成时会丢失。

这是一个简单的例子,但在我的实际使用情况下,myscript.sh是一个复杂的脚本,我想执行10到20个系统命令,依赖于它的envvariables。

预先感谢您的回复。

假设myscript.sh不打印任何东西,

%new_env = (); open SCRIPT_ENV, 'source myscript.sh; printenv|'; map {/(.*?)=(.*)/ and do {$new_env{$1} = $2}} <SCRIPT_ENV>; close SCRIPT_ENV; %ENV = %new_env; 

如果脚本myscript.sh打印一些东西,你将不得不做更精细的事情。

你将不得不运行一个如下所示的包装shell脚本:

 source myscript.sh env 

然后读取“env”命令的输出并从中设置perl程序中的环境。

所以你需要像这样运行包装脚本:

 open CMD, "wrapper.sh|";