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一旦找到第一个匹配licenseTool就grep退出,如果退出后仍然写一些东西,它将收到一个SIGPIPE。