![SSH 调用看不到服务器上存在的正确 $path](https://linux22.com/image/107535/SSH%20%E8%B0%83%E7%94%A8%E7%9C%8B%E4%B8%8D%E5%88%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E5%AD%98%E5%9C%A8%E7%9A%84%E6%AD%A3%E7%A1%AE%20%24path.png)
在 Ubuntu 14.04 上我尝试通过 Composer 建立 Drush。
我添加 PATH="~/.composer/vendor/bin:$PATH
到服务器.bashrc
或.bash_profile
服务器上。
Drush 在服务器上正确调用。
但它不适用于远程:
ssh myalias 'drush' bash: drush: command not found
我检查了echo $PATH
网络服务器和远程,我看到:
- 在网络服务器上:
/home/<MY_USER>/.composer/vendor/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
- 在远程调用中:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
为什么有差异(没有差异/home/<MY_USER>/.composer/vendor/bin
)?如何添加远程回调的正确路径?
答案1
我将在这里做出一些假设:
drush
安装在~/.composer/vendor/bin
myalias
是您所在的远程主机的名称drush
myalias
您提到的网络服务器实际上与示例命令中的相同
bash
当您使用 shell交互登录时,将执行bash
启动脚本。.bash_profile
如果你设置PATH
在这里就一切都很好,你可以drush
直接找到。
当您以非交互方式运行某些内容(例如 )时ssh remotehost id
,没有登录 shell,因此.bash_profile
不会运行。但是,由于您的 shell 是执行bash
会话脚本.bashrc
的。我怀疑你没有PATH
在那里设置,所以drush
找不到。
您有多种选择。这里有四点建议
- 如果此 shell 之前未调用过该调用,则进行
.bashrc
调用(我的偏好).bash_profile
- 添加重复
PATH=...
行.bashrc
(简单) - 将环境设置移出
.bash_profile
和移入由和.bashrc
提供的公共文件(更优雅).bash_profile
.bashrc
- 安装
drush
在系统位置(例如/usr/local/bin
或 下的某个位置/opt
)并确保该目录包含在系统范围的PATH
设置中(较难)
答案2
PATH="~/.composer/vendor/bin:$PATH" ssh myalias 'drush'
将提供修改后的PATH
内容ssh
及其调用的任何实用程序。
答案3
另一种选择(参见此处的文档:https://www.drush.org/latest/site-aliases/)
就是添加drush脚本或者drush启动器的路径。
在您的 drush 站点别名文件(通常是 self.site.yml)中添加以下内容:
paths:
drush-script: '/path/to/drush'
这将使用 drush 脚本运行命令,该脚本不一定位于 PATH 变量中。