El uso de "&&" no es efectivo para el formulario de envío de cURL (no ejecute la segunda línea si falla la primera línea)

Me estoy enviando a mi website usando cURL. Hago que cURL lo publique a time.

En el siguiente código; la primera línea es curl submit; segunda línea es para hacer queue:

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 

Si cURL no puede enviar, imprimirá los contenidos de sedut.html . Si la presentación es exitosa, no se imprimirá nada. En mi caso, alguna vez cURL no puede enviar.

Lo que quiero es no ejecutar la segunda línea si falla la primera línea. Pero usar && como los códigos anteriores simplemente no funciona. Lo probé, cURL submit falla e imprime los contenidos de sedut.html , pero la segunda línea todavía se ejecuta.

Related of "El uso de "&&" no es efectivo para el formulario de envío de cURL (no ejecute la segunda línea si falla la primera línea)"

curl no tiene idea de que falló, tenía una input bien definida, se comunicó con el server y obtuvo una respuesta de 200 OK . Debido a esto, no puede confiar en el código de salida de curl (que es lo que hace && ).

En cambio, tenemos que usar algo más para determinar el éxito o el fracaso, como la salida generada por curl .

Como nota al margen, generalmente no es una buena idea usar ls en un script. Aquí, fallará si un file tiene una nueva línea o un carácter de espacio. Puede ser poco probable, pero es posible. Ver http://mywiki.wooledge.org/ParsingLs para más detalles. Como regla general, solo uso ls en scripts cuando visualizo los resultados para ojos humanos. Si estoy procesando los resultados de alguna manera, uso find . -0 ... find . -0 ...

&& y || (como una testing de éxito / falla) debe estar en la misma línea lógica que los commands que desea ejecutar. Use una continuación de línea && \ y / o llaves { }

Nota: Como se señala por la anfetamaquina , el problema de continuación de la línea no se aplica a las conchas modernas compatibles con sh

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