SSH 调用看不到服务器上存在的正确 $path

SSH 调用看不到服务器上存在的正确 $path

在 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找不到。

您有多种选择。这里有四点建议

  1. 如果此 shell 之前未调用过该调用,则进行.bashrc调用(我的偏好).bash_profile
  2. 添加重复PATH=....bashrc(简单)
  3. 将环境设置移出.bash_profile和移入由和.bashrc提供的公共文件(更优雅).bash_profile.bashrc
  4. 安装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 变量中。

相关内容