根据文本输出计算退出代码

问题描述

我有一个程序即使在发生内部错误的情况下也总是返回零退出代码。如果发生错误,则在标准输出中还会有其他输出,例如:

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

有人可以建议如何使bash变短吗?

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

解决方法

按照注释中 Biffen 的建议,使用! 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 manual