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 var1
e var2
sono attivi nell'ambiente attuale. Non vedi un valore per var3
perché non è ancora impostato.
Dopo la riga che inizia " var3=...
" non si vede un valore per var1
quanto non è stato esportato. Si fa vedere un valore per var2
quanto è stato esportato. Si vede un valore per var3
perché è stato fissato per l'ambiente figlio unico .
( bash -c
equivale a eseguire uno script con il contenuto dell'argomento -c
nell'opzione. Uno script o altro eseguibile o, in questo caso, l'argomento bash -c
diventa 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 executethisprogram
NON conosce il valore della variabile FOO
. D'altra parte, quando si utilizza: FOO=BAR; export FOO; executethisprogram
il programma executethisprogram
conoscerà il valore della variabile FOO
.
export FOO
è un comando che contrassegna la variabile in FOO
modo 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 ls
al prompt dei comandi, la shell interattiva è il genitore ed ls
è il figlio. Se ho uno script che utilizza, ls
allora lo script è il genitore ed ls
è il bambino.