lam*_*cro 5 unix shell perl environment-variables
我有一个shell脚本,带有一个shell变量列表,在进入编程环境之前执行.
我想使用Perl脚本进入编程环境:
system("environment_defaults.sh");
system("obe");
Run Code Online (Sandbox Code Playgroud)
但是当我进入环境时,变量没有设置.
当您调用第二个命令时,它不会在您在第一个命令中修改的环境中完成.事实上,是没有从第一个命令剩下的环境,因为用来调用"environment_defaults.sh"壳已经退出.
要将第一个命令的上下文保留在第二个命令中,请在同一个shell中调用它们:
system("source environment_defaults.sh && obe");
Run Code Online (Sandbox Code Playgroud)
请注意,您需要调用shell脚本source以便在当前 shell中执行其操作,而不是调用新shell来执行它们.
或者,在每个shell的开头修改您的环境(例如使用.bash_profile,如果使用bash),或者在perl中更改环境变量:
$ENV{FOO} = "hello";
system('echo $FOO');
Run Code Online (Sandbox Code Playgroud)
sh -c将调用不同的进程,并且环境变量在这些进程中被隔离。
另外,调用environment_defaults.sh 是否还会创建另一个 sh 进程,其中这些变量将被单独设置?
或者启动 Perl 脚本并导出这些环境变量,这些变量将为其所有子进程设置。