cURL 的成功/失败测试(如果第一行失败,则不执行第二行)

cURL 的成功/失败测试(如果第一行失败,则不执行第二行)

根据 使用“&&”对于 cURL 提交表单无效(如果第一行失败,则不执行第二行)

在下面的代码中;第一行是curl提交;第二行用于排队:

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不打印任何内容,则运行第二行”和“如果cURL打印某些内容,则不要运行第二行”

我刚刚查看了 linuxif命令,但仍然不知道如何实现它,因为示例有不同的情况。

答案1

所以你在这里找到了关键,如果curl的输出不同那么你可以测试它。首先,您可以将其定向到一个文件。接下来,您可以利用测试中的 -s 选项:

-s file 如果文件存在且大小大于零,则为真。

这是一些示例代码:

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

相关内容