C'è un modo semplice in zsh per aggiungere una directory al mio PERCORSO solo se non è già presente? (o, più in generale, qualsiasi variabile d'ambiente). Ho provato:
PATH+=/my/directory
... ma se eseguito due volte, viene aggiunto due volte.
C'è un modo semplice in zsh per aggiungere una directory al mio PERCORSO solo se non è già presente? (o, più in generale, qualsiasi variabile d'ambiente). Ho provato:
PATH+=/my/directory
... ma se eseguito due volte, viene aggiunto due volte.
Risposte:
In zsh $PATHè legato (vedi typeset -T) $pathall'array. È possibile forzare quell'array ad avere valori univoci con:
typeset -U path
E quindi, aggiungi il percorso con:
path+=(~/foo)
Senza doversi preoccupare se fosse già lì.
Per aggiungerlo sul davanti, fai:
path=(~/foo "$path[@]")
o:
path[1,0]=~/foo
se ~/fooera già dentro, $pathlo sposterà in primo piano.
typeset -Ug path? Quando uso typeset -U pathnel mio ~/.zshrcfile, ricevo sempre un errore sul fatto che nulla è nel percorso mentre zshrc è in esecuzione
-gè per evitare di limitare l'ambito, ma in ~/.zshrc, l'ambito è già globale. Inoltre, non ho mai visto zshlamentarsi di un vuoto $PATH(tranne per il comando non trovato errori ovviamente).
Dovrai fare qualcosa del tipo:
if echo $PATH | grep :newpath: ; then doIfPresent; else doIfMissing; fi
Questo funziona solo se newpathè delimitato da due ':', è necessario considerare i casi all'inizio o alla fine in modo simile.
Urgh.
echo "$PATH": metti sempre virgolette doppie attorno alle sostituzioni variabili ). case ":$PATH:" in *:/new/directory:*) :;; *) PATH=$PATH:/new/directory;; esac