【问题标题】:Running ksh script inside a perl code is not working在 perl 代码中运行 ksh 脚本不起作用
【发布时间】:2012-04-22 13:37:35
【问题描述】:

我在/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');

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

【问题讨论】:

  • 1) 你期待什么结果? 2) 你会得到什么结果?
  • system('/usr/bin/ksh','-c', '/opt/apps/abc/folder/properties.env'); 怎么样?
  • 我也试过这个。没用。
  • ksh 脚本中有一些设置环境属性的命令。我希望它成功运行。
  • 不可能从子进程中设置环境变量(你只能从 perl 中启动 ksh 脚本作为子进程)。从脚本中手动提取它们的设置并在 perl 脚本中设置它们的唯一方法。对不起英语。

标签: perl bash shell unix ksh


【解决方案1】:

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

例如

$ENV{'ENV_VAR1'}=VALUE_OF_ENV_VAR1

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-19
      • 1970-01-01
      • 2021-12-14
      相关资源
      最近更新 更多