Domanda Come posso aggiungere variabili d'ambiente?


Sto usando Ubuntu 11.04. Uso il terminale per avviare una sessione bash e voglio aggiungere una variabile di ambiente:

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

Ma non sta funzionando. Mostra tutte le variabili con THEVAR che è l'ultima, ma un'altra chiamata a env non mostra THEVAR anymore- env | grep THEVAR non restituisce nulla

Allo stesso modo, script con esportazione (export THEVAR=/example) o altri incarichi variabili (THEVAR=/example) non aggiungere la variabile di ambiente.

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

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

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

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


224
2017-08-27 00:22


origine


Quando definito / esportato in .bashrc, funziona correttamente. - huff
possibile duplicato di Google Earth e $ BROWSER variabile d'ambiente - Isaiah
Che ne dite di THEVAR=/example? - Oleh Prypin
L'altro riguarda le variabili globali, questo non aggiunge una tale limitazione. Lo terrei separato. - Lekensteyn
help.ubuntu.com/community/EnvironmentVariables - huff


risposte:


Per impostare la variabile solo per la shell corrente:

VARNAME="my value"

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

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

Per impostarlo permanentemente per tutte le future sessioni di bash aggiungi questa linea al tuo .bashrc file nel tuo $HOME directory.

Per impostarlo in modo permanente, e sistema largo (tutti gli utenti, tutti i processi) aggiungi variabile impostata in / etc / environment:

sudo -H gedit /etc/environment

Questo file accetta solo assegnazioni variabili come:

VARNAME="my value"

Non usare il export parola chiave qui.

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


363
2017-08-27 07:50



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
Dove dovrei aggiungere la mia linea specifica ?! parte inferiore della pagina .bashrc ?! - Mr.Hyde
@ Mr.Hyde sì, probabilmente è un posto ragionevole - Michał Šrajer
Perché il secondo è meno portatile? - UniversallyUniqueID
@BharadwajRaju perché su alcuni vecchi sistemi UNIX si può esportare solo la variabile che è già impostata. Old Solaris e HP-UX per esempio. - Michał Šrajer


Per impostare una variabile di ambiente una volta, utilizzare il export comando nel prompt, non in uno script di 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 export comando nel .bashrc file (o il file di inizializzazione appropriato per la shell).

Per impostare una variabile di ambiente da uno script, utilizzare export comando nello script e quindi source il copione. Se si esegue lo script, non funzionerà.

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


21
2017-08-27 07:20



Come posso farlo funzionare solo eseguendo lo script? Senza sourcing. - Mithril


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

  1. Aprire un terminale (premendo CtrlaltT)
  2. sudo -H gedit /etc/environment
  3. Digita la tua password
  4. Modifica il file di testo appena aperto:
    per esempio. se vuoi aggiungere FOO=bar, quindi basta scrivere FOO=bar in una nuova riga
  5. Salvarla
  6. Una volta salvati, disconnettiti e accedi di nuovo.
  7. Le tue modifiche richieste sono fatte.

15
2017-12-07 08:45



Ho ripulito la tua risposta rimuovendo i pezzi più pericolosi sudo gedit (Vedere 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, indipendentemente dalle sessioni della shell utente, otterranno il valore delle variabili impostate qui. È importante notare che sebbene questo possa sembrare uno script di shell, non lo è: ti consente solo di impostare le variabili di ambiente (rispetto all'utilizzo di funzioni di shell come if o test) - Tom Harrison Jr
Se la barra è una stringa, dovrei inserirla tra le virgolette? Piace Foo="bar"? - blue_chip
@blue_chip No, funziona senza virgolette. - Click Upvote
@blue_chip per le variabili di ambiente, tutto è una stringa. Hai solo bisogno di virgolette quando contiene spazi. - Ruslan


Per ottenere le modifiche all'ambiente / var per persistere dopo che lo script è stato completato, è necessario utilizzaresource ./script.sh o la notazione abbreviata per la fonte, ".", come . ./script.sh

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


3
2018-03-16 15:09



Questa è una domanda molto vecchia che ha già una risposta accettata e pochi altri ... Considerate, rispondendo a domande più recenti per favore ... - NerdOfCode
@NerdOfCode questa risposta risolve un problema ancora rilevante e nessuna delle altre risposte, inclusa quella accettata, la menziono, per quanto posso vedere ... Ci sono in effetti due badge disponibili per fornire buone risposte a vecchie domande, quindi questo è incoraggiato - Zanna


Se stai facendo le cose tramite script, un modo semplice per impostare permanentemente la variabile di ambiente è messo sotto la dichiarazione nel tuo script,

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

Se hai bisogno di valutare espressioni come pwd, puoi usare questo, per esempio,

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

1
2017-07-12 02:06