输出输入,如果它不包含特定的字符串
问题描述:
我有什么似乎是一个相当简单的问题,但我找不到答案。
我正在验证文件的travis脚本。
我正在使用第三方软件,因此我对开发没有影响。
问题:
正如您所知,travis脚本要求非零退出代码才能使构建失败。不幸的是,我使用的软件只在标准输出中输出错误消息,但仍然存在代码0. 我的想法是使用grep。
当前我使用的命令:! echo "SomeInput" | grep -Pzo "\A[^\x{0000}]*error message[^\x{0000}]*\Z"
如果错误消息被打印,它返回一个非零退出代码并打印错误消息。
正如您可能已经注意到的,当没有错误出现时,输出不会显示。如果我们想检查一个特别的变化是否引入了警告,这是不好的。那么它也不会被显示。
任何想法?输出输入,如果它不包含特定的字符串
答
如果我理解正确,您想通过grep
检测错误 - 在输出中某些模式,和同时您还希望看到整个输出。棘手的部分是grep
本身会消耗输出。
我不是那里有一个简单的聪明的解决方案。你需要消耗两次输出。一次只打印出来,还有一次检查错误。
一种解决方案是先将输出保存到文件中,然后对其进行处理。例如:
some_command 2>&1 | tee out.log
! grep -Pzo "\A[^\x{0000}]*error message[^\x{0000}]*\Z" out.log
'grep --invert-match [PATTERN]'/'grep -v [PATTERN]'? –