[英]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.