1

可能重复:
为什么 SSH 远程命令获得的环境变量比手动运行时少?

在 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
4

2 回答 2

1

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

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

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

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

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

当你使用ssh.

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

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

于 2012-10-10T02:41:44.010 回答
0

The trick is to run .bash_profile and the perl script under the same remote shell session:

ssh user@B 'source ~/.bash_profile && perl myscript.pl'
于 2012-10-10T08:50:49.650 回答