Shell
我怎樣才能乾淨地添加到 $PATH?
我想要一種將東西添加到系統範圍內或單個使用者的 $PATH 的方法,而無需多次添加相同的路徑。
想要這樣做的一個原因是可以在
.bashrc
不需要登錄的情況下進行添加,並且在使用 (eg) 的系統上也更有用lightdm
,它從不呼叫.profile
.我知道有關如何從 $PATH 中清除重複項的問題,但我不想刪除重複項。我想要一種僅在路徑不存在的情況下添加路徑的方法。
假設我們要添加的新路徑是:
new=/opt/bin
然後,使用任何 POSIX shell,我們可以測試是否
new
已經在路徑中,如果不是,則添加它:case ":${PATH:=$new}:" in *:"$new":*) ;; *) PATH="$new:$PATH" ;; esac
注意冒號的使用。如果沒有冒號,我們可能會認為它
new=/bin
已經在路徑中,因為它與/usr/bin
. 雖然 PATH 通常有許多元素,但也會處理 PATH 中零元素和一元素的特殊情況。PATH 最初沒有元素(為空)的情況通過使用${PATH:=$new}
which 分配PATH
給$new
它是否為空來處理。以這種方式設置參數的預設值是所有 POSIX shell 的一個特性:請參閱POSIX 文件的第 2.6.2 節。)可呼叫函式
為方便起見,可以將上面的程式碼放入一個函式中。這個函式可以在命令行中定義,或者,為了讓它永久可用,放入你的 shell 的初始化腳本(對於 bash 使用者,這將是
~/.bashrc
):pupdate() { case ":${PATH:=$1}:" in *:"$1":*) ;; *) PATH="$1:$PATH" ;; esac; }
要使用此路徑更新功能將目錄添加到目前 PATH:
pupdate /new/path