Как заставить скрипт инициализации возвращать 0

Как заставить скрипт инициализации возвращать 0

У меня есть сценарий инициализации, который плохо разработан, поскольку он не соответствуетСтандартные базовые спецификации Linux

Следующий код должен иметь код выхода 0, если выполняется, и 3, если не выполняется.

service foo status; echo $? 

Однако из-за особенностей конструкции скрипта он всегда возвращает 0. Я не могу исправить скрипт без существенной переработки (поскольку перезапуск службы foo зависит от статуса службы foo).

Как можно обойти эту проблему, чтобы service foo statusвозвращался 0, если приложение запущено, и 3, если приложение не запущено?

Что у меня есть на данный момент:

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

решение1

Вы передаете grepвывод в wcи echo $?вернете код выхода для , wcа не grep.

Эту проблему можно легко обойти, используя -qопцию grep:

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

Если требуемая строка не найдена, grepвозвращается ненулевой код выхода.

EDIT: Как и предложилг-н.spuratic, ты мог бы сказать:

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

для возврата кода выхода, 3если строка не найдена.

man grepскажет:

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

Связанный контент