Mailinglist Archive: opensuse-de (6551 mails)
| < Previous | Next > |
Re: bash Probleme
- From: Jan.Trippler@xxxxxxxxxxx (Jan Trippler)
- Date: Mon, 5 Aug 2002 00:30:35 +0200
- Message-id: <20020805003035.A4566@xxxxxxxxxxxxxx>
On Mon, 05 Aug 2002 at 00:06 (+0200), Axel Heinrici wrote:
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 ;-)
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 ;-)
| < Previous | Next > |