使用 diff 和管道进行进程替换

使用 diff 和管道进行进程替换

当检查密钥和 crt 是否匹配时,我通常会比较模数的哈希值,如下所示:

openssl rsa -noout -modulus -in key.key | openssl md5
openssl x509 -noout -modulus -in crt.crt | openssl md5

这显然依赖于对两个哈希值的明显比较,但这并不理想。

我尝试使用 diff 和进程替换

diff <(openssl rsa -noout -modulus -in key.key | openssl md5) <(openssl x509 -noout -modulus -in crt.crt | openssl md5)

但似乎进程替换不适用于管道。等等,我不能将哈希值与另一个替换嵌套在一起吗?

diff <(openssl md5 <(openssl rsa -noout -modulus -in key.key)) <(openssl md5 <(openssl x509 -noout -modulus -in crt.crt))

它可以工作,但是 diff (或 comm)总是会检测到差异,因为比较的值是

MD5(/dev/fd/63)= 0bf775063be9c69057747c15bf723786 | MD5(/dev/fd/62)= 0bf775063be9c69057747c15bf723786

答案1

我不知道为什么我自己的答案被删除了,但解决方案是:

它与管道一起工作,正如 muru 所述,sudo 存在一些问题。

在没有 sudo 命令的情况下运行命令,但以 root 身份运行

答案2

因此 diff 不能像这样接受管道diff <<<"some st" <<<"some sy",但可以这样做,diff file <<<"some sy"所以这个函数会有所帮助

dubdiff(){
arg1="$(mktemp)"
arg2="$(mktemp)"
eval "$1" > "$arg1"
eval "$2" > "$arg2"
diff "$arg1" "$arg2"
rm "$arg1" "$arg2"
}

它将运行第一个命令并将其放入与最近的命令相同的文件中,然后对它们进行区分,然后运行dubdiff 'openssl rsa -noout -modulus -in key.key | openssl md5' 'openssl x509 -noout -modulus -in crt.crt | openssl md5'

相关内容