Zsh 的 SSH“未找到命令”

Zsh 的 SSH“未找到命令”

我在客户端和服务器上使用 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

我对@rozcietrewiacz 的评论投了赞成票,但我想将其作为完整的答案。 (这对已经设置了两个点文件的发帖人没有帮助,但我认为这将帮助像我这样根据错误找到这个问题的人。)

zsh读取.zshenv.zshrc用于交互式登录,但仅.zshenv适用于非交互式登录。为了解决这个问题,我需要从 my 中分离出 PATH 设置.zshrc并将它们移动到.zshenv.

就我而言,我无法运行通过 ssh 与另一台服务器通信的 Mercurial 命令,因为我的路径(及其自身)是在服务器上hg设置的。.zshrc

更详细的可以找到这里这里

答案3

原因是这里的PATH。

which bundle在两个外壳上做一个,这应该是不言自明的!您可以编辑 PATH 变量,将其导出到您的需要,或者使用绝对路径。

相关内容