可能重复:
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到B运行相同的脚本,即使用此代码
ssh user@B perl myscript.pl
这次B上的环境变量都是空白的。
任何提示?
更新
我发现运行上面的脚本,机器B上的〜/ .bashrc被调用了,但是在〜/ .bashrc中设置了环境变量之后,再次运行上面的命令,我仍然没有看到任何环境变量。
另外,如果我的perl脚本只包含
echo $ENV{PATH}
然后我得到
/usr/bin:/bin:/usr/sbin:/sbin
答案 0 :(得分:1)
使用ssh执行命令时将设置的环境变量取决于:
例如,启动时bash
可能会读取以下任何文件:
~/.bash_profile
~/.profile
~/.bashrc
~/.bash_login
/etc/profile
取决于诸如shell是否被视为“登录”shell之类的因素,会话是“交互式”会话等等。
使用ssh
时,您应该找出正在执行的启动文件。
只需将echo here in XXXX
放入各种文件中即可执行此操作,然后执行ssh命令。 (请注意,没有命令的ssh
可以使用命令调用与ssh
不同的启动文件。)
对于bash
,请参阅其INVOCATION
页面中的man
部分,了解bash
启动时读取哪些文件的说明。
答案 1 :(得分:0)
诀窍是在同一个远程shell会话下运行.bash_profile
和perl脚本:
ssh user@B 'source ~/.bash_profile && perl myscript.pl'