是否有Bash一行检查三个命令的输出是否匹配?

Ada*_*sen 3 bash

我试图找出一些Bash-foo来检查三个不同命令的输出是否相同.我可以用bash脚本的几行做到这一点,我只是想知道,如果我想要做的一些花哨的外壳I/O重定向一条线是可能的.

我想要做的是检查SSL证书是否与特定密钥和证书签名请求匹配.

命令如下所示:

openssl x509 -noout -modulus -in certificate.crt | openssl md5
openssl rsa -noout -modulus -in privateKey.key | openssl md5
openssl req -noout -modulus -in CSR.csr | openssl md5
Run Code Online (Sandbox Code Playgroud)

如果key,cert和csr匹配,则所有这三个命令都应该吐出相同的输出,例如:"(stdin)= 95ce143e8418cf8a4f7dd718983ed4eb".

这是一个原型:

[[ $(echo -e "blah\nblah\nblah" | uniq | wc -l) -eq 1 ]]
Run Code Online (Sandbox Code Playgroud)

但我无法从那里得到最终产品.这不起作用:

[[ $(openssl x509 -noout -modulus -in certificate.crt | openssl md5 && openssl rsa -noout -modulus -in privateKey.key | openssl md5 && openssl req -noout -modulus -in CSR.csr | openssl md5 | uniq | wc -l) -eq 1 ]]
Run Code Online (Sandbox Code Playgroud)

一个问题可能是我的原型从一个命令生成所有三行输出,但真实的东西使用&&了几次.

Op *_*kel 5

cmp -s <( cmd1) <(cmd2) && cmp -s <( cmd1) <(cmd3)

请注意,此构造执行cmd1两次.

如果你需要每个cmd的单个exec,更复杂的行看起来像:

cmd1|tee >( cmp -s <(cmd2) )|cmp -s <(cmd3)

另外对于第二个,检查结果很复杂(你必须检查PIPESTATUS数组)

  • `cmd1 <(cmd2)`创建临时FIFO(命名管道)文件,并将cmd2的stdout放入FIFO中,FIFO文件为cmd1的arg (2认同)
  • 如果你要使用`cmp`那么你也应该安装`diff3`(都是_diffutils_的一部分),所以你可以这样做:`diff3 -A <(cmd1)<(cmd2)<(cmd3)&& echo "match'` (2认同)