繁体   English   中英

在远程机器上通过 `ssh` 执行命令时未加载环境变量

[英]Environment variables not loaded when executing command via `ssh` on remote machine

我想编写一个脚本,在远程服务器上执行多个命令,其中包括执行一些应用程序。 远程机器上的.bashrc文件定义了PATH变量,以便这些应用程序位于它之下。

但是当我尝试使用ssh <host> <command>时,似乎没有加载.bashrc ssh <host> 'echo $PATH'只显示一些路径,例如/usr/bin

更让我困惑的是,即使ssh <host> "source ~/.bashrc; <command>"也不起作用。 ssh <host> 'source ~/.bashrc; echo $PATH' ssh <host> 'source ~/.bashrc; echo $PATH'仍然只打印了一些路径。 我通过ssh <host> 'cat ~/.bashrc'检查并确认该文件确实包含所有PATH定义,这在命令执行的环境中没有受到影响。

于是经过两个小时的排查,终于找到了问题所在。 这是因为.bashrc开头的以下命令。

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

这可以防止之后的任何事情在ssh <host> <command>的环境中执行。

如果您遇到类似问题,请尝试检查.bashrc文件的开头。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM