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);$PATHal di fuori delle doppie virgolette si interrompe sePATHcontiene 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.