我有一个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|";