回答:
最も簡単な方法は、応答を保存して比較することです。
$ response=$(curl -X POST -d@myfile.txt server-URL);
$ if [ "Upload successful" == "${response}" ]; then … fi;
私はそれをテストしていません。構文はオフになっているかもしれませんが、それがアイデアです。curlの終了コードなどをチェックするなど、もっと洗練された方法があるはずです。
curl
かなりの数の終了コードを返します。失敗した投稿は結果になる可能性があると推測し55 Failed sending network data.
ているので、おそらく$?
(Expands to the exit status of the most recently executed foreground pipeline.
)と比較して、終了コードがゼロであることを確認できます:
$ curl -X POST -d@myfile.txt server-URL;
$ if [ 0 -eq $? ]; then … fi;
または、コマンドが比較的短く、失敗したときに何かをしたい場合は、条件ステートメントの条件として終了コードを使用できます。
$ if curl --fail -X POST -d@myfile.txt server-URL; then
# …(success)
else
# …(failure)
fi;
curl's --fail
オプションを使用できる場合がありますが、最初に一度テストする必要があります。
man curl
-f、-fail(HTTP)サーバーエラーでサイレントに失敗します(まったく出力しません)。これは主に、スクリプトなどを有効にして失敗した試行をよりうまく処理するために行われます。通常、HTTPサーバーがドキュメントの配信に失敗すると、その旨を示すHTMLドキュメントが返されます(多くの場合、理由も説明されています)。このフラグはcurlがそれを出力するのを防ぎ、エラー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).
このようにして、次のことができます。
args="-X POST -d@myfile.txt server-URL"
curl -f $args && echo "SUCCESS!" ||
echo "OH NO!"