2013-06-27 11 views
5

Z tego, co przeczytałem, setenv w csh i export w bashu są równoważne. Jednak podczas pracy z tymi dwoma problemami miałem dziwne problemy.Zakres "setenv" w csh Versus "eksport" w bashie

Kiedy otwieram kit i uruchomić wpisując:

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

potem pójdę do bash i wpisz

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

Jeśli jednak zrobić to w odwrotnej kolejności, to nie dałoby takie same wyniki. W szczególności, kiedy idę do bash pierwszy i wpisz

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

potem wrócić do csh i wpisz

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

nie powinna dać mi „nie”, jak również? Czy czegoś brakuje?

Dziękujemy!

+1

co masz na myśli przez "to wracam do csh"? Co dokładnie piszesz, aby "wrócić do csh"? – rici

+0

csh to moja powłoka logowania, więc gdy jestem w bash i wpisz "exit", wraca ona do csh. –

+2

Dobrze. podczas eksportowania zmiennej jest eksportowany do elementów podrzędnych, ale nie jest eksportowany do elementu nadrzędnego. Po wpisaniu "exit" wszystkie zmienne znikają. – rici

Odpowiedz

8

Eksportowanie zmiennej oznacza, że ​​kopia tej zmiennej jest umieszczana w środowisku wszystkich nowo utworzonych procesów podrzędnych. Jest to kopia zmiennej; jeśli proces potomny modyfikuje zmienną, rodzic nie widzi modyfikacji. Co więcej, jeśli dziecko eksportuje zmienną, nie staje się widoczne w rodzicu.

W związku z tym Twoje dwa przypadki są asymetryczne. Kiedy uruchomisz csh, wyeksportujesz zmienną, a następnie uruchomisz bash, bash zobaczy eksportowaną zmienną. Kiedy wyeksportujesz nową zmienną w bash i wyjdziesz z bash, aby powrócić do csh, wszystkie zmienne utworzone w sesji bash znikną.

Jeśli chcesz wyeksportować zmienną do bash, a następnie uruchomić csh dziecka (wpisując csh), prawie na pewno zobaczysz wyeksportowaną zmienną.

+0

Ma wiele sensu! Dziękuję Ci! –