我的.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
中设置.profile
,PATH
也未正确设置。
在流浪汉日志*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
答案 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
希望这有助于其他人。