curlは-fオプションをつけないとサーバエラーでも戻り値は0になる

サーバエラーが帰ってきても、curlの戻り値は0

$ curl -Is http://ozuma.sakura.ne.jp/httpstatus/500

HTTP/1.1 500 Internal Server Error
Server: nginx
Date: Tue, 04 Feb 2020 00:51:35 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
$ echo $?                                          
0

ozuma.sakura.ne.jp/httpstatus は任意のステータスコードを返してくれるサービス

ozuma.hatenablog.jp

ステータスコード200以外の時に、戻り値を0以外にしたい場合は、 -f オプションをつける

man curlより

-f, --fail
(HTTP) Fail silently (no output at all) on server errors. This is mostly done to better enable scripts etc to better deal with failed attempts. In normal cases when an HTTP server fails to  deliver  a document, it returns an HTML document stating so (which often also describes why and more). This flag will prevent curl from outputting that and return error 22.

This method is not fail-safe and there are occasions where non-successful response codes will slip through, especially when authentication is involved (response codes 401 and 407).
  • -f オプションをつけると、サーバエラーの場合戻り値は 22 にになり、標準出力になにも返さなくなる
  • ただし、 401や407のような認証系のエラーの場合、うまく動作しない場合がある とのこと

試してみる

$ curl -fs http://ozuma.sakura.ne.jp/httpstatus/500
$ echo $?                                          
22

そのとおりになった