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

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

私のウェブサイトに送信するためにcURLを使用しています。 cURLにタイムリーに投稿するよう依頼しました。

以下のコードでは、最初の行はカール送信用のもので、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の提出が失敗することがありました。

私が望むのは、最初の行が失敗した場合は2番目の行を実行しないことです。しかし、&&上記のコードを使用すると動作しません。私はテストしましたが、cURLの送信は失敗し、内容は印刷されましたが、sedut.html2行目はまだ実行されます。

答え1

curl何が失敗しているのか分かりません。入力が明確に定義されており、サーバーと通信して応答を返します200 OK。したがって、終了コードcurl(終了コード)に依存することはできません&&

代わりに、成功または失敗を決定するためになどの他のものを使用する必要がありますcurl

lsちなみに、一般的にスクリプトに使用することはお勧めできません。ここでファイルに改行文字や空白文字が含まれていると失敗します。可能性は低いですが可能です。バラよりhttp://mywiki.wooledge.org/ParsingLs詳細については。経験的に、私はls人の目に結果を表示するときにのみスクリプトでこれを使用します。私が使用する何らかの方法で結果を処理する場合find . -0 ...

答え2

&&||パススルー/失敗テストの場合)実行するコマンドと同じ論理行にする必要があります。行の連続&& \ および/または中括弧の使用 { }

メモ:指摘したとおりアンピタマシン、行連続の問題は、最新のsh互換シェルには適用されません

true && echo "true"

true && \
   echo "true"

true && \
{  echo "true"; echo "===="; }

(( 123 == 123 )) && {
   echo "true"
   echo "====" 
}

関連情報