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

JDł*_*osz 24 grep shell-script

考虑这一行:

${libdir}/bin/licenseTool check "${SERIAL}" "${VERSION}" "${PRODUCT}" ${libdir} | grep '^200' >/dev/null
Run Code Online (Sandbox Code Playgroud)

什么是寻找在输出模式如果结果的点被扔掉?

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

Jan*_*nis 30

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


cuo*_*glm 26

grep扔掉的ping 输出的要点是作者只想要grep. 他/她只想知道模式是否匹配。在您的情况下,最后一个grep检查较早命令的输出是否包含任何以200.

在现代 POSIX 系统中,您可以使用grep -q完成所有操作,而无需重定向到/dev/null

... | grep -q '^200'
Run Code Online (Sandbox Code Playgroud)

注意使用grep -q有轻微的副作用,感谢Stéphane Chazelas在他的评论中指出。grep -q一旦找到第一个匹配licenseToolgrep退出,如果退出后仍然写一些东西,它将收到一个SIGPIPE。

  • 随着这些事情的进展,`grep -q` 是最近添加的;许多脚本仍然使用 `> /dev/null` 代替,因为那是你在冰河时代(即 1995 年)所拥有的一切。 (5认同)
  • 你的第一句话缺少动词吗? (3认同)
  • 和 `grep -q` 使用更少的 CPU (2认同)