~によると 「&&」の使用は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