我的.emacs中有以下内容:
(require 'tramp)
(add-to-list 'tramp-remote-path "/some/path")
(add-to-list 'tramp-remote-path 'tramp-default-remote-path)因此,当我在ssh上使用tramp打开一个文件时,我希望我的PATH包含/some/path。相反,运行M-! echo $PATH会返回
/bin:/usr/bin:/usr/sbin:/usr/local/bin即使我在.bashrc或.profile中设置了PATH,也没有正确地设置PATH。
在tramp日志*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
发布于 2014-10-30 09:41:16
令人尴尬的是,答案在“流浪汉手册”中:
另一种可能是在登录时重用远程帐户的路径设置。通常,这些设置会被覆盖,因为它们可能对tramp没有用处。持卡人自己拥有的远程路径保存这些设置。你可以通过
(add-to-list 'tramp-remote-path 'tramp-own-remote-path)我仍然不知道为什么它会忽略添加到tramp-remote-path中的其他路径。
发布于 2016-06-17 16:56:26
我在“流浪汉手册”里读过这篇文章并试过了。已添加
(add-to-list 'tramp-remote-path 'tramp-own-remote-path)然后退出emacs,删除~/.emacs.d/tramp,并按照解释的这里重新启动
但是M-! echo $PATH仍然显示tramp-default-remote-path的值,而不是在我的.bashrc中设置的值。
问题似乎是我对如何加载配置文件的理解。tramp调用远程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手册页找到了这个:
如果使用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。
希望这对其他人有帮助。
https://stackoverflow.com/questions/26630640
复制相似问题