#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
руководство