2013-06-27 11 views
5

Von was ich gelesen habe, sind setenv in csh und export in bash gleichwertig. Allerdings habe ich einige seltsame Probleme bei der Arbeit mit den beiden gefunden.Umfang von "setenv" in csh Versus "Export" in bash

Wenn ich Kitt eröffnen und eingeben:

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

dann gehe ich

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

jedoch heftig schlagen und geben Sie, wenn ich es in der umgekehrten Reihenfolge zu tun, wäre es nicht gibt die gleiche Ergebnisse. Genauer gesagt, wenn ich bash gehen zum ersten und geben

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

dann gehe ich zu csh zurück und geben

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

Sollte es mir nicht geben „nein“ als auch? Fehle ich etwas?

Vielen Dank!

+1

was meinst du mit "dann gehe ich zurück zu csh"? Was genau tippst du auf "zurück zu csh"? – rici

+0

csh ist meine Login-Shell, also wenn ich in bash bin und "exit" tippe, geht es zurück zu csh. –

+2

Richtig. Wenn Sie eine Variable exportieren, wird sie an untergeordnete Elemente exportiert, sie wird jedoch nicht an das übergeordnete Element exportiert. Wenn Sie "exit" eingeben, verschwinden alle Variablen. – rici

Antwort

8

Das Exportieren einer Variablen bedeutet, dass eine Kopie dieser Variablen in die Umgebung neu erstellter untergeordneter Prozesse platziert wird. Es ist eine Kopie der Variablen; Wenn der untergeordnete Prozess die Variable ändert, sieht das übergeordnete Element die Änderung nicht. Wenn ein Kind eine Variable exportiert, wird es darüber hinaus nicht im Elternteil sichtbar.

Daher sind Ihre beiden Fälle asymmetrisch. Wenn Sie in csh starten, exportieren Sie eine Variable und starten Sie dann bash, bash sieht die exportierte Variable. Wenn Sie dann eine neue Variable in bash exportieren und aus bash beenden, um zu csh zurückzukehren, verschwinden alle Variablen, die in der Bash-Sitzung erstellt wurden.

Wenn Sie eine Variable in bash exportieren und dann ein untergeordnetes csh starten (indem Sie csh eingeben), würden Sie fast sicher die exportierte Variable sehen.

+0

Macht viel Sinn! Vielen Dank! –