On Mon, 05 Aug 2002 at 00:06 (+0200), Axel Heinrici wrote:
Am Sonntag, 4. August 2002 23:39 schrieb Matthias Hentges: [...]
Hier ging es aber um die Variable "running" die ja nicht aus der Pipe kommt, sondern von der while-Schleife erzeugt wird.
Die while-Schleife sollte eigentlich nicht in einer Subshell laufen, was sie aber anscheinend doch macht, da die Variable lokal auf die while-Schleife begrenzt ist - zumindest im angegebenen Beispiel.
Auf die Gefahr hin, dass ich mich für doof haltet:
In dem Skript steht: "cat .tmp | grep "java" | while read line"
Ich verstehe das so, dass grep und die while-Schleife jeweils in einer Subshell laufen. ***verwirrt sei****
Bin ich bei dem Thema auch ;-) Ich kann mich nebulös erinnern, dass ich mal bei einem ziemlich dicken Script mit genau diesem Problem auf die Schnauze gefallen bin - eine Variable aus einer while-Schleife kommt einfach nicht außerhalb der Schleife an. Dass die Schleife nicht in einer Subshell läuft, kann man relativ einfach prüfen: Definiere vor der Schleife eine Variable, ohne sie zu exportieren, dann darf sie nur in der aktuellen Shell bekannt sein. Frage sie innerhalb der while-Schleife ab. Noch verrückter: Verändere sie innerhalb der Schleife nach der Abfrage und schau sie Dir dann an. v=42 while test $v -eq 42; do echo $v v=`expr $v + 624` echo $v done echo $v Das ergibt: 42 666 666 OK, so erwartet man das. Nächster Versuch: v=42 echo $v | while read x; do echo $v $x v=`expr $x + 624` echo $v done echo $v Jetzt sehen wir: 42 42 666 42 Und da komme ich nicht mehr mit! Jan P.S.: Ich bin damals den Weg des geringsten Widerstands gegangen und habe Perl genutzt ;-)