Eshell 在 eshell 路径上找不到脚本



我的目标

我正在尝试将"/opt/bin"添加到Eshell使用以查找脚本的路径列表中。到目前为止,我尝试通过三种方式进行此操作

到目前为止尝试

1)(setEnv" path"(contat"/opt/bin:"(getenv" path")))

2)(eshell/addpath"/opt/bin:")

3)(添加列表'exec-path"/opt/bin")

第一次尝试确实将"/opt/bin"添加到Eshell的路径中(它显示为"/opt/bin:"在呼叫的输出"下方的" lein"的输出中)

第二次尝试还将"/opt/bin"添加到Eshell的路径中(它显示为"/opt/bin的第二个实例:"在呼叫的输出"下方的" lein"下方)

我实际上已经添加了"/opt/bin"一段时间了。我相信我这样做是为了/opt/bin在运行术语命令启动shell时会在我的路上,这似乎可以正常工作,但没有帮助Eshell在那里找到命令。

失败的尝试和临时解决方法

即使路径上的命令可以在Eshell识别Eshell找不到命令上,您也可以在下面的Eshell输出中看到。但是,如果我从Eshells中的目录中创建一个符号链接,该目录默认路径到/opt/bin eshell中的脚本可以找到它。

ESHELL输出

~ $ which lein
which: no lein in (/opt/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/sbin:/usr/sbin:/sbin:/opt/bin:)
~ $ l /opt/bin/ | grep lein
-rwxr-xr-x   1 kevin          kevin    12538 2019-01-17 07:32 lein
~ $ sudo ln -s /opt/bin/lein /usr/local/bin/lein
[sudo] password for kevin: 
~ $ 
~ $ which lein
/usr/local/bin/lein

我宁愿不必在/usr/local/bin/中创建符号链接,以便Eshell可以在我的/opt/bin中找到脚本。注意即使重新启动Emacs,它也会发现符号链接而不是/opt/bin中的脚本。这发生在Linux Mint Debian(v9.3)版本的Emacs-25的GUI实例中。

问题:

如何让Eshell实际检查Eshell路径,而不是某些默认目录列表?我应该更新其他路径变量吗?

查看 eshell/addpath的来源,它在 eshell-path-env上使用 setq,这是缓冲区本地var。这意味着,如果您使用eshell/addpath,则必须在每个Eshell缓冲区的上下文中执行。最好的方法是使用模式钩。

(defun jpk/eshell-mode-hook ()
  (eshell/addpath "/opt/bin"))
(add-hook 'eshell-mode-hook #'jpk/eshell-mode-hook)

我对Eshell并不非常熟悉,所以我不会说这是最好的方法,但应该可以使用。eshell-path-env最初是从(getenv "PATH")设置的,因此设置PATH env var不起作用是很奇怪的(除非您在加载Eshell后要这样做)。

一种方式:

假设您正在终端模拟器或TTY中运行Emacs;然后,您只需将/opt/bin添加到$PATH即可。Eshell使用您的$PATH查找外部命令。不确定它如何用于GTK版本。

相关内容

  • 没有找到相关文章

最新更新