2011-10-27 14 views
5

Este es el código para mi foobar.sh:¿Cuándo se devuelve la declaración con grep vacío/blanco?

!#/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 

básicamente estoy ejecutando un bucle infinate que ejecutar el comando X una vez un proceso supervisado ha terminado, pero que terminan recibiendo el mensaje siguiente como mis bucles de scripts :

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

¿hay una manera de hacer el guión aceptar que volver alimentación cero dará lugar a mi declaración 'Entonces' y ejecute el comando X, ya que no es gusto del método actual.

Respuesta

9

En lugar de

if [ "$pid"="" ] 

intenta

if [ "$pid" = "" ] 

El espacio en blanco es de alrededor de = es importante.

Usted cabn también tratan

if [ -z "$pid" ] 
+0

Excelente muchas gracias! – bikerben

3

lo haría

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

(pgrep está en el paquete psmisc IIRC)

acabo probado. Puede redirigir la salida de pgrep a /dev/null si desea que la espera sea silenciosa. Añadir un poco más de sabor a hacer las cosas ininterrumpida:

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

El ensayo cero es if [ -z "$pid" ]

0

En lugar de la coincidencia nebulosa proporcionada por:

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

... y la sintaxis de comillas invertidas arcaica, considere esto que coincide exactamente con el basename del proceso y produce un formato de salida de su elección (aquí, el proceso pid si existe):

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

Entonces, como se ha señalado, simplemente para probar un valor vacío:

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

El signo igual tras el nombre del elemento de salida suprime el encabezamiento que normalmente conseguir. Las páginas de manual son tu amigo.

Cuestiones relacionadas