On Sun, 4 Aug 2002 19:35:01 +0200 Jan.Trippler@t-online.de (Jan Trippler) wrote:
On Son, 04 Aug 2002 at 18:11 (+0200), Sascha Andres wrote:
ich habe mir ein kleines Skript angefungen: [...] Das TRUE kommt aus der Schleife, das FALSE danach. Ich wollte noch ein if [[ $running = "TRUE" ]] ; then ... dranhängen, aber das kommt ja nie durch!?
Ich kann mir diesen Effekt im Moment nicht erklären (denn eine Subshell liegt offenbar nicht vor - $running ist innerhalb der Schleife bekannt). Ich würde aber wegen sowas keine Schleife aufbauen, man kann das so machen:
Ja, diese Frage taucht immer wieder auf, ich habe aber seit Jahren keine andere Antwort gefunden, als dass die while Schleife eine Subshell ist. Nicht nur in der BASH, mir ist das zum Ersten mal mit der Shell von SCO 3.2 untergekommen. Was aber hilft[1] ist: ---------8<------------- declare running=FALSE while ... ... done hmm, jetzt wollte ich das grade bei mir nachvollziehen... denkste es funktioniert. Sowohl in der Kommandozeile wie als Script. --------8<-------- [bernd@burdon]-5-xterm-color ~ 560 > i=3;echo $i;while test $i -lt 10 ; do i=$(expr $i + 1 );done;echo $i GNU bash, version 2.04.0(1)-release (i386-suse-linux) Copyright 1999 Free Software Foundation, Inc. ---------8<---------- Da bin ich platt ;) Mit dem Script von Sascha gehts nicht, auch nicht mit declare. Allerdings: ---------8<---------- ps aux | grep "bash" > .tmp running="FALSE" while read line do running="TRUE" echo $running done < .tmp echo $running rm .tmp ---------8<---------- geht wieder. Es liegt wohl an der seltsamen (und unnötigen) Konstruktion mit der Pipe.. ps aux > .tmp running="FALSE" cat .tmp | grep "java" | while read line ... [1] Ja das hat sich wohl etwas relativiert ;) -- so long... bernd ------------------------------------------------------------------------