On Son, 04 Aug 2002 at 18:11 (+0200), Sascha Andres wrote:
ich habe mir ein kleines Skript angefungen:
,----[ test.sh ]- | #! /bin/sh | | ps aux > .tmp | running="FALSE" | cat .tmp | grep "java" | while read line
useless use of cat award ;-) Das geht auch so: grep "java" .tmp | while read line oder noch kürzer (und ohne Umwege über eine temp. Datei): ps aux | grep "java" | while read line
| do | running="TRUE" | echo $running | done | echo $running | rm .tmp `----
Die Ausgabe lautet dann z.B.:
,----[ out ]- | TRUE | FALSE `----
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: export running=FALSE ps aux | grep -v grep | grep -q java && export running=TRUE Das nutzt aus, dass grep einen Returncode != 0 wirft, wenn das Suchmuster nicht gefunden wird. Jan P.S.: Man kann Deine Scripts besser kopieren und selber testen, wenn Du die | am Zeilenanfang weglässt. Mache einfach eine Marke, die den Anfang und das Ende des Scripts kennzeichnet.