Risposte:
Questo è un estratto dalla pagina man di Bash:
export [-fn] [name [= word]] ...
export -p
I nomi forniti sono contrassegnati per l'esportazione automatica nell'ambiente di comandi eseguiti successivamente. Se viene fornita l'opzione -f, i nomi si riferiscono alle funzioni ...
Se hai solo bisogno della variabile nell'ambiente attuale, non è necessario usare export.
var=value
Modificare:
Senza esportazione: solo ambiente attuale. Con esportazione: ambiente corrente e ambienti secondari.
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 sul genitore:
$ 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 echo ( echo "parent...") vedi "123" e "456" perché entrambi var1e var2sono attivi nell'ambiente attuale. Non vedi un valore per var3perché non è ancora impostato.
Dopo la riga che inizia " var3=..." non si vede un valore per var1quanto non è stato esportato. Si fa vedere un valore per var2quanto è stato esportato. Si vede un valore per var3perché è stato fissato per l'ambiente figlio unico .
( bash -cequivale a eseguire uno script con il contenuto dell'argomento -cnell'opzione. Uno script o altro eseguibile o, in questo caso, l'argomento bash -cdiventa un figlio dell'ambiente corrente che, di conseguenza, è, ovviamente, il figlio genitore.)
Nello "script" i valori della variabile vengono modificati. Ora genera quei nuovi valori.
Una volta terminato lo "script", l'esecuzione torna all'ambiente padre (la riga di comando in questo caso). Dopo l'ultimo eco, vengono visualizzati i valori originali poiché le modifiche apportate nell'ambiente figlio non influiscono sul padre.
export: rendere disponibili le variabili per questi ambienti figlio.
Lo dici tu
Uso sempre il comando export per impostare la variabile d'ambiente
Dal modo in cui lo hai detto, sembra che tu stia davvero cercando di chiedere come fai a far persistere una variabile ambientale. Per fare ciò richiederebbe di inserire la tua export VAR="foo"dichiarazione nel tuo file $ HOME / .bash_profile (se stai usando bash). Se vuoi che la variabile ambientale persista per tutti gli utenti tranne root, quindi aggiungila a / etc / profile. Se vuoi che venga aggiunto anche per l'utente root, impostalo in /root/.bash_profile.
Funzionerà con tutte le shell di login in cui bash è la shell di scelta. Per shell non di accesso, è necessario utilizzare .bashrc. Non ho approfondimenti da offrire per altre shell: D
l'esportazione è il modo più semplice per farlo, quindi perché non lasciarlo a quello?
export VARIABLE=value # for Bourne, bash, and similar shells
setenv VARIABLE value # for csh and similar shells
FOO=BAR; executethisprogram il programma executethisprogramNON conosce il valore della variabile FOO. D'altra parte, quando si utilizza: FOO=BAR; export FOO; executethisprogram il programma executethisprogramconoscerà il valore della variabile FOO.
export FOOè un comando che contrassegna la variabile in FOOmodo che sia possibile accedervi dai processi figlio del processo di attivazione in cui è stato emesso il comando. Quel genitore può essere uno script o una shell interattiva.
Puoi anche fare qualcosa del genere:
VAR=val application
Per esempio:
LANG=C ls --help
uscita in inglese.
LANG=pl_PL ls --help
uscita in polacco (se disponibile).
In passato in sh non si poteva fare export VAL = val. Dovevi
VAL=val; export VAL
ls, ad esempio) senza influire sul valore di quella variabile nell'ambiente (padre) corrente.
lsè figlio del processo dal quale è stato eseguito. Se scrivo lsal prompt dei comandi, la shell interattiva è il genitore ed lsè il figlio. Se ho uno script che utilizza, lsallora lo script è il genitore ed lsè il bambino.