ssh:通过 EOL 传递命令时没有设置 $PATH?

ssh:通过 EOL 传递命令时没有设置 $PATH?

我有一个想要从远程服务器运行的部署脚本,如果我连接到服务器并手动执行命令,它可以正常工作:

ssh root@server
cd /some-deploy-folder
node do-something.js

但是如果我尝试通过将其传递给 ssh 的单个命令来执行相同操作:

ssh -t root@localhost <<EOF
  cd /some-deploy-folder
  node do-something.js     
  exit
EOF

Bash 无法找到node命令报告node: command not found

是否存在某些原因导致EOL直接传递命令ssh无法正确设置环境?

答案1

问题是,当您发送命令而不是直接登录到 shell 时,它是非交互式的,并且您没有相同的环境,您可以在此阅读更多相关信息:

https://askubuntu.com/questions/698957/ssh-into-a-machine-and-then-launch-an-interactive-command-line-program

以下是有关贝壳类型的更多信息:

https://unix.stackexchange.com/questions/50665/interactive-shells-login-shells-non-login-shell 之间的区别是什么

https://unix.stackexchange.com/questions/38175/difference-between-login-shell-and-non-login-shell

相关内容