如何在Bash脚本中屏蔽curl输出,仅保留自定义连接结果提示?
调整curl连接检查脚本的方案
原脚本的问题在于:-vv参数会强制输出调试信息到标准错误流(stderr),而-s仅能抑制标准输出(stdout)的进度提示等内容,无法屏蔽-vv产生的stderr输出,导致出现多余内容。同时依赖grep匹配状态行的方式不够可靠,以下是两种优化方案:
方案一:直接获取HTTP状态码(推荐,更可靠高效)
通过curl的-w参数直接提取HTTP状态码,同时彻底屏蔽所有不必要的输出:
http_status=$(curl -s -o /dev/null -w "%{http_code}" https://github.com) if [[ "$http_status" -eq 200 ]]; then echo "Cnxn successful" else echo "Cnxn failed" fi
参数说明:
-s:静默模式,抑制进度条等冗余输出-o /dev/null:将响应正文丢弃,不输出到stdout-w "%{http_code}":指定仅输出HTTP状态码到stdout- 此方案不依赖协议版本(如HTTP/1.1或HTTP/2),判断逻辑更可靠
方案二:保留类似原逻辑(屏蔽多余输出)
如果坚持使用匹配状态行的方式,需要移除-vv并将stderr重定向到/dev/null:
check=$(curl -s -I https://github.com 2>/dev/null | grep "HTTP/2 200") if [[ -z "$check" ]]; then echo "Cnxn failed" else echo "Cnxn successful" fi
参数说明:
- 移除
-vv:避免产生调试信息输出到stderr 2>/dev/null:将所有标准错误流内容丢弃,彻底屏蔽多余输出-s:抑制stdout的进度提示等内容
内容的提问来源于stack exchange,提问作者Diego-S
相关产品推荐
相关产品推荐

