вычисление кода выхода на основе текстового вывода

#bash #grep #exit-code

#bash #grep #код выхода

Вопрос:

У меня есть программа, которая всегда возвращает нулевой код выхода, даже в случае внутренней ошибки. В случае ошибки к стандартному выводу добавляется дополнительный вывод, например:

 # always-zero-exit
Error: Line: 1, Column: 1
some further scary error description....
  

Может кто-нибудь посоветовать, как сделать короткий обходной путь, подобный приведенному ниже:

 # always-zero-exit > search-for-string-'Error'-and-returns-non-zero-if-found
  

Комментарии:

1. ! grep Error ?

Ответ №1:

Как предложил Биффен в комментарии, используйте ! grep ERROR_PATTERN .

Пример:

 # Tiny test command that exit with status 0 and 
# prints errors into STDOUT:

echo 'Error: Line: 1, Column: 1' > out.log
! grep -q 'Error' out.log
echo $?
# Prints: 1

# Same, no errors:

echo 'Line: 1, Column: 1' > out.log
! grep -q 'Error' out.log
echo $?
# Prints: 0
  

Возможно, вы захотите использовать более сложную обработку сообщений об ошибках, например:

 ! grep -Pqi '(error|fail|exception)' out.log
  

Здесь grep используются следующие параметры:
-P : Используйте регулярные выражения Perl.
-i : Используйте сопоставление без учета регистра.
-q : Тихо; ничего не записывайте в стандартный вывод. Немедленно завершите работу с нулевым статусом, если найдено какое-либо совпадение.

СМОТРИТЕ ТАКЖЕ:
grep руководство