Bash

PATH 中的萬用字元(環境變數)

  • January 10, 2022

我在我的主目錄中本地安裝了一堆應用程序。為了讓它們在全球範圍內可用,我將它們添加PATH.bashrc

PATH="$PATH:/home/user/apps/app1/bin"
PATH="$PATH:/home/user/apps/app2/bin"
PATH="$PATH:/home/user/apps/appn/bin"

我怎樣才能設置它,這樣我就不必添加每個新的?我正在嘗試這個,但它不起作用:

PATH="$PATH:/home/user/apps/*/bin"

注意:我知道我可以用循環添加它們,但我也擔心我的PATH變數會變得太大,我想知道是否可以以某種方式對其進行萬用字元。

萬用字元不會被擴展$PATH,不會。根據bash 手冊,PATH 是:

以冒號分隔的目錄列表, shell 在其中查找命令

(我的重點)。

來自另一個方向,手冊的命令搜尋和執行部分說,部分:

如果名稱既不是 shell 函式也不是內置函式,並且不包含斜杠,Bash 會在 $PATH 的每個元素中搜尋包含該名稱的執行檔的目錄。

…(我的重點)——它沒有提到對路徑元素進行的任何特殊處理,只是說它們應該是目錄(原樣)。

我不確定 bash 變數大小的限制是什麼;我懷疑它是可用的記憶體。PATH 不需要導出,但很多人會這樣做;如果它被導出,它需要與其他環境變數和參數一起適應getconf ARG_MAX(參考:https ://unix.stackexchange.com/a/124422/117549 )。一個大的 PATH 目錄不應該導致太多的性能成本,因為 bash 使用雜湊表來記住以前找到的命令的位置(每個會話)。

如果您在將每個單獨的應用程序目錄添加到 PATH 時確實遇到了限制(視覺或技術),我建議您在 PATH 中添加一個“符號連結”目錄,然後在其中連結來自各種應用程序的所需執行檔。

引用自:https://unix.stackexchange.com/questions/685814