Archiv verlassen und diese Seite im Standarddesign anzeigen : Globale Variable in gepipe'ter Schleife verändern?
qeldroma
05-11-2007, 16:45
Hallo zusammen,
wenn ich eine Schleife habe, die eine Subshell startet, was z.B. bei einer Pipe wohl der Fall ist (??), wird eine globale Variable leider nicht verändert.
Wie bekomme ich nun ein Schleifenergebnis aus der Schleife heraustransportiert?
Z.B.:
txt=0
ls -1 /var/log|while read line;do
txt="$line;$txt"
done
echo $txt
Ergebnis ist: 0 anstatt der aneinandergeketteten Dateinamen...
Grüße, Florian
warum nicht einfach
txt=0
for line in /var/log/*
do
txt="$line;$txt"
done
echo $txt
warum nicht einfach
txt=0
for line in /var/log/*
do
txt="$line;$txt"
done
echo $txt
Vorsicht. Das geht nur in bestimmten Fällen gut:
jan@jack:~/tmp/leer> ll
insgesamt 0
-rw-r--r-- 1 jan users 0 2007-09-23 14:19 datei mit leerzeichen.txt
jan@jack:~/tmp/leer> for i in *; do
> echo "<$i>"
> done
<datei mit leerzeichen.txt>
jan@jack:~/tmp/leer> for i in `ls`; do echo "<$i>"; done
<datei>
<mit>
<leerzeichen.txt>
jan@jack:~/tmp/leer> echo "Text mit Leerzeichen" >datei\ mit\ leerzeichen.txt
jan@jack:~/tmp/leer> for i in `cat datei\ mit\ leerzeichen.txt`; do
> echo "<$i>"
> done
<Text>
<mit>
<Leerzeichen>
Für die unteren Fälle kann man z. B. mit IFS arbeiten, oder die while-Schleife so nutzen:
jan@jack:~/tmp/leer> f=`ls | while read i; do echo -n $i; done`
jan@jack:~/tmp/leer> echo $f
datei mit leerzeichen.txtdatei_ohne_leerzeichen.txt
Jan
qeldroma
06-11-2007, 11:53
Hallo zusammen,
ihr versteift euch auf das ls, aber das ist nicht meine Frage, sorry.
Ich will ganz allgemein wissen, wie ich das mache! Dieses "ls /var/log" steht nur als dummy für eine x-beliebige Eingabe...
Grüße, Florian
Hallo zusammen,
ihr versteift euch auf das ls, aber das ist nicht meine Frage, sorry.
Ich will ganz allgemein wissen, wie ich das mache! Dieses "ls /var/log" steht nur als dummy für eine x-beliebige Eingabe...
Grüße, Florian
Das ls in meinem unteren Code-Schnipsel steht auch für eine x-beliebige Eingabe, genau wie die for-Bedingung bei jeebee und die Beispiele, die ich für die Gefahren von leerzeichenbehafteten Eingaben in einer for-Schleife hergenommen habe.
Ich dachte, es wäre klar geworden: Entweder auf eine Pipe (und damit Subshell) verzichten oder die in der Subshell ermittelten Werte per stdout nach oben durchreichen.
Jan
qeldroma
07-11-2007, 15:34
verdammt, ich habe meinen Fehler:
data="$(mysql ...... -e 'select name from users')"
for i in $data;do
echo $id
done
Ergebnis war eine Leerzeile...warum nur ;)
So ein Mist, ich danke euch vielmals für die Mühe :o
Grüße, Florian
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.