perl:通过SSH和远程计算机上的查询环境变量运行远程perl脚本

时间:2012-10-09 22:31:46

标签: perl ssh environment-variables

  

可能重复:
  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

2 个答案:

答案 0 :(得分:1)

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

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

例如,启动时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'