サーバエラーが帰ってきても、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 は任意のステータスコードを返してくれるサービス
ステータスコード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
そのとおりになった