如何在Perl脚本中导出shell变量?

lam*_*cro 5 unix shell perl environment-variables

我有一个shell脚本,带有一个shell变量列表,在进入编程环境之前执行.

我想使用Perl脚本进入编程环境:

system("environment_defaults.sh");
system("obe");
Run Code Online (Sandbox Code Playgroud)

但是当我进入环境时,变量没有设置.

Eth*_*her 9

当您调用第二个命令时,它不会在您在第一个命令中修改的环境中完成.事实上,没有从第一个命令剩下的环境,因为用来调用"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)


Imr*_*e L 2

sh -c将调用不同的进程,并且环境变量在这些进程中被隔离。

另外,调用environment_defaults.sh 是否还会创建另一个 sh 进程,其中这些变量将被单独设置?

或者启动 Perl 脚本并导出这些环境变量,这些变量将为其所有子进程设置。