【问题标题】:perl: Run remote perl script through SSH and query environment variables on remote machine [duplicate]perl:通过 SSH 运行远程 perl 脚本并在远程机器上查询环境变量 [重复]
【发布时间】:2012-09-30 08:02:19
【问题描述】:

可能重复:
Why does an SSH remote command get fewer environment variables then when run manually?

在 Mac OS X 10.8.2 上运行

我正在通过 SSH 运行 perl 脚本,在 perl 脚本中我使用查询环境变量 $ENV{MY_VAR_NAME} 并且在本地运行时工作正常。但是通过 SSH,所有环境变量都变为未设置。

我也尝试过运行

system("source ~/.bash_profile");

在我的脚本开头无济于事。

有什么建议吗?

编辑:

重新表述我的问题。

我有机器 A 和 B。 我在机器 B 上运行我的 perl,试图在 B 上获取环境变量并且它起作用了。 然后我从 A SSH 到 B 运行相同的脚本,即使用此代码

ssh user@B perl myscript.pl

这次B上的环境变量都是空白的。

有什么建议吗?

更新:

我发现运行上面的脚本,调用了机器B上的~/.bashrc,但是在~/.bashrc中设置了环境变量后,再次运行上面的命令,还是没有看到任何环境变量。

另外,如果我的 perl 脚本只包含

echo $ENV{PATH}

然后我得到

/usr/bin:/bin:/usr/sbin:/sbin

【问题讨论】:

  • 不太可能。一个更有可能的解释是,你一开始就没有设置它们。
  • system("source ~/.bash_profile"); 将启动一个 bourne shell,告诉它运行一个 bash 脚本并退出。对该 shell 环境的任何更改都不会影响 Perl 进程的环境。
  • 你是在 ssh'ing 到另一台机器然后运行程序吗?在那种情况下不,它不会有你的环境变量,这些是特定于每台机器的(实际上是每个 shell,这就是你的 system 命令不起作用的原因)。你能通过 ssh 运行 Perl 来说明你的意思吗?
  • 如果您认为我编辑的描述有道理,有人可以投票赞成我的问题吗?
  • @ikegami,我很确定它们已经设置好了,因为我在那台机器上运行了脚本并且它看到了它们。

标签: perl ssh environment-variables


【解决方案1】:

使用 ssh 执行命令时设置的环境变量取决于:

  • 登录外壳
  • 该 shell 的启动文件的内容

例如,当它启动时bash 可能会读取以下任何文件:

  • ~/.bash_profile
  • ~/.profile
  • ~/.bashrc
  • ~/.bash_login
  • /etc/profile

取决于诸如外壳是否被视为“登录”外壳、会话是否为“交互式”会话等因素。

您应该在使用ssh 时找出正在执行的启动文件。

您只需将echo here in XXXX 放入各种文件中,然后执行ssh 命令即可。 (请注意,没有命令的ssh 可能会调用与使用命令的ssh 不同的启动文件。)

对于bash,请参阅man 页面中的INVOCATION 部分,了解bash 启动时读取哪些文件。

【讨论】:

  • 我正在运行 Mac OS X (bash 4.1)。我发现当使用 ssh 运行我的 perl 脚本时,调用的脚本是 ~/.bashrc。但是,如果我在该脚本中放置一些环境变量。在 perl 脚本运行时它仍然没有设置它。
  • 那些环境变量是export-ed?
  • 我意识到这可能是 Mac OS X 特有的问题,因为这些登录 shell 脚本都没有以任何调用方式工作,无论是在 ssh 行中使用“source XXX && perl myscript”或将“源”命令放在我的脚本顶部。还使用 shell 脚本版本而不是 perl 进行了测试。
  • 将文件XXX的副本放在某处(即pastbin.com)
  • 要完善这个答案,请添加:请参阅 ssh 环境设置的 ssh 手册页。 ~/.ssh/environment 运行,然后 ssh 调用 bash。如前所述,如果不是交互式的,那么 bash 将运行不同的启动文件。
【解决方案2】:

诀窍是在同一个远程 shell 会话下运行 .bash_profile 和 perl 脚本:

ssh user@B 'source ~/.bash_profile && perl myscript.pl'

【讨论】:

  • 试过这个还是不行。
  • 顺便说一句,我正在运行 Mac OS X 10.8.2。
猜你喜欢
  • 2012-09-18
  • 2014-10-19
  • 1970-01-01
  • 2014-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-12
  • 1970-01-01
相关资源
最近更新 更多