我想编写一个在远程服务器上执行多个命令的脚本,其中包括执行一些应用程序。 .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> 'cat ~/.bashrc'
并确认该文件确实包含所有 PATH
定义,在命令执行的环境中不受影响。
最佳答案
经过两个小时的排查,我终于找到了问题所在。这是因为下面的命令以.bashrc
开头.
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
这可以防止此后的任何事情在 ssh <host> <command>
环境中执行.
如果您遇到类似问题,请尝试检查 .bashrc
的开头文件。
关于linux - 在远程计算机上通过 `ssh` 执行命令时未加载环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69378214/