Shell

我怎樣才能乾淨地添加到 $PATH?

  • June 12, 2021

我想要一種將東西添加到系統範圍內或單個使用者的 $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

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