【问题标题】:Environment variables not loaded when executing command via `ssh` on remote machine在远程机器上通过 `ssh` 执行命令时未加载环境变量
【发布时间】:2021-09-29 14:20:28
【问题描述】:

我想编写一个在远程服务器上执行多个命令的脚本,其中包括执行一些应用程序。远程机器上的.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定义,在执行命令的环境中没有受到影响。

【问题讨论】:

  • NB 运行 ssh <host> "echo $PATH" 会在本地系统而不是远程系统上回显您的路径。

标签: linux ssh


【解决方案1】:

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

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

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

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

【讨论】:

  • 这是.bashrc中设置环境变量的原因之一。将它们放在您的登录 shell 配置中,并让任何其他非登录交互式 shell 继承变量。
  • 这就是我现在正在做的事情。
猜你喜欢
  • 2015-03-07
  • 2013-11-22
  • 2013-06-06
  • 2020-08-16
  • 1970-01-01
  • 2012-09-30
  • 2017-02-08
  • 2021-08-08
  • 2011-02-02
相关资源
最近更新 更多