![컬과 같은 명령이 오류 없이 완료되었는지 확인하는 방법은 무엇입니까?](https://linux55.com/image/53137/%EC%BB%AC%EA%B3%BC%20%EA%B0%99%EC%9D%80%20%EB%AA%85%EB%A0%B9%EC%9D%B4%20%EC%98%A4%EB%A5%98%20%EC%97%86%EC%9D%B4%20%EC%99%84%EB%A3%8C%EB%90%98%EC%97%88%EB%8A%94%EC%A7%80%20%ED%99%95%EC%9D%B8%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
컬을 사용하여 HTTP 포스트를 통해 서버에 파일을 업로드하고 있습니다.
curl -X POST [email protected] server-URL
명령줄에서 이 명령을 수동으로 실행하면 서버로부터 응답을 받습니다(예: ) "Upload successful"
. 그러나 스크립트를 통해 이 컬 명령을 실행하려는 경우 POST 요청이 성공했는지 어떻게 알 수 있습니까?
답변1
curl's --fail
옵션을 사용할 수도 있지만 먼저 테스트해야 합니다.
man curl
-f, --fail (HTTP) 서버 오류 시 자동으로 실패합니다(출력 없음). 이는 실패한 시도를 더 잘 처리하기 위해 스크립트 등을 더 잘 활성화하기 위해 주로 수행됩니다. 일반적인 상황에서 HTTP 서버가 문서를 전달할 수 없으면 상황을 설명하는 HTML 문서를 반환합니다(일반적으로 이유와 추가 정보도 설명). 이 플래그는 컬이 이 정보를 출력하지 못하게 하고 오류 22를 반환합니다.
This method is not fail-safe and there are occasions where non- successful response codes will slip through, especially when authentication is involved (response codes 401 and 407).
그래서 당신은 이것을 할 수 있습니다 :
args="-X POST [email protected] server-URL"
curl -f $args && echo "SUCCESS!" ||
echo "OH NO!"
답변2
가장 간단한 방법은 응답을 저장하고 비교하는 것입니다.
$ response=$(curl -X POST [email protected] server-URL);
$ if [ "Upload successful" == "${response}" ]; then … fi;
아직 테스트하지 않았습니다. 구문이 틀렸을 수도 있지만 그게 아이디어입니다. 컬의 종료 코드를 확인하는 것과 같은 더 정교한 방법이 있을 것이라고 확신합니다.
고쳐 쓰다
curl
꽤 많은 종료 코드를 반환합니다. 실패한 게시물로 인해 55 Failed sending network data.
()와 비교하여 종료 코드가 0인지 확인할 수 있다고 추측합니다.$?
Expands to the exit status of the most recently executed foreground pipeline.
$ curl -X POST [email protected] server-URL;
$ if [ 0 -eq $? ]; then … fi;
또는 명령이 상대적으로 짧고 실패할 경우 작업을 수행하려는 경우 조건문의 조건부로 종료 코드를 사용할 수 있습니다.
$ if curl --fail -X POST [email protected] server-URL; then
# …(success)
else
# …(failure)
fi;
내 생각엔 이 형식이일반적으로 선호, 그러나 개인적으로 읽기가 쉽지 않다고 생각합니다.