Shell

在原始碼上將重複項排除在 $PATH 之外

  • November 16, 2017

我有以下程式碼是source我的 -d.shellrc

PATH="${PATH}:${HOME}/perl5/bin"
PATH="${PATH}:${HOME}/.bin"
export PATH

但是,如果我對其他程式碼和source這個文件進行了更改,我的路徑會隨著每個源而變得越來越長,每次都在它們已經存在時附加它們。我能做些什麼來防止這種情況發生?

add_to_PATH () {
 for d; do
   d=$({ cd -- "$d" && { pwd -P || pwd; } } 2>/dev/null)  # canonicalize symbolic links
   if [ -z "$d" ]; then continue; fi  # skip nonexistent directory
   case ":$PATH:" in
     *":$d:"*) :;;
     *) PATH=$PATH:$d;;
   esac
 done
}
add_to_PATH ~/perl5/bin ~/.bin

符號連結規範化的行是可選的。如果你刪除它,也刪除下一行(如果你想保留不存在的目錄),或者將其更改為

if ! [ -d "$d" ]; then continue; fi

請注意,符號連結規範化方法僅保證此函式添加的目錄之間的唯一性。它也不處理邊緣情況,例如掛載在兩個位置的 NFS 目錄或 Linux 綁定掛載。

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