首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Perl脚本中导出shell变量?

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

Stack Overflow用户
提问于 2010-06-04 00:09:59
回答 6查看 14.7K关注 0票数 5

我有一个shell脚本,其中包含一个shell变量列表,该脚本在进入编程环境之前执行。

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

代码语言:javascript
复制
system("environment_defaults.sh");
system("obe");

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

EN

回答 6

Stack Overflow用户

发布于 2010-06-04 00:24:24

当您调用第二个命令时,它不是在您在第一个命令中修改的环境中完成的。实际上,第一个命令没有剩余的环境,因为用于调用"environment_defaults.sh“的shell已经退出。

要将第一个命令的上下文保留在第二个命令中,请在同一个shell中调用它们:

代码语言:javascript
复制
system("source environment_defaults.sh && obe");

请注意,您需要使用source调用shell脚本,以便在当前shell中执行它的操作,而不是调用新的shell来执行它们。

或者,在每个shell的开头修改您的环境(例如,如果使用bash,则使用.bash_profile ),或者在perl本身中更改您的环境变量:

代码语言:javascript
复制
$ENV{FOO} = "hello";
system('echo $FOO');
票数 9
EN

Stack Overflow用户

发布于 2010-06-04 00:23:07

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

另外,调用environment_defaults.sh不也会使另一个sh进程在这些变量将被单独设置的范围内吗?

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

票数 2
EN

Stack Overflow用户

发布于 2010-06-04 00:26:54

每个进程都有自己的环境,每次调用"system“都会运行一个新的进程。所以,你所做的是行不通的。您必须在单个进程中运行这两个命令。

但是,请注意,在Perl脚本存在之后,它设置的任何环境变量都将不能在命令行中使用,因为Perl脚本也是一个具有自己的环境的进程。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2967762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档