2011-10-27 3 views
5

Questo è il codice per la mia foobar.sh:Istruzione while con ritorno grep vuoto/vuoto?

!#/bin/bash 
while [ 1 ] 
do 
    pid=`ps -ef | grep "mylittleprogram" | grep -v grep | awk ' {print $2}'` 
    echo $pid 
    if [ "$pid"="" ] 
    then 
      echo "Process has ended lets get this show on the road..." 
      exit 
    else 
      echo "Process has not ended yet" 
    fi 
    sleep 6 
done 

praticamente sto correndo un ciclo infinate che eseguire il comando X una volta un processo monitorato è terminato ma finisce per ottenere il seguente messaggio di come i miei cicli di script :

./foobar.sh: line 7: [: missing `]' 
Process has not ended yet 

c'è un modo di fare lo script accettare che lo zero feed back attiverà il mio 'Poi' economico ed eseguire il comando X, dato che non è se piace il metodo corrente.

risposta

9

Invece di

if [ "$pid"="" ] 

riprova

if [ "$pid" = "" ] 

La spazio bianco è di circa = è importante.

È cabn anche provare

if [ -z "$pid" ] 
+0

Eccellente grazie mille! – bikerben

3

farei

while pgrep -fl "mylittleprogram"; do sleep 6; done 
exit # process has ended 

(pgrep è nel pacchetto psmisc IIRC)

ho appena provato. È possibile reindirizzare l'output di pgrep a /dev/null se si desidera che l'attesa torni in silenzio. Aggiungere un po 'di spezie per rendere le cose di continuità:

{ 
    trap "" INT 
    while pgrep -fl "mylittleprogram" >/dev/null 
    do 
     sleep 6 
    done 
    true 
} && exit 
1

Il test zero è if [ -z "$pid" ]

0

Invece di matching nebulosa fornita da:

pid=`ps -ef | grep "mylittleprogram" | grep -v grep | awk ' {print $2}'` 

... e la sintassi backtick arcaica, considerare questo che corrisponde esattamente al basename del processo e produce un formato di output di tua scelta (qui, il processo pid se esiste):

pid=$(ps -C mylittleprogram -opid=) 

Poi, come noto, semplicemente prova per un valore vuoto:

[ -z "${pid" ] && echo "no process" || echo "I live as $pid" 

Il segno di uguale dopo il nome elemento di uscita sopprime l'intestazione che si sarebbe normalmente ottenere. Le manpage sono tuoi amici.