Le cose semplici
PATH=$PATH:~/opt/bin
o
PATH=~/opt/bin:$PATH
a seconda che si desideri aggiungere ~/opt/bin
alla fine (da cercare dopo tutte le altre directory, nel caso in cui vi sia un programma con lo stesso nome in più directory) o all'inizio (da cercare prima di tutte le altre directory).
È possibile aggiungere più voci contemporaneamente. PATH=$PATH:~/opt/bin:~/opt/node/bin
o variazioni sull'ordinazione funzionano bene. Non inserire export
all'inizio della riga in quanto presenta ulteriori complicazioni (vedi sotto in "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 home directory per essere scoperto da Unix quale comando? e Rimuovi voci duplicate $ PATH con il comando awk per evitare di aggiungere duplicati o rimuoverli.
A ~/bin
proposito, alcune distribuzioni inseriscono automaticamente il tuo PERCORSO.
Dove metterlo
Mettere la linea di modificare PATH
in ~/.profile
, o in ~/.bash_profile
Se questo è quello che hai.
Nota che ~/.bash_rc
non viene letto da nessun programma ed ~/.bashrc
è il file di configurazione delle istanze interattive di bash. Non è necessario definire le variabili di ambiente in ~/.bashrc
. Il posto giusto per definire variabili d'ambiente come PATH
è ~/.profile
(o ~/.bash_profile
se non ti interessano le shell diverse da bash). Vedi Qual è la differenza tra loro e quale dovrei usare?
Non inserirlo /etc/environment
o ~/.pam_environment
: questi non sono file shell, non è possibile utilizzare sostituzioni come quelle $PATH
presenti. In questi file, puoi solo sovrascrivere una variabile, non aggiungerla ad essa.
Potenziali complicazioni in alcuni script di sistema
Non è necessario 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 hanno impostato molto presto (di solito nel primo processo, in effetti).
Al momento dell'accesso, puoi fare affidamento sul fatto di PATH
essere già nell'ambiente e di contenere già alcune directory di sistema. Se stai scrivendo uno script che potrebbe essere eseguito in anticipo durante l'impostazione di un qualche tipo di ambiente virtuale, potresti aver bisogno di assicurarti che PATH
non sia vuoto ed esportato: se PATH
è ancora non impostato, allora qualcosa di simile PATH=$PATH:/some/directory
sarebbe impostato PATH
su :/some/directory
e il componente vuoto all'inizio significa l'attuale directory (come .:/some/directory
).
if [ -z "${PATH-}" ]; then export PATH=/usr/local/bin:/usr/bin:/bin; fi
Note su conchiglie diverse da bash
In bash, ksh e zsh, export
c'è una sintassi speciale, ed entrambi PATH=~/opt/bin:$PATH
e export PATH=~/opt/bin:$PATH
fanno anche la cosa giusta. In altre shell in stile Bourne / POSIX come dash (che si trova /bin/sh
su molti sistemi), export
viene analizzato come un normale comando, il che implica due differenze:
Quindi nelle shell come dash, export PATH=~/opt/bin:$PATH
imposta PATH
la stringa letterale ~/opt/bin/:
seguita dal valore PATH
fino al primo spazio.
PATH=~/opt/bin:$PATH
(un compito semplice) non richiede preventivi e fa la cosa giusta. Se vuoi usarlo 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 ha accettato export var=value
e non ha fatto l'espansione della tilde).
¹ Questo non era vero nelle shell Bourne (come nell'attuale shell Bourne, non nelle moderne shell in stile POSIX), ma è molto improbabile che si incontrino conchiglie così vecchie in questi giorni.