cURLの合格/失敗テスト(最初の行が失敗した場合は2行目は実行されません)

cURLの合格/失敗テスト(最初の行が失敗した場合は2行目は実行されません)

~によると 「&&」の使用はcURLフォームの送信には影響しません。 (最初の行が失敗した場合、2番目の行は実行されません。)

以下のコードでは、最初の行はカール送信用のもので、2行目はキュー用です。

curl -b cookies.txt \
    -d title="$(sed '1,/sblmtitle/d;/slpstitle/,$d' sedut.html)" \
    -d taxonomy%5Btags%5D%5B1%5D="$(
        sed '1,/sblmkategori/d;/slpskategori/,$d' sedut.html
    )" \
    -d teaser_include=1 \
    -d body="$(sed '1,/sblmkonten/d;/slpskonten/,$d' sedut.html)" \
    -d field_source%5B0%5D%5Burl%5D="$(
        sed '1,/sblmurl/d;/slpsurl/,$d' sedut.html
    )" \
    -d changed= \
    -d form_build_id=form-424f851ad50bd4781c8c25ab7efd5c4c \
    -d form_token=0e7cc7437faf816f1ecd96087286bda9 \
    -d form_id=post_node_form \
    -d op=Save http://www.web.org/submit/post &&
for file in $(ls *.html | sort -r | tail -1); do
    mv $file sedut.html
done

送信が失敗すると、cURL内容が印刷されますsedut.html。送信が成功すると、cURL何も印刷されません。

しかし、提出が成功するか失敗するかは常にcURL与えられる。0

cURL「何も印刷されない場合は2行目を実行します」、「cURL何かが印刷された場合は2行目を実行しないこと」が最も良いワークフローだと思います。

私はLinuxコマンドを見ましたが、if例の状況が異なるため、実装方法はまだわかりません。

答え1

ここでコアを見つけました。カールの出力が異なる場合はテストできます。まずファイルに送信できます。次に、テストで-sオプションを利用できます。

-s file ファイルが存在し、サイズが 0 より大きい場合は真です。

以下はいくつかのサンプルコードです。

curl -b cookies.txt ... -o /tmp/curl_output
if [ -s /tmp/curl_output ]; then
  do failure stuff here
else
  do successful stuff here
fi

学術的な理由で別の実装:

if curl -b cookies.txt ... 2>&1 | grep 'some line from sedut.html' >/dev/null 2>&1; then 
  do failure stuff here
else
  do successful stuff here
fi

関連情報