Questo è un estratto dalla pagina man di Bash:
esporta [-fn] [nome[=parola]] ...
esporta -p
I nomi forniti sono contrassegnati per l'esportazione automatica nell'ambiente dei comandi eseguiti successivamente. Se viene data l'opzione -f, i nomi si riferiscono a funzioni...
Se hai bisogno della variabile solo nell'ambiente corrente, non è necessario utilizzare l'esportazione.
var=value
Modifica:
Senza esportazione:solo ambiente corrente. Con l'esportazione:ambiente corrente e ambienti figlio.
Ecco una dimostrazione dell'effetto dell'esportazione sulla disponibilità di una variabile in un ambiente figlio e che i cambiamenti nell'ambiente figlio non influiscono sull'ambiente padre:
$ var1=123
$ export var2=456
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
$ var3=789 bash -c 'echo "child [$var1] [$var2] [$var3]"; var1=111; var2=222; var3=333; echo "child [$var1] [$var2] [$var3]"'
child [] [456] [789]
child [111] [222] [333]
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
Dopo il primo eco (echo "parent..."
) vedi "123" e "456" perché entrambi var1
e var2
sono attivi nell'ambiente attuale. Non vedi un valore per var3
perché non è ancora impostato.
Dopo la riga che inizia con "var3=...
" non vedi un valore per var1
perché non è stato esportato. Sì vedere un valore per var2
perché era esportato. Viene visualizzato un valore per var3
perché è stato impostato solo per l'ambiente figlio .
(bash -c
è equivalente all'esecuzione di uno script con il contenuto dell'argomento al -c
opzione. Uno script o altro eseguibile o, in questo caso, l'argomento di bash -c
diventa un figlio dell'ambiente attuale che, di conseguenza, è, ovviamente, il genitore del bambino.)
Nello "script" vengono modificati i valori della variabile. Ora emette quei nuovi valori.
Una volta terminato lo "script", l'esecuzione ritorna all'ambiente genitore (la riga di comando in questo caso). Dopo l'ultimo eco, vengono visualizzati i valori originali perché le modifiche apportate nell'ambiente figlio non influiscono sul genitore.
Lo dici tu
Uso sempre il comando export per impostare la variabile d'ambiente
Dal modo in cui l'hai formulato, sembra che tu stia davvero cercando di chiederti come fai a far persistere una variabile ambientale. Per farlo dovresti inserire il tuo export VAR="foo"
istruzione nel tuo file $HOME/.bash_profile (se stai usando bash). Se vuoi che la variabile ambientale persista per tutti gli utenti tranne root, aggiungila a /etc/profile. Se vuoi che venga aggiunto anche per l'utente root, impostalo in /root/.bash_profile .
Funzionerà per tutte le shell di login in cui bash è la shell preferita. Per le shell non di login, devi usare .bashrc. Non ho approfondimenti da offrire per altre shell :D