【问题标题】:Shell command ". .profile" can not work in perl [duplicate]Shell命令“..profile”不能在perl中工作[重复]
【发布时间】:2013-06-26 05:07:23
【问题描述】:

我想在 UNIX 中切换不同的用户

. /home/tuxapp/.profile
other shell commond....

这可以在 shell 上工作。但是当我使用 perl 时它不起作用。

system(". /home/tuxapp/.profile");
other perl code....

system 会创建一个新进程吗?

但是如何使用通用环境呢?

谢谢!

【问题讨论】:

  • 定义“不工作”。正如我所料,echo 'echo foo' >a && perl -e'system ". a"' 为我打印 foo
  • 是的,system 创建了一个新进程。这就是system 的全部意义所在。 system($command) 启动 sh 并让它执行提供的 shell 命令。
  • 您似乎正在寻找这个:[如何在 perl 脚本中获取 shell 脚本 [环境变量] 而无需分叉子 shell?](stackoverflow.com/questions/6829179/…)

标签: perl shell


【解决方案1】:

如果你想要一个 shell 命令为 Perl 命令设置环境变量,你必须让那个 shell 执行 Perl 脚本。环境变量是从父级传递给子级,而不是从子级传递给父级。

. /home/tuxapp/.profile && script.pl

如果它绝对必须来自脚本,您可以启动一个设置环境并重新启动脚本的 shell。

if (!$ENV{initialized}) {
   exec('sh', '-c', '. /home/tuxapp/.profile && initialized=1 exec "$@"', '--',
         $^X, '--', $0, @ARGV)
      or die;
}

【讨论】:

    猜你喜欢
    • 2014-02-22
    • 2023-03-28
    • 2022-06-14
    • 2011-05-11
    • 2020-04-20
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多