Да, есть способ сделать это, но он далеко не очевиден, так как включает в себя 3 варианта скручивания:
curl -s --fail --show-error https://httpbin.org/status/200 > /dev/null
curl -s --fail --show-error https://httpbin.org/status/401 > /dev/null
curl -s --fail --show-error https://httpbin.org/status/404 > /dev/null
curl -s --fail --show-error https://bleah-some-wrong-host > /dev/null
Это гарантирует, что success (0) происходит только тогда, когда curl завершает работу с окончательным 2xx
кодом возврата, и это stdout
получает тело, и что любые ошибки будут отображаться в stderr.
Обратите внимание, что документация curl может вас немного смущать, поскольку в ней упоминается, что --fail может успешно завершиться для некоторых кодов 401. Основано на тестах, которые не соответствуют действительности, по крайней мере, при использовании с --show-error одновременно.
До сих пор я не смог найти ни одного случая, когда curl вернет успех, когда он не был http-success с этими опциями.