Chtěl bych způsob, jak přidat věci do $PATH, v rámci celého systému nebo pro jednotlivé uživatele, aniž bych potenciálně přidával stejnou cestu několikrát.
Jedním z důvodů, proč to chtít udělat, je to, aby bylo možné provádět doplňky v .bashrc
, který nevyžaduje přihlášení a je také užitečnější v systémech, které používají (např.) lightdm
, který nikdy nevolá .profile
.
Jsem si vědom otázek týkajících se čištění duplikátů z $PATH, ale nechci duplikáty odstraňovat . Chtěl bych způsob, jak přidat cesty, pouze pokud ještě nejsou přítomny.
Přijatá odpověď:
Předpokládejme, že nová cesta, kterou chceme přidat, je:
new=/opt/bin
Potom pomocí libovolného shellu POSIX můžeme otestovat, zda je new
je již v cestě a pokud není, přidejte jej:
case ":${PATH:=$new}:" in
*:"$new":*) ;;
*) PATH="$new:$PATH" ;;
esac
Všimněte si použití dvojteček. Bez dvojteček bychom si mohli myslet, že například new=/bin
byl již v cestě, protože se shodoval se vzorem v /usr/bin
. Zatímco PATH mají normálně mnoho prvků, speciální případy nula a jednoho prvku v PATH jsou také zpracovány. Případ, kdy PATH zpočátku nemá žádné prvky (je prázdný), je řešen pomocí ${PATH:=$new}
který přiřadí PATH
na $new
pokud je prázdný. Nastavení výchozích hodnot parametrů tímto způsobem je funkcí všech shellů POSIX:viz sekce 2.6.2 dokumentů POSIX.)
Volatelná funkce
Pro pohodlí lze výše uvedený kód vložit do funkce. Tuto funkci lze definovat na příkazovém řádku nebo, aby byla trvale dostupná, vložit do inicializačního skriptu vašeho shellu (pro uživatele bash by to bylo ~/.bashrc
):
pupdate() { case ":${PATH:=$1}:" in *:"$1":*) ;; *) PATH="$1:$PATH" ;; esac; }
Chcete-li použít tuto funkci aktualizace cesty k přidání adresáře k aktuální PATH:
pupdate /new/path