2013-06-27 10 views
5

Da quello che ho letto, setenv in csh e export in bash sono equivalenti. Tuttavia, ho trovato alcuni strani problemi mentre lavoravo con i due.Ambito di "setenv" in csh Versus "export" in bash

Quando apro stucco e iniziare a digitare:

setenv TEMP yes 
echo $TEMP //this give me "yes" 

poi vado a bash e digitare

echo $TEMP //this give me "yes" as well 

Tuttavia, se lo faccio in ordine inverso, non avrebbe dato il stesso risultato. In particolare, quando vado a colpire prima e digitare

export TEMP=no 
echo $TEMP //this give me "no" 

poi torno in csh e digitare

echo $TEMP // this give me "Undefined Variable" 

non dovrebbe darmi "no" come bene? Mi sto perdendo qualcosa?

Grazie!

+1

cosa intendi con "poi torno a csh"? Che cosa digiti esattamente "torna a csh"? – rici

+0

csh è la mia shell di accesso, quindi quando sono in bash e digito "exit", torna a csh. –

+2

Giusto. quando esporti una variabile, questa viene esportata ai bambini, ma non viene esportata nel genitore. Quando digiti "exit", tutte le variabili spariscono. – rici

risposta

8

L'esportazione di una variabile indica che una copia di tale variabile viene inserita nell'ambiente di qualsiasi processo figlio appena creato. È una copia della variabile; se il processo figlio modifica la variabile, il genitore non vede la modifica. Inoltre, se un bambino esporta una variabile, non diventa visibile nel genitore.

Quindi, i due casi sono asimmetrici. Quando si avvia in csh, si esporta una variabile e quindi si avvia bash, bash vede la variabile esportata. Quando poi esporti una nuova variabile in bash e esci da bash per tornare a csh, tutte le variabili create nella sessione bash scompaiono.

Se dovessi esportare una variabile in bash e quindi avviare un child csh (digitando csh), vedresti quasi sicuramente la variabile esportata.

+0

Ha molto senso! Grazie! –