grep - 管道 shasum 到 grep,但 grep 返回管道输入的所有行,即使是不匹配的

我正在尝试编写下载 node.js source 的脚本和 corresponding SHASUMS256.txt ,校验和,grep OK,不返回任何结果,使用 grep 的 -q 标志成功退出代码 0:

wget http://nodejs.org/dist/latest/node-v0.10.26.tar.gz
wget http://nodejs.org/dist/latest/SHASUMS256.txt
sha256sum -c SHASUMS256.txt|grep -q OK

但是,grep 返回了不匹配行的选择“没有这样的文件或目录”错误(尽管不是全部,令人困惑):

> sha256sum -c SHASUMS256.txt|grep -q OK 
sha256sum: node-v0.10.26-darwin-x64.tar.gz: No such file or directory
sha256sum: node-v0.10.26-darwin-x86.tar.gz: No such file or directory
sha256sum: node-v0.10.26-linux-x64.tar.gz: No such file or directory
sha256sum: node-v0.10.26-linux-x86.tar.gz: No such file or directory
sha256sum: node-v0.10.26-sunos-x64.tar.gz: No such file or directory
sha256sum: node-v0.10.26-sunos-x86.tar.gz: No such file or directory
sha256sum: node-v0.10.26-x86.msi: No such file or directory
sha256sum: node-v0.10.26.pkg: No such file or directory
sha256sum: node.exe: No such file or directory

知道这里的问题是什么吗?如果校验和成功(例如 grep 匹配 OK),我想要从这个脚本中返回代码 0,如果失败则返回非 0 代码。

最佳答案

  • 当您通过管道将一个命令的输出作为其他命令的输入时,只有第一个命令的 stdout 作为 stdin 传递给第二个命令。

  • 您看到的行是由 sha256sum 程序发送到 stderr

  • 您可以通过将 sha256sum 命令的 stderr 也发送到 grep 来验证

    sha256sum -c SHASUMS256.txt 2>&1 |grep -q OK
    

希望对您有所帮助。

https://stackoverflow.com/questions/23228209/

相关文章:

process - 用于并行计算的 CPU 卡?

ember.js - 在 Github Pages 上的 Ember.js 中获取没有哈希的 url

ocaml - 是否可以在 OCaml 中直接将 "type"作为字符串打印出来?

installation - NSIS:MUI_PAGE_INSTFILES 完成后如何自动按下 "

ckeditor - 如何从内联 CKEditor 的可编辑区域中删除边框?

cordova - 在 Windows Phone 8 中调用日期时间选择器插件

sql - MSSQL : Display Rows for a Select with Case

amazon-web-services - boto如何选择aws区域来创建buckets?

vb.net - MeasureText() - SizeF 到英寸

mips - mips 中的算术溢出