Come aggiungere una directory al PERCORSO?


730

Come faccio ad aggiungere una directory a $PATHin Ubuntu e rendere permanenti le modifiche?


2
help.ubuntu.com/community/EnvironmentVariables C'è tutto ciò che devi sapere. Ho scoperto che molti degli input qui non erano corretti o almeno il metodo non è stato suggerito. Questa è una grande informazione che ti permetterà di capire dove modificare la variabile di ambiente in base al motivo per cui lo stai facendo e esattamente come farlo senza rovinare tutto (come ho fatto seguendo alcuni dei suddetti cattivi consigli). Così a lungo, e grazie per tutto il pesce!
Bus42,

Risposte:


455

Utilizzo di ~ / .profile per impostare $ PATH

Un percorso impostato .bash_profileverrà impostato solo in una shell di login bash ( bash -l). Se inserisci il tuo percorso .profilesarà disponibile per l'intera sessione desktop. Ciò significa che anche la metacità la utilizzerà.

Per esempio ~/.profile:

if [ -d "$HOME/bin" ] ; then
  PATH="$PATH:$HOME/bin"
fi

A proposito, puoi controllare la variabile PATH di un processo guardando il suo ambiente in /proc/[pid]/environ(sostituisci [pid] con il numero da ps axf). Ad esempio usaregrep -z "^PATH" /proc/[pid]/environ

Nota:

bashcome shell di login non analizza .profilese esiste .bash_profileo .bash_loginesiste. Da man bash:

cerca ~ / .bash_profile, ~ / .bash_login e ~ / .profile, in quell'ordine, e legge ed esegue i comandi dal primo che esiste ed è leggibile.

Vedere le risposte di seguito per informazioni su .pam_environment, o .bashrcper shell interattive non di accesso, oppure impostare il valore a livello globale per tutti gli utenti inserendo uno script /etc/profile.d/o utilizzandolo /etc/X11/Xsession.d/per influenzare la sessione di display manager.


5
Bene, ha funzionato. Ho visto dove aggiungerà automaticamente il bin dir se lo faccio, quindi l'ho usato solo al posto degli script. TY.
justingrif,

5
Su Xbunutu il .profile non viene eseguito, quindi lo inserisco in .bashrc e funziona.
Tekumara,

13
Questa documentazione è fatta molto bene: documentazione ufficiale sulla variabile d'ambiente . Considera di leggerlo (per non dire che viene aggiornato all'ultima versione delle regole per aggiungere valori alla variabile di ambiente).
Michele,

3
Dove in .profile aggiungiamo il percorso ??
Vineet Kaushik,

3
Non ho ancora idea di dove aggiungere la mia parte del percorso extra. Devo aggiungere l'SDK Android al mio percorso ... PATH="$HOME/bin:$PATH"Quindi lo aggiungo ad esso?
Jamie Hutber,

303

Modifica .bashrcnella tua home directory e aggiungi la seguente riga:

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

.bashrcPer rendere effettive le modifiche sarà necessario eseguire il source o il logout / login (o riavviare il terminale). Per fonte il tuo .bashrc, basta digitare

$ source ~/.bashrc

3
Come "fonte il tuo .bashrc"? Come si "riavvia il terminale"?
isomorfismi

3
In bash è semplicemente '. .bashrc '
Ophidian,

1
Stavo assumendo che tu fossi nella tua home directory. poiché è lì che si trova il .bashrc che si desidera modificare.
Ofide

21
.bashrcnon è il posto giusto per impostare le variabili di ambiente. Dovrebbero entrare .profileo .pam_environment. Vedi mywiki.wooledge.org/DotFiles
geirha

4
@LaoTzu . .bashrcnon .bashrc:) o source .bashrcper quella materia
Znarkus

120

Il luogo consigliato per definire variabili di ambiente permanenti a livello di sistema che si applicano a tutti gli utenti è in:

/etc/environment

(che è dove PATHviene definito il valore predefinito)

Funzionerà su desktop o console, gnome-terminal o TTY, pioggia o sole;)

  • Per modificare, premi Alt+ F2e digita:

    gksudo gedit /etc/environment
    

    (o apri il file usando sudonel tuo editor di testo preferito)

Per effettuare le modifiche, esegui . /etc/environment. Poiché questo file è solo un semplice script verrà eseguito e assegnerà il nuovo percorso alla PATHvariabile di ambiente. Per controllare eseguire env e vedere il PATHvalore nell'elenco.

Relazionato:


6
e quindi è necessario riavviare per rendere effettive le modifiche ...
Lee,

2
Questo è esattamente ciò di cui avevo bisogno. Provisioning di un'immagine vm usa e getta via vagabondo e necessaria per aggiungere nodo e npm al percorso.
Austin Pray,

7
Per eseguire le modifiche in effetti, esegui. / etc / environement (sì, punto, uno spazio e / etc / environment). Poiché questo file è solo un semplice script verrà eseguito e assegnerà il nuovo percorso alla variabile di ambiente PATH. Per controllare eseguire env e vedere il valore PATH nell'elenco.
WindRider,

1
Ho dovuto correre source /etc/environmentper ricaricare le modifiche
JohnnyAW,

@JohnnyAW: la fonte equivale al punto iniziale, vedi ad esempio en.wikipedia.org/wiki/Source_(command) .
Roland Sarrazin,

58

Penso che il modo canonico in Ubuntu sia:

  • crea un nuovo file sotto /etc/profile.d/

    sudo vi /etc/profile.d/SCRIPT_NAME.sh
    
  • aggiungi lì:

    export PATH="YOUR_PATH_WITHOUT_TRAILING_SLASH:$PATH"
    
  • e dargli il permesso di esecuzione

    sudo chmod a+x /etc/profile.d/SCRIPT_NAME.sh
    

20
Di solito è più sicuro aggiungere il percorso personalizzato alla fine del PERCORSO anziché all'inizio. Questo evita di sostituire accidentalmente i comandi di sistema con i tuoi programmi (o programmi dannosi di qualcun altro). Questo evita anche molta confusione quando qualcun altro lavora sul tuo sistema (o ti dà consigli) e ottengono risultati inaspettati da comandi che hai "sostituito".
Joe,

47

Per i principianti completi (come me) che sono più a proprio agio con la GUI:

  1. Apri la tua $HOMEcartella.
  2. Vai a VisualizzaMostra file nascosti o premi Ctrl+ H.
  3. Fare clic destro su .profilee fare clic su Apri con l'editor di testo .
  4. Scorri verso il basso e aggiungi PATH="$PATH:/my/path/foo".
  5. Salva.
  6. Disconnettersi e riconnettersi per applicare le modifiche (lasciare che Ubuntu si carichi effettivamente .profile).

4
La modifica del file .profile non è più consigliata. Puoi ancora utilizzare questo metodo per modificare il file .pam_environment vedi: help.ubuntu.com/community/EnvironmentVariables
PulsarBlow

Grazie a @PulsarBlow! Non sono davvero sicuro di quale sia esattamente la differenza e il vantaggio però ... Questo è l'URL diretto alla sezione pertinente: help.ubuntu.com/community/…
dain

1
Questa risposta ha causato l'interruzione del mio accesso da parte del mio sistema a causa del superamento di tutti i percorsi. Usando Ubuntu 16.04.
Frisbetarian

1
@Frisbetarian devi assicurarti di aggiungere il $PATH:bit che include la definizione PATH esistente
dain

@dain: il tuo commento mi ha salvato la vita!
Py-ser,

46

Per variabili di ambiente persistenti disponibili solo per utenti specifici. Consiglio vivamente la documentazione ufficiale di Ubuntu.

https://help.ubuntu.com/community/EnvironmentVariables

Facendo riferimento alla documentazione di cui sopra, ho configurato i miei strumenti di percorso SDK Android tramite:

  1. creazione di ~/.pam_environmentfile nella home directory.
  2. il cui contenuto è PATH DEFAULT=${PATH}:~/android-sdk-linux/tools.
  3. percorso utente personalizzato aggiuntivo può essere aggiunto separando i percorsi con due punti (:) .
  4. ciò richiede un nuovo accesso , il che significa che è necessario disconnettersi e riconnettersi all'ambiente desktop.

1
Questa è la risposta migliore
Paulo Coghi,

26

Metti quella linea nel tuo ~/.bashrcfile.

Viene fornito ogni volta che si apre un terminale

MODIFICA : In base ai commenti seguenti, per un'impostazione più generale che si applicherà a tutte le shell (anche quando si preme Alt- F2in Unity), aggiungere la linea al ~/.profilefile. Probabilmente non dovresti fare entrambe le cose, poiché il percorso verrà aggiunto due volte al tuo PATHambiente se apri un terminale.


1
In realtà, ho pensato che avresti impostato il percorso $HOME/.profileper le impostazioni personali o /etc/profileper tutti gli utenti. Ma se è necessario solo per bash, suppongo che funzionerà.
Marty Fried,

1
Se lo imposti ~/.bashrc, sarà disponibile solo nei terminali che apri. Ad esempio, se si preme Alt + F2 e si tenta di eseguire un comando da quella directory, non lo troverà. Se lo imposti in ~/.profileo ~/.pam_environment, la sessione di gnome (o qualunque DE tu usi) lo erediterà. L'aggiunta del PERCORSO ~/.bashrcha anche lo svantaggio che se si apre / esegue bash in modo interattivo da un'altra shell bash interattiva, verrà aggiunto più volte.
geirha,

2
Non ci ho pensato per un po ', quindi ho fatto una ricerca e sembra che ci siano almeno 95 modi diversi di impostare il percorso, molti dei quali sono discussi qui . Non ho mai capito quale sia la migliore. Penso che ~/.profilesia corretto per i percorsi personali, però; ecco dove Ubuntu aggiunge la ~/bindirectory. E confesso di aver esagerato un po 'sul numero di modi - solo un po'.
Marty Fried,

1
@MartyFried, sì, per citare il bot in #bash su freenode: «La stragrande maggioranza di script bash, codice, tutorial e guide su Internet è una schifezza. Lo storione è stato un ottimista. »Usando google per il problema bash, troverai spesso molte soluzioni a metà lavoro prima di trovarne una buona. Oh, e ci andrei anche ~/.profilein questo caso.
geirha,

1
@geirha - Sono d'accordo sul fatto che la maggior parte delle guide su Internet in generale sono probabilmente una schifezza, in particolare qualsiasi cosa Linux poiché diverse distribuzioni, o anche versioni diverse della stessa, fanno le cose in modo diverso. Di solito si riduce a ciò che funziona, ma la maggior parte delle persone non si rende conto che ciò che funziona è semplicemente ciò che funziona, non necessariamente ciò che è giusto o anche ciò che funzionerà sempre. Cerco di capire quale dei tanti modi sia effettivamente corretto, perché odio fare le cose più di una volta, ma non è sempre facile. :)
Marty Fried

15

Per impostarlo a livello di sistema, aggiungi la linea export PATH=/path/you're/adding:$PATHalla fine di /etc/profile.

Per aggiungere la directory solo per l'utente che ha effettuato l'accesso, aggiungere la stessa riga ~/.bash_profile.


14

L'aggiunta a .bashrc funzionerà ma penso che il modo più tradizionale di impostare le variabili del tuo percorso sia in .bash_profile aggiungendo le seguenti righe.

PATH=$PATH:/my/path/foo
export PATH

Secondo questo thread sembra che il comportamento di Ubuntu sia leggermente diverso rispetto a RedHat e ai cloni.


1
Non ho un .bash_profile, dovrei crearlo?
justingrif,

7
Se lo hai .bashrc, attaccalo .bashrcinvece. I terminali della GUI in Ubuntu non sono shell di login, quindi .bash_profilenon verranno eseguiti.

1
Non sto eseguendo una gui shell. Ma dal thread sopra sembra che il .bashrc funzionerà bene.
justingrif,

2
Entrambi funzioneranno se la tua shell è una shell di login. Ma ho appena provato l'approccio .bash_profile su una delle mie macchine Ubuntu e anche dopo aver riavviato la mia sessione di gnome non ha generato il mio .bash_profile. Quindi direi che mettere questo in .bashrc è probabilmente la strada da percorrere con Ubuntu.
3dinfluence

3
@justingrif No, non è necessario .bash_profile. Se bash non trova un .bash_profile(quando accedi in modo interattivo), lo cercherà .profilee lo utilizzerà invece. Di default, avrai un .profilee .bashrcin Ubuntu. Ed .profileè il posto giusto per impostare le variabili di ambiente se ignoriamo pam_env.
Geirha,

10

Nel terminal, cdathe_directory_you_want_to_add_in_the_path

echo "export PATH=$(pwd):\${PATH}" >> ~/.bashrc

Questa non è stata una mia idea. Ho trovato questo modo per esportare il percorso in questo blog qui .


8
sudo vi /etc/profile.d/SCRIPT_NAME.sh

aggiungi lì

export PATH=YOUR_PATH_WITHOUT_TRAILING_SLASH:$PATH

2
sudo nano /etc/profile.d/SCRIPT_NAME.shè più facile per i principianti.
isomorfismi

1
Per i principianti, gksu gedit /etc/profile.d/SCRIPT_NAME.shè ancora più semplice.
Fouric

6

Ogni volta che "installo" la mia cartella di script BASH, seguo lo schema del test per una $HOME/bincartella che si trova nella maggior parte dei file .profile nelle ultime versioni di Ubuntu. Ho impostato un test che sembra

if [ -d "/usr/scripts" ]; then
   PATH="/usr/scripts:$PATH"
fi

Funziona quasi il 100% delle volte e mi lascia libero di cambiarlo in un editor di testo della GUI con un rapido "Sostituisci tutto", se dovessi mai decidere di /scriptsavvicinarmi alla mia $HOMEcartella. Non l'ho fatto in 6 installazioni di Ubuntu, ma c'è "sempre domani". S

BZT


6

Il modo consigliato per modificare il tuo PATHè dal /etc/environmentfile

Esempio di output di /etc/environment:

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

Ad esempio, per aggiungere il nuovo percorso di /home/username/mydir

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/username/mydir"

Quindi, riavvia il PC.


Variabili d'ambiente a livello di sistema

Un file adatto per le impostazioni delle variabili di ambiente che influiscono sul sistema nel suo complesso (piuttosto che su un solo utente) è / etc / environment. Un'alternativa è creare un file allo scopo nella directory /etc/profile.d.

/ Etc / environment

Questo file è specifico per le impostazioni delle variabili di ambiente a livello di sistema. Non è un file di script, ma consiste piuttosto di espressioni di assegnazione, una per riga.

Nota: l' espansione delle variabili non funziona in / etc / environment.

Maggiori informazioni possono essere trovate qui: EnvironmentVariables


1
La risposta più bassa ma la più corretta. Questo file di solito è bin popolato automaticamente Ubuntu con il percorso.
NotoriousPyro,

4

Apri il tuo terminale, digita gedit .profilee inserisci quanto segue:

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

 #the following line add Bin where you dont have a Bin folder on your $HOME
    PATH="$PATH:/home/mongo/Documents/mongodb-linux-i686-2.2.2/bin"

Chiudi e apri il terminale, dovrebbe funzionare.


2

Mettilo sul tuo ~/.bashrco whatevershell che usi rc (o su precedentemente ~/.profile) E ~/.xsessionrcquindi funzionerà anche in X (shell esterna).


1

Anche se gli script di sistema non lo usano, in nessuno dei casi in cui si desidera aggiungere un percorso (ad es. $HOME/bin) Alla variabile d'ambiente PATH, si dovrebbe usare

PATH="${PATH:+${PATH}:}$HOME/bin"

per aggiungere (invece di PATH="$PATH:$HOME/bin") e

PATH="$HOME/bin${PATH:+:${PATH}}"

per anteporre (anziché PATH="$HOME/bin:$PATH").

Questo evita i due punti $PATHiniziali / finali spuri quando è inizialmente vuoto, il che può avere effetti indesiderati.

Vedi ad esempio https://unix.stackexchange.com/questions/162891/append-to-path-like-variable-without-creating-leading-colon-if-unset


-1

Per Ubuntu modificare il ~/.bashrce aggiungere la seguente riga.

. ~/.bash_profile

Quindi modifica il tuo .bash_profile di cui hai bisogno .....


1
Sottovalutato perché non hai spiegato come "modificarlo .bash_profilecome ti serve". Cosa devo fare esattamente al .bash_profile?
Isomorfismi

4
Questo è il modo sbagliato .profileo .bash_profiledovrebbe fonte .bashrc. Non il contrario.
geirha,
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.