Mailinglist Archive: opensuse-de (6551 mails)

< Previous Next >
Re: bash Probleme
  • From: Jan.Trippler@xxxxxxxxxxx (Jan Trippler)
  • Date: Sun, 4 Aug 2002 19:35:01 +0200
  • Message-id: <20020804193501.A3472@xxxxxxxxxxxxxx>
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.


< Previous Next >
References