Shell
在原始碼上將重複項排除在 $PATH 之外
我有以下程式碼是
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 綁定掛載。