【发布时间】: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