Bash
PATH 中的萬用字元(環境變數)
我在我的主目錄中本地安裝了一堆應用程序。為了讓它們在全球範圍內可用,我將它們添加
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 中添加一個“符號連結”目錄,然後在其中連結來自各種應用程序的所需執行檔。