根据文本输出计算退出代码
compute exit code based on text output
我有一个程序 returns 退出代码始终为零,即使出现内部错误也是如此。如果出现错误,标准输出会有额外的输出,例如:
# 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
:使用case-insensitive匹配。
-q
:安静;不要向标准输出写入任何内容。如果找到任何匹配项,立即以零状态退出。
另请参见:
grep
manual
我有一个程序 returns 退出代码始终为零,即使出现内部错误也是如此。如果出现错误,标准输出会有额外的输出,例如:
# 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
:使用case-insensitive匹配。
-q
:安静;不要向标准输出写入任何内容。如果找到任何匹配项,立即以零状态退出。
另请参见:
grep
manual