Como enganar um script de inicialização para retornar 0

Como enganar um script de inicialização para retornar 0

Eu tenho um script de inicialização mal projetado porque não está em conformidade com oEspecificações básicas padrão do Linux

O seguinte deve ter um código de saída 0 se estiver em execução e 3 se não estiver em execução

service foo status; echo $? 

No entanto, devido à forma como o script é projetado, ele sempre retorna 0. Não consigo corrigir o script sem uma reescrita significativa (porque a reinicialização do serviço foo depende do status do serviço foo).

Como você poderia contornar o problema para que service foo statusretornasse 0 se estivesse em execução e 3 se não estivesse em execução?

O que tenho até agora:

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

Responder1

Você está canalizando a grepsaída para wce echo $?retornaria o código de saída para wce não grep.

Você poderia facilmente contornar o problema usando a -qopção para grep:

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

Se a string desejada não for encontrada, grepretornaria com um código de saída diferente de zero.

EDITAR: Conforme sugerido porsenhor.espurático, você poderia dizer:

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

para retornar com um código de saída 3se a string não for encontrada.

man greppoderia dizer:

   -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.)

informação relacionada