カール要求が成功した後、Bash whileループが停止する

カール要求が成功した後、Bash whileループが停止する

私は現在bashスクリプトを書く方法を学んでいます。私のカールリクエストが200レスポンスコードを受け取ると、whileループをどのように停止しますか?

aws --endpoint-url http://s3.sample.com/ s3 cp hello.php s3://bucket/
while [ true ]
do
    curl http://sample.com/hello.php &> /dev/null
done

ベストアンサー1

受け入れられた回答提案された重複ターゲットcurlサーバーエラーが発生した場合は失敗し、終了22ステータスを返す方法を示します。これに基づいて、次のように書くことができます。

until curl -s -f -o /dev/null "http://example.com/foo.html"
do
  sleep 5
done

curl要求された転送が正常に完了するまで5秒待ってからもう一度やり直してください。」というメッセージが表示されます。応答に興味がないと仮定すると、エラーが発生したときにサーバーが-f失敗し、メッセージと進行状況インジケーターが印刷されないようにします。curl-s-o /dev/null

ただし、curl独自に再試行する機能にはシェルループは必要ありません。たとえば、10回再試行して再試行する前に5秒間休止状態にするには、次のようにします。

curl --retry 10 --retry-delay 5 -s -o /dev/null "http://example.com/foo.html"

または、一時的でないHTTPエラー(404など)でも再試行する場合:

curl --retry 10 -f --retry-all-errors --retry-delay 5 \
  -s -o /dev/null "http://example.com/foo.html"

curl代わりに、応答に特定のHTTPステータスが表示されるまで実行したい場合:

until [ \
  "$(curl -s -w '%{http_code}' -o /dev/null "http://example.com/foo.html")" \
  -eq 200 ]
do
  sleep 5
done

-w転送が完了すると、curlフォーマット文字列(ここ)で指定された情報が表示されることを示します。%{http_code}

おすすめ記事