【发布时间】:2011-05-02 06:10:39
【问题描述】:
在通过 SSH 执行命令时,Debian Linux 上的 PATH 变量有问题。例如,当我使用 GIT 或 Mercurial 并将它们安装在 /opt 而不是 /usr/local 中时,就会发生这种情况。但我也可以像这样轻松地重现它:
当我通过 SSH 以正常方式登录服务器然后执行 echo $PATH 时,我会得到我在 /etc/profile 中配置的 PATH:
/usr/local/bin:/usr/bin:/bin:/usr/games:/opt/maven/bin:/opt/ant/bin:/opt/mercurial/bin:/opt/git/bin
但是当我改为 ssh user@server 'echo $PATH' 时,我得到了这个:
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
当我使用带有 ssh URL 的 GIT 或 Mercurial 时,也会发生同样的情况。它在服务器上找不到 hg 或 git 可执行文件,因为它没有从 /etc/profile 获取 PATH。
所以问题是:是否有一种“更全局”的方式来配置 PATH,以便它也适用于 SSH 远程执行?为每个用户配置 PATH 不是一种选择。在客户端上使用 git/hg 时指定 git/hg 可执行文件的完整路径也不是一种选择。而且我知道我可以在 /usr/local/bin 中使用符号链接或包装脚本来使其正常工作,但我正在明确搜索通过 SSH 远程执行命令时是否有正确 PATH 的可能性。
【问题讨论】:
-
我会使用 /usr/local/bin 中的符号链接作为解决方法。它确实相对干净,而且避免只为一两个可执行文件(例如 /opt/mercurial/bin)修改 PATH。
-
对于 Mercurial,您可以在
.hg/hgrc文件或一些更全局的配置文件中将ui.remotecmd设置为/opt/mercurial/bin/hg。这将使 Mercurial 将该命令用作远程hg命令。