簡體   English   中英

Eshell 在 eshell 路徑上找不到腳本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM