在perl代码中运行ksh脚本无效

时间:2012-04-10 08:58:17

标签: perl bash shell unix ksh

我在/opt/apps/abc/folder/properties.env这样的位置有一个Korn shell脚本。我可以使用dot命令从Unix bash执行它:

. /opt/apps/abc/folder/properties.env

这很有效。

我有一个Perl脚本abc.pl,我从中调用脚本properties.env。我尝试了以下不同的方法:

  1. system('/usr/bin/ksh','-c', '. /opt/apps/abc/folder/properties.env');

  2. /usr/bin/ksh -c /opt/apps/abc/folder/properties.env;

  3. system('. /opt/apps/abc/folder/properties.env');

  4. 以上工作都没有。我不想使用exec,因为我想返回Perl脚本。我做错了什么?

2 个答案:

答案 0 :(得分:3)

环境更改只会持续system命令生成的ksh会话的生命周期。如果您希望环境更改影响Perl脚本,则必须在启动Perl程序之前获取该文件

答案 1 :(得分:0)

如果你需要perl代码中的那些环境变量(不在你调用perl的环境中),你也可以读取和解析那些properties.env并在%ENV变量中设置环境。

e.g

$ENV{'ENV_VAR1'}=VALUE_OF_ENV_VAR1

使用system()生成另一个进程,正如另一张海报所说。改变孩子的环境不会影响父母。