bash - 是否有 Bash 单行代码来检查三个命令的输出是否匹配?

标签 bash

我正在尝试找出一些 Bash-foo 来检查三个不同命令的输出是否相同。我可以用几行 Bash 脚本来做到这一点,我只是想知道我想做的事情是否可以通过一些花哨的 shell I/O 重定向在一行中实现。

我想做的是检查 SSL 证书是否与特定 key 和证书签名请求匹配。

命令如下所示:

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

如果 key 、证书和 csr 匹配,所有这三个命令都应该输出相同的输出,例如:“(stdin)= 95ce143e8418cf8a4f7dd718983ed4eb”。

这是一个原型(prototype):

[[ $(echo -e "blah\nblah\nblah" | uniq | wc -l) -eq 1 ]]

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

[[ $(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 ]]

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

最佳答案

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

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

如果您需要每个 cmd 的单个 exec,则更复杂的行如下所示:

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

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

关于bash - 是否有 Bash 单行代码来检查三个命令的输出是否匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10906634/

相关文章:

bash - 如何在 Bash 中为 Azure 容器实例创建 tcp Socket liveness Probe 替代品?

php - 使用 sed 或 awk 将反引号替换为单引号

linux - 如何编写一个脚本来输出一个包含两个对应变量的表格?

mysql - 如何使用 MySQL Docker 镜像中的脚本执行查询?

linux - 使用 Bash 脚本将输入提供给命令行

bash - 使用两列比较三个文件并使用 awk/sed 在每个文件中打印唯一条目

bash - 如果 ">"在命令之后,为什么 bash 重定向会在 *before* 命令开始?

bash - 如何将docker尾入jq?

linux - 如何使用 cut linux bash 剪切最后一个字段?

linux - 如何创建脚本以将 sed 命令添加到文件中(bash 脚本)