GNU/Linux >> Linux Esercitazione >  >> Linux

Come aggiungere correttamente un percorso al percorso?

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 se PATH contiene spazi bianchi o [*? .

Quindi in shell come dash, export PATH=~/opt/bin:$PATH imposta 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).

Correlati:Centos:perché la nuova versione corretta di Node.js non viene installata su CentOS 7?

¹ 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.


Linux
  1. Come aggiungere più host in phpMyAdmin

  2. Come aggiungere un utente a un gruppo in Linux

  3. Come esportare DBUS_SESSION_BUS_ADDRESS

  4. Come aggiungere directory specifiche al percorso di ricerca aggiornatob (individuare)?

  5. ldd non trova il percorso, come aggiungere

Come aggiungere una directory a PATH in Linux

Come aggiungere memoria esterna a ownCloud 9

Come aggiungere una directory a PATH in Linux [Suggerimento rapido]

Come aggiungere route su Linux

Come aggiungere un file di scambio su Ubuntu 20.04

Linux:aggiungi una directory a PATH