TRAMP忽略了tramp-remote-path

时间:2014-10-29 12:41:37

标签: emacs tramp

我的.emacs中有以下内容:

(require 'tramp)
(add-to-list 'tramp-remote-path "/some/path")
(add-to-list 'tramp-remote-path 'tramp-default-remote-path)

所以当我使用tramp over ssh打开文件时,我希望我的PATH包含/some/path。相反,运行M-! echo $PATH会返回

/bin:/usr/bin:/usr/sbin:/usr/local/bin

即使我在export PATH=/hwdisks/data/modules/pkg/git/1.8.4.1/bin/git:$PATH.bashrc中设置.profilePATH也未正确设置。

在流浪汉日志*debug tramp/ssh remotehost*中,我可以看到tramp明确设置PATH

12:28:34.202135 tramp-send-command (6) # PATH=/bin:/usr/bin:/usr/sbin:/usr/local/bin; export PATH

如果我在echo "in .bashrc"中包含.bashrc,它会出现在tramp日志中,所以我知道tramp正在阅读它。

如何让tramp使用正确的PATH

Emacs版本:24.2.1
Tramp版本:2.2.3-24.1

2 个答案:

答案 0 :(得分:8)

令人尴尬的是,答案在流浪汉手册中:

  

另一种可能性是在您登录时重复使用远程帐户的路径设置。通常,这些设置会被覆盖,因为它们可能对tramp没用。占位符tramp-own-remote-path保留这些设置。您可以通过

激活它
(add-to-list 'tramp-remote-path 'tramp-own-remote-path)

我仍然不确定为什么忽略添加到tramp-remote-path的其他路径。

答案 1 :(得分:6)

我在tramp手册中读到了这个并试过了。 添加了

(add-to-list 'tramp-remote-path 'tramp-own-remote-path)

然后退出emacs,移除~/.emacs.d/tramp,然后按照here

的说明重新启动

M-! echo $PATH仍显示tramp-default-remote-path的值,而不是.bashrc中设置的值。

这个问题看起来是我对如何加载配置文件的理解。 tramp调用远程shell获取远程PATH的方式:

/bin/sh -l -c 'echo $PATH'
/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin/X11:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin

由于bash作为登录shell调用,而/bin/sh调用.profile而不是.bash_profile.bashrc

我在bash手册页中找到了这个:

  

如果使用名称sh调用bash,它会尝试模仿启动行为   sh的历史版本尽可能接近,同时符合   POSIX标准也是如此。当作为交互式登录shell调用时,或者   使用--login选项的非交互式shell,它首先尝试读取和   按顺序执行/ etc / profile和〜/ .profile中的命令。该   --noprofile选项可用于抑制此行为。当作为一个被调用时   名为sh的交互式shell,bash查找变量ENV,展开   如果已定义其值,则使用扩展值作为文件名   阅读和执行。因为以sh调用的shell不会尝试读取和   从任何其他启动文件执行命令,--rcfile选项没有   影响。使用名称sh调用的非交互式shell不会尝试   读取任何其他启动文件。当以sh调用时,bash进入posix模式   读取启动文件后。

我通常只配置~/.bashrc~/.bash_profile让tramp正常工作看起来我应该将.bash_profile移到.profile

希望这有助于其他人。

  • GNU Emacs:25.0.94.2 Tramp:2.2.13.25.1