我有以下 bash 脚本,用于检查 Apache 中是否存在给定的 SSL 客户端证书。
#!/bin/bash
cert=$1
echo | openssl s_client -connect localhost:443 | grep -q $cert > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo $cert "client cert already exist"
else
#Create a new client cert in Apache
fi
即使我将 openssl 命令的 stdout 和 stderr 发送到/dev/null,该命令仍然向控制台显示以下错误!
深度=3 C = OM,O = ORG,OU = 用于暂存,CN = ROOT CA - 1 验证错误:num=19:证书链中的自签名证书验证返回:0/C=om/O=o/CN=MY_CERT 完成
最佳答案
问题是,您实际上并未将 openssl
的 stderr 发送到 /dev/null
,而是发送 grep
的。
要将 openssl
的 stderr 发送到 /dev/null
,您需要将重定向放入与 openssl
管道相同的部分> 调用。当您使用 grep -q
时,您不需要在 grep
上进行任何 I/O 重定向。
这应该做到:
echo | openssl s_client -connect localhost:443 2>/dev/null | grep -q $cert
关于bash - 如何将openssl s_client -connect stdout和stderr发送到/dev/null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47177866/