将 grep 的输出重定向到 /dev/null 有什么意义?

将 grep 的输出重定向到 /dev/null 有什么意义?

考虑这一行:

${libdir}/bin/licenseTool check "${SERIAL}" "${VERSION}" "${PRODUCT}" ${libdir} | grep '^200' >/dev/null

如果结果是,在输出中寻找模式有什么意义被扔掉了吗?

而且,如果这样的行出现在 bash 脚本中的最后一件事,那么它的退出值是返回给脚本的调用者,还是被忽略? (我正在猜测我们是否可以假设这样做只是为了副作用或以某种方式向调用者返回一些内容。)

答案1

你的怀疑是正确的;脚本最后一个命令的退出状态将传递到调用环境。所以答案是,如果grep与数据中的某些内容匹配,该脚本将返回退出状态 0,如果不匹配,则返回存在状态 1,如果发生某些错误,则返回退出状态 2。

答案2

被丢弃的 ping 输出的要点grep是作者只想要 的返回状态grep。他/她只想知道模式是否匹配。在您的情况下,最后一个grep检查先前命令的输出是否包含任何以200.

在现代 POSIX 系统中,您可以使用以下命令完成这一切grep -q不重定向到/dev/null

... | grep -q '^200'

请注意,使用grep -q有轻微副作用,谢谢斯蒂芬·查泽拉斯在他的评论中指出。grep -q一旦找到第一个匹配就退出,如果退出licenseTool后仍然写东西grep,它将收到一个SIGPIPE。

相关内容