[英]Eshell can't find script on eshell path
我的目標
我正在嘗試將“/opt/bin”添加到 eshell 用於查找腳本的路徑列表中。 到目前為止,我已經嘗試通過三種方式做到這一點
到目前為止的嘗試
1) (setenv "PATH" (concat "/opt/bin:" (getenv "PATH")))
2) (eshell/addpath "/opt/bin:")
3) (add-to-list 'exec-path "/opt/bin")
第一次嘗試確實將“/opt/bin”添加到 eshell 的路徑(在下面調用“which lein”的 output 中顯示為“/opt/bin:”的第一個實例)
第二次嘗試還將“/opt/bin”添加到 eshell 的路徑(在下面調用“which lein”的 output 中顯示為“/opt/bin:”的第二個實例)
實際上,我已經將“/opt/bin”添加到我的執行路徑中有一段時間了。 我相信我這樣做是為了在運行 term 命令以啟動 shell 時 /opt/bin 在我的路徑上,這似乎工作正常但無助於 eshell 在那里找到命令。
失敗嘗試和臨時解決方法
您可以在下面的 eshell output 中看到,即使命令 lein 在 eshell 識別的路徑上可用,eshell 也找不到該命令。 但是,如果我從 eshell 默認路徑中的目錄創建符號鏈接到 /opt/bin 中的腳本,那么 eshell 就能夠找到它。
艾殼 output
~ $ 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
,這是一個緩沖區本地eshell-path-env
。 這意味着,如果您使用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 版本是如何工作的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.