我有一个shell脚本,其中包含一个shell变量列表,该脚本在进入编程环境之前执行。
我想使用Perl脚本进入编程环境:
system("environment_defaults.sh");
system("obe");但是当我进入环境时,变量并没有被设置。
发布于 2010-06-04 00:24:24
当您调用第二个命令时,它不是在您在第一个命令中修改的环境中完成的。实际上,第一个命令没有剩余的环境,因为用于调用"environment_defaults.sh“的shell已经退出。
要将第一个命令的上下文保留在第二个命令中,请在同一个shell中调用它们:
system("source environment_defaults.sh && obe");请注意,您需要使用source调用shell脚本,以便在当前shell中执行它的操作,而不是调用新的shell来执行它们。
或者,在每个shell的开头修改您的环境(例如,如果使用bash,则使用.bash_profile ),或者在perl本身中更改您的环境变量:
$ENV{FOO} = "hello";
system('echo $FOO');发布于 2010-06-04 00:23:07
将调用不同的sh -c进程,并将环境变量隔离在这些进程中。
另外,调用environment_defaults.sh不也会使另一个sh进程在这些变量将被单独设置的范围内吗?
或者使用导出的这些环境变量启动Perl脚本,并为其所有子进程设置这些环境变量。
发布于 2010-06-04 00:26:54
每个进程都有自己的环境,每次调用"system“都会运行一个新的进程。所以,你所做的是行不通的。您必须在单个进程中运行这两个命令。
但是,请注意,在Perl脚本存在之后,它设置的任何环境变量都将不能在命令行中使用,因为Perl脚本也是一个具有自己的环境的进程。
https://stackoverflow.com/questions/2967762
复制相似问题