Qual è il modo migliore per impostare una variabile d'ambiente in .bashrc?


Risposte:


16

Il modo migliore

export VAR=value

La differenza

fare

VAR=value

imposta solo la variabile per la durata dello script ( .bashrcin questo caso). I processi figlio (se presenti) dello script non avranno VAR definito e una volta che lo script VARè uscito.

export VAR=value

aggiunge esplicitamente VARall'elenco delle variabili che vengono passate ai processi figlio. Vuoi provarlo? Apri una shell, fallo

PS1="foo > "
bash --norc

La nuova shell ottiene il prompt predefinito. Se invece fai qualcosa del genere

export PS1="foo > "
bash --norc

la nuova shell riceve il prompt che hai appena impostato.

Aggiornamento: come Ian Kelling nota sotto le variabili impostate in .bashrcpersist nella shell che proviene .bashrc. Più in generale ogni volta che la shell genera uno script (usando il source scriptnamecomando) le variabili impostate nello script persistono per la vita della shell.


1
"imposta solo la variabile per la durata dello script (.bashrc in questo caso)" Questo è falso / fuorviante. Le variabili impostate in questo modo persistono nella shell interattiva che legge .bashrc.
Ian Kelling,

PS1è un cattivo esempio di una variabile da esportare come variabile di ambiente. È significativo solo per i processi figlio che sono shell ed è interpretato in modo diverso da shell diverse (ad esempio, bash e dash). La migliore pratica è semplicemente impostarlo come una normale variabile di shell in .bashrc. Esempi migliori delle variabili di ambiente sono HOME, PATH, EDITOR, ecc
Anthony Geoghegan

10

Entrambi sembrano funzionare bene, ma l'utilizzo di export garantirà la disponibilità della variabile per i subshells e altri programmi. Per provare questo prova questo.

Aggiungi queste due righe al tuo file .bashrc

TESTVAR="no export"
export MYTESTVAR="with export"

Quindi aprire una nuova shell.

In esecuzione echo $TESTVARe echo $MYTESTVARmostrerà il contenuto di ogni variabile. Ora all'interno di quella stessa shell rimuovi quelle due righe dal tuo file .bashrc ed esegui bashper avviare una subshell.

In esecuzione echo $TESTVARavrà un output vuoto, ma in esecuzione echo $MYTESTVARverrà visualizzato "con esportazione"

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.