【发布时间】:2019-06-13 02:58:58
【问题描述】:
尝试创建一个函数来检查网页上的 SSL 是否存在问题。在特定场景中,我们为 curl https://domain 设置了预期输出包括:
curl: (60) SSL certificate problem: self signed certificate
...我们正在使用 grep,按照下面的行将 SSL_STATUS 变量设置为该行,然后我们将通过 if 语句进行泵送。问题是它设置了变量,然后无缘无故退出了脚本:
+ https_status
++ curl https://steelrain.eu
++ grep 'SSL certificate problem'
+ SSL_STATUS='curl: (60) SSL certificate problem: self signed certificate'
经测试,这不是grep的结果,而是curl,我不知道为什么(使用SSL_STATUS=$( curl https://${DOMAIN}时仍然发生)这是基础)。
我可能只是不明白这里的某些东西是如何工作的,因为我很厚,但我们将不胜感激。
SSL_STATUS=$( curl https://${DOMAIN} 2>&1 | grep "SSL certificate problem" )
之前可能应该提到过,但是将函数设置为仅运行 curl 命令也会将其从脚本中删除,因此它不会将输出设置为导致问题的变量。
【问题讨论】:
-
您的脚本中是否有
set -e?如果任何命令返回非零退出代码(如出现证书问题时 curl 所做的那样),它将停止您的脚本。 -
非常感谢。一位同事建议使用 set -euox pipefail 进行调试,这让整个事情都崩溃了。很高兴我花了几个小时重写函数的原因:) 再次感谢伙计
标签: bash function variables curl