本地通过 ssh 执行远端服务器命令时,抛出相关命令找不到的错误信息;通过 ssh 登录到服务器,该命令可以找到。

推测是环境变量的问题,经过验证,两种方式 echo $PATH 的结果存在差异。证实其在 ~/.bashrc 中的 $PATH 改写命令未执行。

推测 ~/.bashrc 在远端执行 ssh 命令时未自动执行

  • 操作 1: 在远端执行命令头部插入一句 . ~/.bashrc;,实际并没有效果
  • 操作 2: 在 ~/.bashrc 文件顶部插入一行 touch ~/something.txt,再度执行远端命令,有文件生成
  • 可以得出远端 ssh 依然有执行 ~/.bashrc 的结论,推测不成立

实际情况

查看 ~/.bashrc 可见,其顶部有判断当前命令执行的交互方式,且十分显眼。。。

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

故删掉以上判断即可正常运行。