created: 2022-11-15T02:03:51.999Z

curl でリクエストに失敗(2xx以外)した場合にエラー処理をするためのオプション

LINEのメッセージAPIを叩くbashスクリプトを作ってるときに調べたメモ。

readonly body=$(mktemp)
readonly curl_error=$(mktemp)

set +e
curl -X POST https://api.line.me/v2/bot/message/push \
    --silent \
    --show-error \
    --fail \
    -H 'Content-Type: application/json' \
    -H "Authorization: Bearer $TOKEN" \
    -d @"$body" > $curl_error 2>&1

if [ "$?" != "0" ]; then
    die "[ERROR]\tsakamonotify.sh failed\tmessage:$message\tcurl_error:'$(cat $curl_error)'\tbody:'$(cat $body)'"
fi
  • --fail
    • 2xx 以外のステータスコードの場合にコマンドの終了ステータスを失敗にする
    • 後続の処理で "$?" != "0" のように成否をチェックできるように
  • --silent
    • curl がデフォルトで表示する進捗状況や通信速度を表示しないためのオプション
  • --show-error
    • --silent オプションがついているときでも、エラー時にはメッセージを表示したいときのためのオプション
  • set +e
    • curl の実行に失敗しても、その時点で処理を終了させないための宣言
    • もともとスクリプト自体を set -e して実行していたため必要だった

通知のためのスクリプトが失敗していると結構辛いので、ちょっと丁寧めの実装。

参考