Am Sonntag, 4. August 2002 18:11 schrieb Sascha Andres: ...
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 bin's immer gewöhnt, das die Sichtbarkeit einer globalen Variable (ich nenn $running jetzt mal so), auch immer so ist, aber running in der Schleife ist scheinbar ein anderes running als ausserhalb. Wie komm ich an den Wert ran?
Ciao Sascha
Das Problem ist IMHO, daß durch die Pipes ein jeweiliges fork() der aktuellen Shell erfolgt und somit die Kommandos in einzelnen Subshells laufen. Die Variable running wäre somit in der Schleife eine lokale Definition. Änderst Du dagegen das Skript nur leicht ab, so läuft die Schleife in der aufgerufenen Shell: #! /bin/sh ps aux > .tmp declare running="FALSE" cat .tmp | grep "java" > .tmp1 while read line do running="TRUE" echo $running done < .tmp1 echo $running rm .tmp*