2014-10-29 119 views
8

我有我的.emacs以下几点:TRAMP忽略流浪汉远程路径

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

所以当我打开使用通过ssh流浪汉文件,我希望我的PATH包含/some/path。相反,运行M-! echo $PATH返回

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

即使我在.bashrc.profile设置export PATH=/hwdisks/data/modules/pkg/git/1.8.4.1/bin/git:$PATHPATH设置不正确。

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

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

如果我包括我的.bashrcecho "in .bashrc",它出现在流浪汉日志,所以我知道流浪汉正在读它。

如何让流浪汉使用正确的PATH

Emacs的版本:24.2.1
流浪汉版本:2.2.3-24.1

回答

6

尴尬,答案是流浪汉手册:

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

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

激活它,我仍然不知道为什么它会忽略加tramp-remote-path其他路径。

3

我在tramp手册中读到了这个,并试了一下。 新增

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

然后退出Emacs的,除去~/.emacs.d/tramp,并重新启动作为解释here

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

该问题看起来是我对加载配置文件的理解。 方式流浪汉调用远程shell来获得远程路径:

/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手册页:

如果bash以名称sh启动,它试图尽可能地模仿SH的 历史版本的启动过程,同时符合 POSIX标准。当以交互式登录shell或具有--login选项的非交互式shell进行调用时,它首先会尝试从/ etc/profile和〜/ .profile执行命令,并按此顺序执行命令。 --noprofile选项可以用来抑制这种行为。当以名称sh作为 交互式shell进行调用时,bash会查找变量ENV,如果已定义该变量,则将其值扩展为 ,并将扩展值用作要读取和执行的文件名称 。由于作为sh调用的shell不会尝试读取并执行来自其他任何启动文件的命令,因此--rcfile选项没有 效果。使用名称sh调用的非交互式shell不会尝试 读取其他任何启动文件。当作为sh调用时,bash在读取启动文件后进入posix模式 。

我通常只配置~/.bashrc~/.bash_profile对于流浪汉正常工作的样子,我应该将我的.bash_profile.profile

希望这会帮助别人。

  • GNU Emacs的:25.0.94.2流浪汉:2.2.13.25.1