"&&" 사용은 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 제출이 실패하는 경우가 있었습니다.

내가 원하는 것은 첫 번째 줄이 실패하면 두 번째 줄을 실행하지 않는 것입니다. 그러나 &&위의 코드를 사용하면 작동하지 않습니다. 테스트했는데 cURL 제출이 실패하고 sedut.html내용이 인쇄되었지만 두 번째 줄은 여전히 ​​실행됩니다.

답변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 "====" 
}

관련 정보