Mi chiedo dove debba essere aggiunto un nuovo percorso al PATH
variabile d'ambiente. So che questo può essere ottenuto modificando .bashrc
(per esempio), ma non è chiaro come farlo.
In questo modo:
export PATH=~/opt/bin:$PATH
o questo?
export PATH=$PATH:~/opt/bin
Risposta accettata:
Le cose semplici
PATH=$PATH:~/opt/bin
o
PATH=~/opt/bin:$PATH
a seconda che tu voglia aggiungere ~/opt/bin
alla fine (da cercare dopo tutte le altre directory, nel caso sia presente un programma con lo stesso nome in più directory) o all'inizio (da cercare prima di tutte le altre directory).
Puoi aggiungere più voci contemporaneamente. PATH=$PATH:~/opt/bin:~/opt/node/bin
o variazioni sull'ordine funzionano bene. Non inserire export
all'inizio della riga in quanto presenta ulteriori complicazioni (vedi sotto sotto "Note su shell diverse da bash").
Se il tuo PATH
viene creato da molti componenti diversi, potresti finire con voci duplicate. Vedi Come aggiungere il percorso della directory home che deve essere scoperto da Unix quale comando? e Rimuovi le voci $PATH duplicate con il comando awk per evitare di aggiungere duplicati o rimuoverli.
Alcune distribuzioni mettono automaticamente ~/bin
nel tuo PERCORSO se esiste, comunque.
Dove metterlo
Inserisci la riga per modificare PATH
in ~/.profile
o in ~/.bash_profile
se è quello che hai.
Nota che ~/.bash_rc
non viene letto da nessun programma e ~/.bashrc
è il file di configurazione delle istanze interattive di bash. Non dovresti definire variabili d'ambiente in ~/.bashrc
. Il posto giusto per definire variabili d'ambiente come PATH
è ~/.profile
(o ~/.bash_profile
se non ti interessano shell diverse da bash). Vedi Qual è la differenza tra loro e quale dovrei usare?
Non inserirlo in /etc/environment
o ~/.pam_environment
:questi non sono file di shell, non puoi usare sostituzioni come $PATH
lì dentro. In questi file, puoi solo sovrascrivere una variabile, non aggiungerla.
Potenziali complicazioni in alcuni script di sistema
Non hai bisogno di export
se la variabile è già nell'ambiente:qualsiasi modifica del valore della variabile si riflette nell'ambiente.¹ PATH
è praticamente sempre nell'ambiente; tutti i sistemi Unix lo impostano molto presto (di solito nel primo processo, in effetti).
Al momento dell'accesso, puoi fare affidamento su PATH
essere già nell'ambiente e già contenente alcune directory di sistema. Se stai scrivendo uno script che potrebbe essere eseguito in anticipo durante la configurazione di un qualche tipo di ambiente virtuale, potresti dover assicurarti che PATH
non è vuoto ed è esportato:se PATH
è ancora non impostato, quindi qualcosa come PATH=$PATH:/some/directory
imposterebbe PATH
a :/some/directory
e il componente vuoto all'inizio indica la directory corrente (come .:/some/directory
).
if [ -z "${PATH-}" ]; then export PATH=/usr/local/bin:/usr/bin:/bin; fi
Note su shell diverse da bash
In bash, ksh e zsh, export
è una sintassi speciale e sia PATH=~/opt/bin:$PATH
e export PATH=~/opt/bin:$PATH
anche fare la cosa giusta. In altre shell in stile Bourne/POSIX come dash (che è /bin/sh
su molti sistemi), export
viene analizzato come un comando ordinario, il che implica due differenze:
~
viene analizzato solo all'inizio di una parola, tranne che nelle assegnazioni (vedi Come aggiungere il percorso della home directory che deve essere scoperto da Unix quale comando? per i dettagli);$PATH
al di fuori delle doppie virgolette si interrompe sePATH
contiene spazi bianchi o[*?
.
Quindi in shell come dash, imposta export PATH=~/opt/bin:$PATH
PATH
alla stringa letterale ~/opt/bin/:
seguito dal valore di PATH
fino al primo spazio. PATH=~/opt/bin:$PATH
(un semplice compito) non richiede virgolette e fa la cosa giusta. Se vuoi usare export
in uno script portatile, devi scrivere export PATH="$HOME/opt/bin:$PATH"
o PATH=~/opt/bin:$PATH; export PATH
(o PATH=$HOME/opt/bin:$PATH; export PATH
per la portabilità anche alla shell Bourne che non accettava export var=value
e non ha fatto l'espansione della tilde).
¹ Questo non era vero nelle shell Bourne (come nella vera shell Bourne, non nelle moderne shell in stile POSIX), ma è altamente improbabile che in questi giorni si incontrino conchiglie così vecchie.