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
) $path
all'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 ~/foo
era già dentro, $path
lo sposterà in primo piano.
typeset -Ug path
? Quando uso typeset -U path
nel mio ~/.zshrc
file, 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 zsh
lamentarsi 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