Dominik Klein wrote:
Hallo Liste
wie ich gerade erfahren musste, werden Kommandos in Pipe-Konstruktionen in einer Sub-Shell ausgeführt, wenn mindestens ein Teil (ausgenommen des letzten Kommandos) des Konstruktes ein Shell-Builtin-Command ist.
Quelle: http://www3.informatik.uni-erlangen.de/Lehre/DOLINUX/WS2001/proto_011031-1.h...
Jetzt habe ich folgendes Skript: ----------- a=0 b=0 while [ $a -le 3 ] do while [ $b -le 3 ] do if [ $b -eq 2 ] then bla=blub echo $bla # hier ist $bla gesetzt fi b=$(($b+1)) done
echo $bla #hier ist $bla auch noch gesetzt a=$(($a+1))
done|sort
echo $bla # hier ist $bla wieder leer -------------
Dass diese Schleife total sinnlos ist, ist mir klar, es geht um den prinzipiellen Aufbau. Nach diesen Schleifen möchte ich $bla ausgeben. $bla ist aber leer.
"bla=blub" durch "export bla=blub" zu ersetzen, bringt keinen Erfolg.
Gibt es eine Möglichkeit, die Variable aus dieser Subshell herauszukriegen?
Ja, indem du die while-Schleife in eine Funktion packst und den gewünschten Wert über die Funktion zurückgibst. Darüber habe ich mich auch schon geärgert. Oder in Datei zwischenparken: versuch="geht" echo "nicht" | while read wort; do versuch="${versuch} ${wort}" echo -e "In schleife: $versuch \n" set versuch=$versuch echo $versuch > exp_versuch done echo -e "Nach Schleife: $versuch \n" versuch_neu=`cat exp_versuch` echo -e "Aus Datei: $versuch_neu \n" Sandy -- Antworten bitte nur in die Mailingliste! PMs bitte an: news-reply2 (@) japantest (.) homelinux (.) com