Come impostare permanentemente $ PATH su Linux / Unix?


880

Sto cercando di aggiungere una directory al mio percorso in modo che sia sempre nel mio percorso Linux. Ho provato:

export PATH=$PATH:/path/to/dir

Questo funziona, tuttavia ogni volta che esco dal terminale e avvio una nuova istanza del terminale, questo percorso viene perso e devo eseguire nuovamente il comando export.

Come posso farlo in modo che questo sia impostato in modo permanente?

Risposte:


230

Esistono diversi modi per farlo. La soluzione effettiva dipende dallo scopo.

I valori delle variabili sono generalmente memorizzati in un elenco di assegnazioni o in uno script shell che viene eseguito all'inizio del sistema o della sessione utente. Nel caso dello script della shell è necessario utilizzare una sintassi della shell specifica exporto setcomandi.

Sistema largo

  1. /etc/environmentElenco di incarichi univoci, consente riferimenti. Perfetto per l'aggiunta delle directory a livello di sistema, come /usr/local/something/bina PATHvariabile o definizione JAVA_HOME. Utilizzato da PAM e SystemD.
  2. /etc/environment.d/*.confElenco di incarichi univoci, consente riferimenti. Perfetto per l'aggiunta delle directory a livello di sistema, come /usr/local/something/bina PATHvariabile o definizioneJAVA_HOME . La configurazione può essere suddivisa in più file, di solito uno per ogni strumento (Java, Go, NodeJS). Utilizzato da SystemD che in base alla progettazione non trasferisce tali valori alle shell di accesso dell'utente.
  3. /etc/xprofileScript della shell eseguito all'avvio della sessione di X Window System. Questo viene eseguito per ogni utente che accede a X Window System. È una buona scelta per le PATHvoci che sono valide per ogni utente come/usr/local/something/bin . Il file è incluso da altri script, quindi utilizzare la sintassi della shell POSIX non la sintassi della shell dell'utente.
  4. /etc/profilee /etc/profile.d/*script Shell. Questa è una buona scelta per i sistemi solo shell. Questi file vengono letti solo dalle shell in modalità di accesso.
  5. /etc/<shell>.<shell>rc. Script di shell. Questa è una scelta sbagliata perché è specifica per singola shell. Utilizzato in modalità non di accesso.

Sessione utente

  1. ~/.pam_environment. Elenco di incarichi unici, nessun riferimento consentito. Caricato da PAM all'inizio di ogni sessione utente irrilevante se si tratta di una sessione o di una shell di X Window System. Non è possibile fare riferimento ad altre variabili tra cui HOMEo PATHcosì ha un uso limitato. Utilizzato da PAM.
  2. ~/.xprofileScript di shell. Questo viene eseguito quando l'utente accede al sistema X Window System. Le variabili qui definite sono visibili ad ogni applicazione X. Scelta perfetta per estendere PATHcon valori come ~/bino ~/go/bino definire specifici dell'utente GOPATHoNPM_HOME . Il file è incluso da altri script, quindi usa la sintassi della shell POSIX non la sintassi della shell dell'utente. Il tuo editor di testo grafico o IDE avviato da una scorciatoia vedrà quei valori.
  3. ~/.profile, ~/.<shell>_profile, ~/.<shell>_loginShell script. Sarà visibile solo per i programmi avviati dal terminale o dall'emulatore di terminale. È una buona scelta per i sistemi solo shell. Utilizzato dalle shell in modalità login.
  4. ~/.<shell>rc. Script di shell. Questa è una scelta sbagliata perché è specifica per singola shell. Utilizzato dalle shell in modalità non di accesso.

Appunti

Gnome su Wayland avvia la shell di accesso dell'utente per ottenere l'ambiente. Utilizzare efficacemente le configurazioni shell di login ~/.profile, ~/.<shell>_profile,~/.<shell>_login i file.

manuali

  • ambiente
  • environment.d
  • bash
  • trattino

Documentazione specifica per la distribuzione

Relazionato

Differenza tra Shell di accesso e Shell non di accesso?


4
Grazie per la risposta dettagliata, questo dovrebbe essere più in alto. Forse .bash_profiledovrebbe essere aggiunto anche alla lista?
James Ko,

2
@JamesKo che era il numero 4
trve.fa7ad

1
Penso che sia suggerita la risposta migliore /etc/environment. Ma posso aggiornarlo senza disconnettersi e accedere? A volte non uso bash o sh, quindi source /etc/environmentnon funziona.
banan3'14,

2
Grande e secondo me la risposta più completa. Dovrebbe essere molto più in alto.
Peter Gloor,

2
Il mio motivo per cercare questo argomento era in realtà andare. Sono contento di vedere che non sono l'unico a capire che .bashrc non è il posto giusto. ;)
Peter Gloor,

1039

Devi aggiungerlo al tuo ~/.profileo al ~/.bashrcfile. 

export PATH="$PATH:/path/to/dir"

A seconda di ciò che stai facendo, potresti anche voler collegare simbolicamente ai binari:

cd /usr/bin
sudo ln -s /path/to/binary binary-name

Nota che questo non aggiornerà automaticamente il tuo percorso per il resto della sessione. Per fare ciò, dovresti eseguire:

source ~/.profile 
or
source ~/.bashrc

11
Un paio di domande. 1) Non dovrebbero esserci due punti tra $PATHe /usr/bin. 2) Dovrebbe /usr/binanche essere lì. 3) Non dovresti usare piuttosto /usr/local/bin?
Batandwa,

197
Nota : è spesso considerato un buco di sicurezza per lasciare due punti finali alla fine del PERCORSO bash perché lo fa in modo che bash cerchi nella directory corrente se non trova l'eseguibile che sta cercando. Gli utenti che trovano questo post in cerca di ulteriori informazioni dovrebbero essere informati di questo.
erewok,

51
@AdamRobertson Non è sicuro: considerare lo scenario quando si decomprime un tarball, quindi cdnella directory in cui è stato decompresso, quindi si esegue ls--- e poi si rende conto che nel tarball è stato richiamato un programma dannoso ls.
Lily Chung,

21
Per me era .bash_profile, non .profile. Sembra che questo sia diverso per tutti.
donquixote

9
Penso di aver notevolmente migliorato la qualità di questa risposta e di aver affrontato alcuni problemi sollevati da altri utenti. Ogni esportazione del percorso, o ogni comando che regola il percorso, dovrebbe sempre assicurarsi di separare un percorso esistente con due punti. I due punti iniziali o finali non devono mai essere utilizzati e la directory corrente non deve mai trovarsi nel percorso.
Erick Robertson,

243

In Ubuntu, modifica /etc/environment. Il suo unico scopo è di archiviare le variabili di ambiente. Inizialmente la variabile $ PATH è definita qui. Questa è una copia dal mio /etc/environmentfile:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

Quindi puoi semplicemente aprire questo file come root e aggiungere quello che vuoi.

Per risultati immediati, Esegui (prova come utente normale e root):

source /etc/environment && export PATH

AGGIORNARE:

Se usi zsh(aka Z Shell), aggiungi questa riga subito dopo i commenti in /etc/zsh/zshenv:

source /etc/environment

Ho riscontrato questa piccola stranezza su Ubuntu 15.10, ma se il tuo zsh non sta ottenendo il PERCORSO corretto , questo potrebbe essere il motivo


13
Non tutti i sistemi hanno / etc / environment
user3439968

9
FWIW $PATHè anche definito /etc/profilein Arch Linux.
Sparhawk,

3
@ e-sushi Sono davvero scioccato da questo. Sono su Ubuntu 14.04.1 me stesso. e posso prometterti che il file è stato incorporato.
trve.fa7ad

2
Dopo aver provato tutti i suggerimenti sotto il sole ma / etc / environment e averli tutti NON funzionanti, alla fine mi sono imbattuto in questo. Sono anche su Ubuntu 14.04 e questo è l'unico che ha effettivamente cambiato la variabile PATH dopo il riavvio.
Chockomonkey,

4
L'utente dovrebbe riavviare il PC dopo aver aggiornato il file di ambiente.
Harish_N

71

Inserisci la exportdichiarazione ~/.bashrc. Il mio .bashrc contiene questo:

export PATH=/var/lib/gems/1.8/bin:/home/fraxtil/.bin:$PATH

7
riavvio necessario?
Fai clic su Aggiorna

2
Ha funzionato quando l'ho inserito in .profile", non ho trovato.bashrc
Fai clic per votare

Potrebbe dipendere dal sistema esatto; Non sono sicuro esattamente quali condizioni determinano quale file viene eseguito. Sono contento che il problema sia stato risolto, però.
Fraxtil,

12
@Click Upvote Devi fare source ~/.bashrcper ricaricare la .bashrcconfigurazione. Quindi funzionerà
BigSack

4
La exportparola chiave è necessaria solo se PATHnon è già contrassegnata come variabile d'ambiente, cosa che lo sarà quasi incondizionatamente. PATH=/var/lib/gems/1.8/bin:/home/fraxtil/.bin:$PATHAvrebbe semplicemente lo stesso effetto.
Charles Duffy,

30

Puoi impostare $PATHin modo permanente in 2 modi.

  1. Per impostare il percorso per un determinato utente: potrebbe essere necessario effettuare l'accesso .bash_profile nella home directory dell'utente.

    ad es. nel mio caso imposterò il percorso java nel profilo utente tomcat

    [tomcat]$ echo "export PATH=$PATH:/path/to/dir" >> /home/tomcat/.bash_profile
  2. Per impostare un percorso comune per TUTTI gli utenti del sistema, potrebbe essere necessario impostare un percorso come questo:

    [root~]# echo "export PATH=$PATH:/path/to/dir" >> /etc/profile

3
È il file chiamato /etc/profilescon una ssul tuo distro? Il mio non ha s. Penso che tu abbia un refuso.
Chris Johnson,

3
Probabilmente vuoi scappare da $ che stai scrivendo nel file del profilo. es. echo "export PATH = \ $ PATH: / path / to / dir" >> / etc / profile, in questo modo in realtà aggiungi alla variabile quando lo script viene eseguito invece di impostarlo su un valore letterale basato sul suo valore in momento dell'esecuzione di questo comando iniziale.
BuvinJ,

15

È possibile utilizzare su Centos o RHEL per l'utente locale:

echo $"export PATH=\$PATH:$(pwd)" >> ~/.bash_profile

Questo aggiunge la directory corrente (o puoi usare un'altra directory) al PERCORSO, la rende permanente ma ha effetto al prossimo accesso dell'utente.

Se non si desidera eseguire un nuovo accesso, è possibile utilizzare:

source ~/.bash_profile

Che ricarica # User specific environment and startup programsquesto commento è presente in.bash_profile


12

Puoi anche impostare in modo permanente, modificando uno di questi file:

/etc/profile (per tutti gli utenti)

~/.bash_profile (per l'utente corrente)

~/.bash_login (per l'utente corrente)

~/.profile (per l'utente corrente)

È inoltre possibile utilizzare /etc/environmentper impostare una variabile di ambiente PATH permanente, ma non supporta l'espansione della variabile .

Estratto da: http://www.sysadmit.com/2016/06/linux-anadir-ruta-al-path.html


7

Ieri mi sono imbattuto in questa domanda durante la ricerca di un modo per aggiungere una cartella contenente i miei script al PERCORSO - e sono stato sorpreso di scoprire che il mio ~/.profilefile (su Linux Mint 18.1) conteneva già questo:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Quindi, tutto quello che dovevo fare era creare la cartella ~/bine mettere lì i miei script.


7

Penso che il modo più elegante sia:

1.aggiungilo nel file ~ / .bashrc Esegui questo comando

gedit ~ / .bashrc

aggiungi il tuo percorso al suo interno

export PATH = $ PATH: / opt / node / bin

2.source ~ / .bashrc

(Ubuntu)


6

È possibile aggiungere quella riga al file di configurazione della console (ad es. .Bashrc) o .profile


2
Non ho nessuno di questi file in/home/(username)
Fai clic su Aggiorna

3
@ClickUpvote: quale shell usi? (E i file che iniziano con un punto sono nascosti, è necessario qualcosa di simile ls -aper vederli.)
David Schwartz

Nel caso in cui tu non abbia nessuno di quei file (bashrc o profilo), puoi crearli manualmente e verranno automaticamente utilizzati
trve.fa7ad

4

Aggiungi in modo permanente la variabile PATH

Globale:

echo "export PATH=$PATH:/new/path/variable" >> /etc/profile

Locale (solo per utente):

echo "export PATH=$PATH:/new/path/variable" >> ~/.profile

Per il riavvio globale . Per il login locale .

Esempio

Prima:

$ cat /etc/profile 

#!/bin/sh

export PATH=/usr/bin:/usr/sbin:/bin:/sbin

Dopo:

$ cat /etc/profile 

#!/bin/sh

export PATH=/usr/bin:/usr/sbin:/bin:/sbin
export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/new/path/variable

In alternativa puoi semplicemente modificare il profilo:

$ cat /etc/profile 

#!/bin/sh

export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/new/path/variable

Un altro modo (grazie gniourf_gniourf):

echo 'PATH=$PATH:/new/path/variable' >> /etc/profile

Non dovresti usare doppie virgolette qui! echo 'export PATH = $ PATH: / new / path / variabile' ... E comunque, la parola chiave export è molto probabilmente inutile poiché la variabile PATH è molto probabilmente già contrassegnata come esportata. - gniourf_gniourf


1
No. Non dovresti usare doppie virgolette qui! echo 'export PATH=$PATH:/new/path/variable'... E comunque, la exportparola chiave è molto probabilmente inutile poiché la PATHvariabile è molto probabilmente già contrassegnata come esportata.
gniourf_gniourf

No, dovresti usare le virgolette doppie perché $ PATH nelle virgolette singole non interpolate. E anche l'esportazione BTW è utile.
user3439968

Capito. Puoi usare virgolette doppie o virgolette singole, perché $ PATH interpolato quando l'eco viene eseguita o interpola quando / etc / profile viene eseguito.
user3439968

1
@ user3439968 in realtà, le virgolette doppie causeranno molti problemi se si dovesse aggiungere a $ PATH da più file. Considera: quando usi virgolette doppie, $ PATH viene tradotto in una stringa statica con tutte le directory PATH precedentemente definite. dire che ti accoda /usr/localusando ~/.bashrc. ora se intendi aggiungere /opt/binalla stessa variabile usando /etc/bash.bashrc; $ PATH si tradurrà nella stessa stringa statica, di conseguenza $ PATH verrà sostituito anziché aggiunto a ... Sarà una questione di preferenza del sistema a un file rispetto a un altro
trve.fa7ad

4

1.modificare il file "/ etc / profile".

#vi /etc/profile

Premere il tasto "i" per inserire lo stato di modifica e spostare il cursore alla fine del file, voci aggiuntive :

export PATH=$PATH:/path/to/dir;

Premere il tasto "Esc" per uscire dallo stato di modifica, ': wq' salva il file.

2. Attivare la configurazione

source /etc/profile

Spiegare : il file di profilo funziona per tutti gli utenti, se si desidera essere validi solo per l'utente attivo, impostare il file ".bashrc"


4

Dopo così tante ricerche, ho trovato una soluzione semplice per questo (sto usando un sistema operativo elementare ), ispirato al seguente link .

Eseguire il comando seguente per aprire il file .bashrc in modalità di modifica . [Puoi anche usare vi o qualsiasi altro editor].

~$ sudo nano ~/.bashrc

Aggiungi la seguente riga alla fine del file e salva.

export PATH="[FLUTTER_SDK_PATH]/flutter/bin:$PATH"

Per esempio :

export PATH="/home/rageshl/dev/flutter/bin:$PATH"

inserisci qui la descrizione dell'immagine

Credo che questa sia la soluzione permanente per impostare il percorso nel flutter nella distribuzione Ubuntu

Spero che questo sia utile.


3

i file in cui si aggiunge il comando export dipendono se si è in modalità login o non login.

se sei in modalità login, i file che stai cercando sono / etc / bash o /etc/bash.bashrc

se non si è in modalità di accesso, si sta cercando il file /.profile o i file nella directory /.profiles.d

i file sopra menzionati se si trovano le variabili di sistema.


3

Aggiungi a /etc/profile.dcartella di script [name_of_script].shcon la linea: export PATH=$PATH:/dir. Ogni script all'interno della /etc/profile.dcartella viene eseguito automaticamente /etc/profileall'accesso.


È il modo consigliato di personalizzare l'ambiente
Yuriy,

1
Questo è solo se vuoi che le impostazioni siano a livello di sistema, che probabilmente non è il caso d'uso più comune. La maggior parte delle persone vuole (o dovrebbe volere) impostare il percorso a livello locale, poiché la maggior parte degli utenti / ruoli sta eseguendo operazioni contestualmente diverse e meno ipotesi si fanno, meglio è.
Potenza del

@ potenziato, sì, questo è solo per tutto il sistema. Se vuoi cambiare localmente PATH devi aggiungere la stessa esportazione in ~ / .profile o ~ / .bashrc. Qui dovresti considerare che le shell di login leggono ~ / .profile e le shell interattive leggono ~ / .bashrc. Questo è molto importante perché ad esempio ssh non esegue un login, quindi ~ / .profile non verrà letto. Diverse distribuzioni come la fonte di utilizzo ~ / .bashrc nel profilo / etc /. Ma non è comune per tutti i Linux '
Yuriy,

3

Zues77 ha l'idea giusta. L'OP non ha detto "come posso fare a modo mio attraverso questo". OP voleva sapere come aggiungere permanentemente a $ PATH:

sudo nano /etc/profile

Questo è dove è impostato per tutto ed è il posto migliore per cambiarlo per tutte le cose che richiedono $ PATH


3

La mia risposta è in riferimento alla configurazione di go-langon Ubuntu linux/amd64. Ho affrontato lo stesso problema di impostare il percorso delle variabili di ambiente ( GOPATHe GOBIN), di perderlo all'uscita del terminale e di ricostruirlo usando source <file_name>ogni volta. L'errore è stato quello di mettere il percorso ( GOPATHe GOBIN) nella ~/.bash_profilecartella. Dopo sprecare un paio di ore buone, ho trovato che la soluzione era quella di mettere GOPATHe GOBINnel ~/.bash_rcfile nel modo:

export GOPATH=$HOME/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOPATH:$GOBIN

e così facendo, l'installazione go ha funzionato bene e non ci sono state perdite di percorso.

EDIT 1: Il motivo per cui questo problema può essere correlato è che le impostazioni per shell non di login come il tuo terminale Ubuntu o gnome-terminal dove eseguiamo il codice go sono prese da ~./bash_rcfile e le impostazioni per shell di login sono prese da ~/.bash_profilefile, e dal ~/.profilefile se il ~/.bash_profilefile non è raggiungibile.


3

Supponiamo che tu stia eseguendo MacOS e che tu abbia un binario di cui ti fidi e vorresti renderlo disponibile sul tuo sistema ma non vuoi necessariamente la directory in cui il binario deve essere aggiunto al tuo PERCORSO, puoi scegliere di copiare / spostare il binario a /usr/local/bin, che dovrebbe già essere nel tuo PERCORSO. Questo renderà l'eseguibile binario come qualsiasi altro binario a cui potresti già avere accesso nel tuo terminale.


3

Può essere aggiunto direttamente utilizzando il seguente comando:

echo 'export PATH=$PATH:/new/directory' >> ~/.zshrc
source ~/.zshrc

2
La domanda è etichettata bash, quindi non è molto utile.
Laurenz Albe,

2
Questa è una risposta valida -> il titolo menziona solo Linux, quindi bash e ANCHE zsh lo faranno ... se il tag è solo "bash" dobbiamo aggiungere anche "zsh" ai tag
Carlos Saltos

2

il modo migliore è la seguente riga:
PATH="<directory you want to include>:$PATH"
nel tuo file .bashrc nella directory home.
Non verrà ripristinato anche se si chiude il terminale o si riavvia il PC. È permanente


1
@quant se fai ciò che viene detto, imposterà le tue impostazioni in modo permanente. funzionerà anche se chiudi il terminale.
Edward Torvalds,

1

Penso che il modo più elegante sia:

1.Add questo ~. / Bashrc di file

if [ -d "new-path" ]; then
  PATH=$PATH:new-path
fi

2.source ~ / .bashrc

(Ubuntu)


E per visualizzare il percorso dopo sopra: printf "% s \ n" $ PATH
Robot70

1

un modo per aggiungere un percorso permanente, che ha funzionato per me, è:

    cd /etc/profile.d
    touch custom.sh
    vi custom.sh 
    export PATH=$PATH:/path according to your setting/

riavvia il tuo computer e qui andiamo percorso faranno applausi permanenti.


In realtà non è necessario riavviare il computer. Disconnettersi e riconnettersi è sufficiente. Questa è una soluzione abbastanza elegante in quanto è molto facile eseguire il backup di tutte le modifiche senza dover modificare i file. È anche facile specificare un'istruzione if in modo che se una directory non esiste sul sistema, non viene aggiunta alla variabile PATH.
Warwick il

0

Per la distribuzione debian, devi:

    - edit ~/.bashrc  e.g: vim ~/.bashrc 
    - add export PATH=$PATH:/path/to/dir
    - then restart your computer. Be aware that if you edit ~/.bashrc  as root, your environment variable you added will work only for root

0

Questa è una linea . Aggiunge una linea al .bashrc. La linea controllerà se la directory è già stata aggiunta al percorso e in caso contrario aggiungere. Ciò impedirà di duplicare la directory nel percorso ogni volta che si esegue l'origine .bashrc.

echo "[[ \":\$PATH:\" != *\":$(pwd)/path/to/add:\"* ]] && export PATH=\"\${PATH:+\${PATH}}:$(pwd)/path/to/add\"" >> ~/.bashrc

source ~/.bashrc
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.