Cómo engañar a un script de inicio para que devuelva 0

Cómo engañar a un script de inicio para que devuelva 0

Tengo un script de inicio que está mal diseñado porque no se ajusta a lasEspecificaciones básicas estándar de Linux

Lo siguiente debe tener un código de salida de 0 si se está ejecutando y 3 si no se está ejecutando.

service foo status; echo $? 

Sin embargo, debido a la forma en que está diseñado el script, siempre devuelve un 0. No puedo arreglar el script sin una reescritura significativa (porque el reinicio del servicio foo depende del estado del servicio foo).

¿Cómo podría solucionar el problema para que service foo statusdevuelva un 0 si se está ejecutando y un 3 si no se está ejecutando?

Lo que tengo hasta ahora:

root@foo:/vagrant# service foo start
root@foo:/vagrant# /etc/init.d/foo status | /bin/grep "up and running"|wc -l
1
root@foo:/vagrant# /etc/init.d/foo status | /bin/grep "up and running"|wc -l;echo $?
0 # <looks good so far

root@foo:/vagrant# service foo stop
root@foo:/vagrant# /etc/init.d/foo status | /bin/grep "up and running"|wc -l
0
root@foo:/vagrant# /etc/init.d/foo status | /bin/grep "up and running"|wc -l;echo $?
0 # <I need this to be a 3, not a 0

Respuesta1

Está canalizando la grepsalida wcy echo $?devolvería el código de salida para wcy no grep.

Podrías solucionar fácilmente el problema utilizando la -qopción para grep:

/etc/init.d/foo status | /bin/grep -q "up and running"; echo $?

Si no se encuentra la cadena deseada, grepregresará con un código de salida distinto de cero.

EDITAR: Como lo sugiereseñor espurático, tu puedes decir:

/etc/init.d/foo status | /bin/grep -q "up and running" || (exit 3); echo $?

para regresar con un código de salida de 3si no se encuentra la cadena.

man grepdiría:

   -q, --quiet, --silent
          Quiet;  do  not  write  anything  to  standard   output.    Exit
          immediately  with  zero status if any match is found, even if an
          error was detected.  Also see the -s  or  --no-messages  option.
          (-q is specified by POSIX.)

información relacionada