如何正確添加 PATH 的路徑?
我想知道必須在哪裡將新路徑添加到
PATH
環境變數中。我知道這可以通過編輯.bashrc
(例如)來完成,但不清楚如何做到這一點。這邊走:
export PATH=~/opt/bin:$PATH
或這個?
export PATH=$PATH:~/opt/bin
簡單的東西
PATH=$PATH:~/opt/bin
要麼
PATH=~/opt/bin:$PATH
取決於您是要
~/opt/bin
在末尾添加(在所有其他目錄之後搜尋,以防多個目錄中存在同名程序)還是在開頭(在所有其他目錄之前搜尋)。您可以同時添加多個條目。
PATH=$PATH:~/opt/bin:~/opt/node/bin
或訂購的變化工作得很好。不要放在export
行首,因為它有額外的複雜性(見下文“關於 bash 以外的 shell 的說明”)。如果您
PATH
由許多不同的組件建構,您最終可能會得到重複的條目。請參閱如何添加 Unix 哪個命令發現的主目錄路徑?並使用 awk 命令刪除重複的 $PATH 條目以避免添加重複項或刪除它們。
~/bin
順便說一句,如果存在,某些發行版會自動放入您的 PATH 中。放在哪裡
將要修改的行放在
PATH
中~/.profile
,或者~/.bash_profile
如果這是您所擁有的,則放入。注意
~/.bash_rc
不是任何程序讀取的,~/.bashrc
是bash互動實例的配置文件。您不應該在~/.bashrc
. 定義環境變數的正確位置PATH
是~/.profile
(或者~/.bash_profile
如果您不關心 bash 以外的 shell)。請參閱它們之間有什麼區別以及我應該使用哪一個?不要把它放在
/etc/environment
or中~/.pam_environment
:這些不是 shell 文件,你不能像$PATH
裡面那樣使用替換。在這些文件中,您只能覆蓋一個變數,而不能添加到它。某些系統腳本中的潛在並發症
如果變數已經在環境中,則不需要
export
:變數值的任何更改都會反映在環境PATH
中。¹幾乎總是在環境中;所有 Unix 系統都在很早的時候就設置了它(實際上通常是在第一個過程中)。在登錄時,您可以依賴
PATH
已經在環境中,並且已經包含一些系統目錄。如果您正在編寫一個可能在設置某種虛擬環境時提前執行的腳本,您可能需要確保它PATH
是非空的並導出:如果PATH
仍然未設置,那麼類似的東西PATH=$PATH:/some/directory
會設置PATH
為:/some/directory
,並且空組件開頭表示目前目錄(如.:/some/directory
)。if [ -z "${PATH-}" ]; then export PATH=/usr/local/bin:/usr/bin:/bin; fi
關於 bash 以外的 shell 的注意事項
在 bash 中,ksh 和 zsh
export
是特殊的語法,而且兩者都PATH=~/opt/bin:$PATH
做export PATH=~/opt/bin:$PATH
正確的事。在其他 Bourne/POSIX 樣式的 shell 中,例如 dash(/bin/sh
在許多系統上),export
被解析為普通命令,這意味著兩個不同之處:
~
僅在單詞的開頭進行解析,分配除外(有關詳細資訊,請參見如何添加要被 Unix 發現的主目錄路徑?);$PATH
如果包含空格或.,則外部雙引號會中斷PATH``\[*?
。因此,在像 dash 這樣的 shell 中,
export PATH=~/opt/bin:$PATH
設置PATH
為文字字元串~/opt/bin/:
,後跟PATH
最多第一個空格的值。PATH=~/opt/bin:$PATH
(一個簡單的任務)不需要引號並且做正確的事情。如果要export
在可移植腳本中使用,則需要編寫export PATH="$HOME/opt/bin:$PATH"
, orPATH=~/opt/bin:$PATH; export PATH
(或者PATH=$HOME/opt/bin:$PATH; export PATH
為了移植到不接受export var=value
也不進行波浪號擴展的 Bourne shell)。¹在 Bourne shell 中並非如此(就像在實際的 Bourne shell 中一樣,而不是現代 POSIX 樣式的 shell),但是這些天您極不可能遇到這種舊的 shell。