C'è un modo per aggiungere una directory al mio PERCORSO in zsh solo se non è già presente?


15

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.


2
@uther, non è un duplicato poiché l'altra domanda era per bash, mentre questa è per zsh che ha il suo modo di affrontare questo problema.
Stéphane Chazelas,

Risposte:


32

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.


Non intendi typeset -Ug path? Quando uso typeset -U pathnel mio ~/.zshrcfile, ricevo sempre un errore sul fatto che nulla è nel percorso mentre zshrc è in esecuzione
kalbasit

@eMxyzptlk, strano. -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).
Stéphane Chazelas,

3

Aggiungi export -U PATH=~/foo${PATH:+:$PATH}a uno dei tuoi file di avvio. L' -Umantiene solo la prima occorrenza di un valore in matrici o talune :variabili delimitati come PATH.


-3

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.


1
Puoi farlo all'interno della shell, con solo le funzionalità Bourne / POSIX. Questo evita di citare mal di testa (almeno fallo così echo "$PATH": metti sempre virgolette doppie attorno alle sostituzioni variabili ). case ":$PATH:" in *:/new/directory:*) :;; *) PATH=$PATH:/new/directory;; esac
Gilles 'SO- smetti di essere malvagio' il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.