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

时间:2014-04-22 19:10:20

标签: grep checksum sha256

我尝试编写node.js sourcecorresponding SHASUMS256.txt的下载脚本,校验和,grep for OK,并且只有在成功时使用grep' s退出代码0才会返回结果-q标志:

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的代码。

1 个答案:

答案 0 :(得分:3)

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

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

  • 您可以通过stderr向<{p}} sha256sum发送grep来验证这一点

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

希望有所帮助。