我在客户端和服务器上使用 Zsh。当我使用 ssh 在远程服务器上运行命令时,它找不到二进制文件:
ssh gt "cd /home/****/app/staging && bundle exec rake db:migrate RAILS_ENV=staging"
zsh:1: command not found: bundle
Run Code Online (Sandbox Code Playgroud)
如果我使用交互式 shell 进行 SSH,我可以很好地运行相同的命令。
在服务器上,$PATH在 .zshrc 和 .zshenv 中设置
编辑
它似乎bundle不在服务器上我的 $PATH 中。也许这与 RVM(Ruby 版本管理器)有关,它与 挂钩cd,因此当您cd进入包含文件的目录时.rvmrc,它会设置 Ruby 环境并添加bundle到 $PATH。我需要查明cd非交互式 shell 是否也会触发该钩子。
二进制文件所在的路径可能会添加到登录$PATH变量中。当您运行所提供的命令时,它是通过非登录shell 执行的。解决此问题的最简单(且安全)的方法是在这种情况下指定完整路径。
| 归档时间: |
|
| 查看次数: |
14887 次 |
| 最近记录: |