Come faccio ad aggiungere variabili di ambiente?


365

Sto eseguendo Ubuntu 11.04. Uso il terminale per avviare una sessione bash e voglio aggiungere una variabile d'ambiente:

$r@hajt:~$ env THEVAR=/example

Ma non funziona. Mostra tutte le variabili con THEVAR come ultimo, ma un'altra chiamata a envnon mostra THEVARpiù- env | grep THEVARnon restituisce nulla.

Allo stesso modo, gli script con export ( export THEVAR=/example) o altre assegnazioni di variabili ( THEVAR=/example) non aggiungono la variabile di ambiente.

So che sto facendo qualcosa di sbagliato, so che dovrebbe essere qualcosa di semplice, ma non riesco proprio a trovare cosa.

AGGIORNAMENTO: Il vero significato della mia domanda era questo: https://stackoverflow.com/questions/496702/can-a-shell-script-set-environment-variables-of-the-calling-shell

(Comunque sceglierò la risposta più votata e lascerò il titolo modificato, che non era quello che stavo chiedendo)

env esegue un programma in un ambiente modificato, quindi elimina tutte le modifiche.


1
Se definito / esportato in .bashrc, funziona correttamente.
Huff,


1
Che ne dici THEVAR=/example?
Oleh Prypin,

2
L'altro riguarda le variabili globali, questo non aggiunge tale limitazione. Lo terrei separato.
Lekensteyn,

Risposte:


571

Per impostare la variabile solo per la shell corrente:

VARNAME="my value"

Per impostarlo per la shell corrente e tutti i processi avviati dalla shell corrente:

export VARNAME="my value"      # shorter, less portable version

Per impostarlo in modo permanente per tutte le future sessioni di bash, aggiungi tale linea al tuo .bashrcfile nella tua $HOMEdirectory.

Per impostarlo in modo permanente e per tutto il sistema (tutti gli utenti, tutti i processi) aggiungi set variabile in / etc / environment:

sudo -H gedit /etc/environment

Questo file accetta solo assegnazioni di variabili come:

VARNAME="my value"

Non utilizzare la exportparola chiave qui.

È necessario disconnettersi dall'utente corrente e accedere nuovamente in modo che avvengano le modifiche alle variabili di ambiente.


29
Shell config files such as ~/.bashrc, ~/.bash_profile, and ~/.bash_login are often suggested for setting environment variables. While this may work on Bash shells for programs started from the shell, variables set in those files are not available by default to programs started from the graphical environment in a desktop session. help.ubuntu.com/community/EnvironmentVariables
SudoSURoot il

1
@ Mr.Hyde sì, è probabilmente un posto ragionevole
Michał Šrajer,

1
@BharadwajRaju perché su alcuni vecchi sistemi UNIX è possibile esportare solo variabili già impostate. Vecchi Solaris e HP-UX per esempio.
Michał Šrajer,

1
Dopo aver impostato la variabile di ambiente, come posso visualizzarla rapidamente per assicurarmi che sia impostata?
Rod

1
@Rodecho $myvar
Qwerty,

29

Per impostare una variabile di ambiente una volta, utilizzare il exportcomando nel prompt, non in uno script shell:

$ export THEVAR=/example

La variabile verrà impostata per il resto della sessione della shell o fino a quando non viene impostata.

Per impostare una variabile di ambiente ogni volta, utilizzare il exportcomando nel .bashrcfile (o il file di inizializzazione appropriato per la shell).

Per impostare una variabile di ambiente da uno script, utilizzare il exportcomando nello script, quindi sourcelo script. Se esegui lo script non funzionerà.

Per una spiegazione della differenza tra sourcing ed esecuzione vedere questa risposta: https://superuser.com/questions/176783/what-is-the-difference-b Between-executing-a-bash-script-and-sourcing- a- bash-script / 176.788 # 176.788


4
Come posso farlo funzionare solo eseguendo lo script? Senza approvvigionamento.
Mithril,

19

Per aggiungere in modo permanente una nuova variabile d'ambiente in Ubuntu (testato solo in 14.04), attenersi alla seguente procedura:

  1. Apri un terminale (premendo CtrlAltT)
  2. sudo -H gedit /etc/environment
  3. Digita la tua password
  4. Modifica il file di testo appena aperto:
    ad es. Se vuoi aggiungere FOO=bar, quindi scrivi FOO=barin una nuova riga
  5. Salvarla
  6. Una volta salvato, disconnettersi e accedere nuovamente.
  7. Vengono apportate le modifiche richieste.

5
Ho ripulito la tua risposta rimuovendo i bit più pericolosi su sudo gedit(Vedi askubuntu.com/questions/270006/… ) e chmod 777. Quest'ultimo non dovrebbe mai essere fatto su un file di configurazione del sistema.
muru,

Questa è una risposta corretta per alcuni casi. Tutte le sessioni, che siano o meno sessioni della shell utente, otterranno il valore delle variabili impostate qui. È importante notare che mentre questo può sembrare uno script di shell, non lo è - ti consente solo di impostare variabili di ambiente (rispetto all'utilizzo di funzioni di shell come ifo test)
Tom Harrison Jr

Se la barra è una stringa, dovrei metterla tra virgolette? Come Foo="bar"?
blue_chip

@blue_chip No, funziona senza virgolette.
Fai clic su Aggiorna

4
@blue_chip per le variabili di ambiente, tutto è una stringa. Hai solo bisogno di virgolette quando contiene spazi.
Ruslan,

8

Per rendere persistenti le modifiche all'ambiente / var dopo il completamento dello script, è necessario utilizzare source ./script.shla notazione abbreviata per l'origine ".", Come. ./script.sh

Source eseguirà i comandi nello script come se li avessi digitati ... quindi cambia alcuni aspetti dello script, come uscire ... quindi se lo script controlla qualcosa e decide di uscire se falso, ad esempio, tramite la chiamata exit 0, terminerà la sessione terminale / shell corrente.


Questa è una domanda molto antica che ha già una risposta accettata e poche altre ... Considerate, per favore, rispondete alle domande più recenti ...
NerdOfCode

3
@NerdOfCode questa risposta risolve un problema che è ancora rilevante e nessuna delle altre risposte, inclusa quella accettata, menzionalo, per quanto posso vedere ... Sono infatti disponibili due badge per fornire buone risposte a vecchie domande, quindi questo è incoraggiato
Zanna,

1
Questo esattamente quello che stavo cercando. Avevo bisogno di vedere dallo script, le variabili esportate dallo script.
Albanx

5

Se stai facendo delle cose tramite script, un modo semplice per impostare la variabile d'ambiente in modo permanente è mettere sotto l'istruzione nel tuo script,

if [[ ! -d "$MyVar" ]]; then 
    export MyVar="abc"
    echo 'export MyVar="abc"' >> ~/.bashrc
fi

Se devi valutare espressioni come pwd, puoi usare questo, ad esempio,

echo "export EIGEN_ROOT=\"$(pwd)/eigen\"" >> ~/.bashrc

1

So che è piuttosto tardi, ma se si desidera aggiungere una variabile di ambiente per tutti gli utenti (ad esempio l'utilizzo di JAVA), è possibile effettuare le seguenti operazioni:

1) Apri /etc/bash.bashrcusando nano (puoi usare qualunque editor, non preferisco VIM in quanto è il peggiore quando si tratta di facilità d'uso - niente di personale).

2) Aggiungi al file:

export VAR=path export PATH=$PATH:/bin 3) (Meglio se puoi far rimbalzare la scatola) - o semplicemente aprire una nuova sessione SSH e confermare usando il comando `env '.

MA SE vuoi che ogni utente abbia un'impostazione separata per questo, devi apportare una modifica (tramite script) al .bashrcfile sotto ~/.bashrc(o /home/$USER/se sei nuovo ai sistemi Linux)

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.