Czy istnieje prosty sposób, aby w Zsh dodać katalog do mojej ŚCIEŻKI tylko wtedy, gdy nie jest już obecny? (lub, bardziej ogólnie, dowolna zmienna środowiskowa). Próbowałem:
PATH+=/my/directory
... ale jeśli zostanie to wykonane dwukrotnie, zostanie dodane dwukrotnie.
Odpowiedzi:
In
zsh
$PATH
jest powiązany (patrztypeset -T
) z$path
tablicą. Możesz wymusić na tej tablicy unikalne wartości za pomocą:A następnie dodaj ścieżkę za pomocą:
Bez obaw, czy już tam był.
Aby dodać go z przodu, wykonaj:
lub:
jeśli
~/foo
był już w$path
, spowoduje przeniesienie go do przodu.źródło
typeset -Ug path
? Kiedy używamtypeset -U path
w swoim~/.zshrc
pliku, zawsze pojawia się błąd, że nic nie jest na ścieżce, gdy zshrc jest uruchomiony-g
ma na celu uniknięcie ograniczenia zakresu, ale w~/.zshrc
zasięgu jest już globalny. Ponadto, nigdy nie widziałemzsh
narzekać na puste$PATH
(oczywiście z wyjątkiem polecenia nie znaleziono błędów oczywiście).Dodaj
export -U PATH=~/foo${PATH:+:$PATH}
do jednego ze swoich plików startowych.-U
Zachowuje tylko pierwsze wystąpienie wartości w macierzy lub pewnych:
zmiennych rozdzielany jak PATH.źródło
Musisz zrobić coś takiego:
Działa to tylko wtedy, gdy
newpath
jest podzielone na dwa „:”, należy wziąć pod uwagę przypadki, gdy jest na początku lub na końcu podobnie.Urgh.
źródło
echo "$PATH"
: zawsze umieszczaj podwójne cudzysłowy wokół podstawień zmiennych ).case ":$PATH:" in *:/new/directory:*) :;; *) PATH=$PATH:/new/directory;; esac