You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本执行curl检测SSL时异常退出问题求助

解决脚本执行curl时无故退出的问题

我猜你的脚本大概率开启了set -e选项(或者继承了这个设置)——这个选项会让脚本在任何命令返回非零退出码时直接终止执行。而curl遇到SSL证书问题时(比如自签名证书),返回的退出码是60,属于非零值,所以触发了脚本自动退出。

这里有几个可行的解决方案,你可以根据需求选择:

方案1:让curl命令强制返回成功状态

如果你只关心是否能匹配到SSL错误字符串,不需要保留curl的原始退出码,可以在命令末尾加上|| true,让这条命令无论如何都返回0,避免脚本退出:

SSL_STATUS=$( curl https://${DOMAIN} 2>&1 | grep "SSL certificate problem" || true )

或者如果脚本里有set -e,也可以临时关闭它再恢复:

# 临时关闭set -e
set +e
SSL_STATUS=$( curl https://${DOMAIN} 2>&1 | grep "SSL certificate problem" )
# 恢复set -e
set -e

方案2:保留curl退出码,同时不终止脚本

如果你需要后续根据curl的实际状态做判断,可以先捕获curl的退出码,再处理输出:

# 先捕获curl的全部输出
RAW_OUTPUT=$(curl https://${DOMAIN} 2>&1)
# 保存curl的退出码
CURL_EXIT=$?

# 再从输出中匹配SSL错误
SSL_STATUS=$(echo "${RAW_OUTPUT}" | grep "SSL certificate problem")

# 后续可以结合退出码和匹配结果判断
if [[ ${CURL_EXIT} -eq 60 && -n ${SSL_STATUS} ]]; then
    echo "检测到SSL证书问题:${SSL_STATUS}"
elif [[ ${CURL_EXIT} -ne 0 ]]; then
    echo "curl执行失败,但不是SSL证书问题"
else
    echo "SSL证书正常"
fi

方案3:更可靠的SSL证书检测方式

其实不用依赖curl的输出文本,我们可以用更直接的工具来检测SSL证书状态,比如openssl s_client,它专门用于SSL连接检测,输出也更稳定:

# 检测是否是自签名证书
if openssl s_client -connect "${DOMAIN}:443" -servername "${DOMAIN}" < /dev/null 2>&1 | grep -q "self signed certificate"; then
    echo "发现自签名SSL证书问题"
fi

这种方式不需要担心curl的退出码导致脚本退出,而且能更精准地定位证书类型问题。

内容的提问来源于stack exchange,提问作者Snakelegs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:05:02