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:
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 >