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

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