问题描述
我有一个程序即使在发生内部错误的情况下也总是返回零退出代码。如果发生错误,则在标准输出中还会有其他输出,例如:
# 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