0

我在类似的位置有一个 Korn shell 脚本/opt/apps/abc/folder/properties.env。我可以使用 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');

以上都不起作用。我不想使用exec,因为我想回到 Perl 脚本。我究竟做错了什么?

4

2 回答 2

3

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

于 2012-04-10T10:32:56.363 回答
0

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

例如

$ENV{'ENV_VAR1'}=VALUE_OF_ENV_VAR1

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

于 2012-04-10T20:42:10.147 回答