这个问题已经在这里有了答案:




已关闭8年。






在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

最佳答案

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

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

  • 例如,启动时,bash可能会读取以下任何文件:
  • ~/.bash_profile
  • ~/.profile
  • ~/.bashrc
  • ~/.bash_login
  • /etc/profile

  • 取决于各种因素,例如 shell 是否被认为是“登录” shell , session 是否是“交互” session 等。

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

    您可以通过将echo here in XXXX放入各个文件中并执行ssh命令来完成此操作。 (请注意,没有命令的ssh可能会调用与带有命令的ssh不同的启动文件。)

    对于bash,请参考其INVOCATION页中的man部分,以获取有关bash启动时读取哪些文件的描述。

    关于perl - perl:通过SSH运行远程perl脚本,并在远程计算机上查询环境变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12809359/

    10-16 17:44