Bash

如何正確添加 PATH 的路徑?

  • February 16, 2021

我想知道必須在哪裡將新路徑添加到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/environmentor中~/.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 和 zshexport是特殊的語法,而且兩者都PATH=~/opt/bin:$PATHexport PATH=~/opt/bin:$PATH正確的事。在其他 Bourne/POSIX 樣式的 shell 中,例如 dash(/bin/sh在許多系統上),export被解析為普通命令,這意味著兩個不同之處:

因此,在像 dash 這樣的 shell 中,export PATH=~/opt/bin:$PATH設置PATH為文字字元串~/opt/bin/:,後跟PATH最多第一個空格的值。 PATH=~/opt/bin:$PATH(一個簡單的任務)不需要引號並且做正確的事情。如果要export在可移植腳本中使用,則需要編寫export PATH="$HOME/opt/bin:$PATH", or PATH=~/opt/bin:$PATH; export PATH(或者PATH=$HOME/opt/bin:$PATH; export PATH為了移植到不接受export var=value也不進行波浪號擴展的 Bourne shell)。

¹在 Bourne shell 中並非如此(就像在實際的 Bourne shell 中一樣,而不是現代 POSIX 樣式的 shell),但是這些天您極不可能遇到這種舊的 shell。

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