Vorrei un modo per aggiungere elementi a $PATH, a livello di sistema o per un singolo utente, senza potenzialmente aggiungere lo stesso percorso più volte.
Uno dei motivi per volerlo fare è che le aggiunte possano essere fatte in .bashrc
, che non richiede un login ed è anche più utile su sistemi che utilizzano (es.) lightdm
, che non chiama mai .profile
.
Sono a conoscenza di domande relative a come pulire i duplicati da $PATH, ma non voglio rimuovere i duplicati . Vorrei un modo per aggiungere percorsi solo se non sono già presenti.
Risposta accettata:
Supponiamo che il nuovo percorso che vogliamo aggiungere sia:
new=/opt/bin
Quindi, usando qualsiasi shell POSIX, possiamo testare per vedere se new
è già nel percorso e aggiungilo se non lo è:
case ":${PATH:=$new}:" in
*:"$new":*) ;;
*) PATH="$new:$PATH" ;;
esac
Nota l'uso dei due punti. Senza i due punti, potremmo pensare che, diciamo, new=/bin
era già nel percorso perché corrispondeva al modello su /usr/bin
. Sebbene i PATH abbiano normalmente molti elementi, vengono gestiti anche i casi speciali di zero e uno elementi nel PATH. Il caso in cui il PATH inizialmente non ha elementi (essendo vuoto) è gestito dall'uso di ${PATH:=$new}
che assegna PATH
a $new
se è vuoto. L'impostazione dei valori predefiniti per i parametri in questo modo è una caratteristica di tutte le shell POSIX:vedere la sezione 2.6.2 della documentazione POSIX.)
Una funzione richiamabile
Per comodità, il codice sopra può essere inserito in una funzione. Questa funzione può essere definita dalla riga di comando o, per averla permanentemente disponibile, inserita nello script di inizializzazione della shell (per gli utenti bash, sarebbe ~/.bashrc
):
pupdate() { case ":${PATH:=$1}:" in *:"$1":*) ;; *) PATH="$1:$PATH" ;; esac; }
Per utilizzare questa funzione di aggiornamento del percorso per aggiungere una directory al PERCORSO corrente:
pupdate /new/path