我有一个 perl 脚本,我想要执行以下操作:
系统(“源myscript.sh”);
myscript.sh 导出多个环境,但一旦系统完成,这些环境就会丢失,所以如果我现在这样做:
系统(“回显$ SOME_VAR”);
失败是因为 $SOME_VAR 被 myscript.sh 导出并在系统完成时丢失。
这是一个简单的示例,但在我的实际用例中,myscript.sh 是一个复杂的脚本,我想随后执行 10 到 20 个依赖于其中环境变量的系统命令。
预先感谢您的回复。
最佳答案
假设 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 打印一些内容,您将需要做一些更复杂的事情。
关于linux - perl有没有办法运行多个linux命令并在它们之间保存环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6438862/