Quando si imposta una variabile in .bashrc
, dovrei usare questo?
export VAR=value
O sarebbe abbastanza?
VAR=value
Qual è esattamente la differenza (se ce n'è una)?
Quando si imposta una variabile in .bashrc
, dovrei usare questo?
export VAR=value
O sarebbe abbastanza?
VAR=value
Qual è esattamente la differenza (se ce n'è una)?
Risposte:
export VAR=value
fare
VAR=value
imposta solo la variabile per la durata dello script ( .bashrc
in 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 VAR
all'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 .bashrc
persist nella shell che proviene .bashrc
. Più in generale ogni volta che la shell genera uno script (usando il source scriptname
comando) le variabili impostate nello script persistono per la vita della shell.
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
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 $TESTVAR
e echo $MYTESTVAR
mostrerà il contenuto di ogni variabile. Ora all'interno di quella stessa shell rimuovi quelle due righe dal tuo file .bashrc ed esegui bash
per avviare una subshell.
In esecuzione echo $TESTVAR
avrà un output vuoto, ma in esecuzione echo $MYTESTVAR
verrà visualizzato "con esportazione"