我在客户端和服务器上使用 Zsh。当我使用 ssh 在远程服务器上运行命令时,它找不到二进制文件:
ssh gt "cd /home/****/app/staging && bundle exec rake db:migrate RAILS_ENV=staging"
zsh:1: command not found: bundle
如果我使用交互式 shell 进行 SSH,我可以很好地运行相同的命令。
在服务器上,$PATH
在 .zshrc 和 .zshenv 中设置
编辑
它似乎bundle
不在服务器上我的 $PATH 中。也许这与 RVM(Ruby 版本管理器)有关,它与 挂钩cd
,因此当您cd
进入包含.rvmrc
文件的目录时,它会设置 Ruby 环境并添加bundle
到 $PATH。我需要查明cd
非交互式 shell 是否也会触发该钩子。
答案1
二进制文件所在的路径可能已添加到$PATH
变量中登录时。当您运行所提供的命令时,它是通过未登录壳。解决此问题的最简单(且安全)的方法是在这种情况下指定完整路径。
答案2
答案3
原因是这里的PATH。
请which bundle
在两个外壳上做一个,这应该是不言自明的!您可以编辑 PATH 变量,将其导出到您的需要,或者使用绝对路径。