我想要一些 curl 命令,可能还需要一些 bash hackery,这样:
- 将任何 2xx 响应输出到文件
- 将任何非 2xx 响应输出至 stderr
- 当发生非 2xx 响应时,以非零状态代码退出
我知道-f
标志会让我获得 3,而-o
管道重定向会让我获得 1。但我不知道如何获得 2。
答案1
您能否将 curl 的输出回显到临时文件中(将 PID 作为名称的一部分)。在后台设置一个长时间的计时器(5 分钟以上删除文件)。然后对文件运行 sed 命令 #1,然后对文件运行 sed 命令 #2,然后对 STDerror 运行 sed 命令。第二个命令可以使用 q 命令返回非零答案。查看此处了解 sed 中 q 命令的用法。 https://stackoverflow.com/questions/15965073/return-code-of-sed-for-no-match
答案2
这就是我最终做的事情:
HTTP_CODE=`curl http://example.com/ \
--verbose \
--write-out "%{http_code}" \
--output my-output-file`
if [ "$HTTP_CODE" != "200" ]; then
cat my-output-file
rm my-output-file
fi