컬을 사용하여 실행해야 하는 URL이 있습니다. 상태가 200이면 응답이 임시 파일에 기록됩니다. 이제 이 임시 파일을 다른 파일과 비교해 보세요 ("/opt/proc/config/init.txt")
. 임시 파일이 다른 경우 init.txt
내용은 해당 임시 파일로 대체됩니다. 그러나 상태가 200이 아닌 경우 0이 아닌 상태 코드로 종료되고 메시지가 표시됩니다.
아래는 내가 얻은 것입니다. 이를 수행하는 더 좋고 효율적인 방법이 있습니까? 가능하다면 이 모든 작업을 한 줄로 수행할 수 있습니까?
URL="some_url"
# store the whole response with the status at the and
response=$(curl --silent --write-out "HTTPSTATUS:%{http_code}" -X POST $URL)
# extract the body
new=$(echo $response | sed -e 's/HTTPSTATUS\:.*//g')
# extract the status
status=$(echo $response | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
# print the body
echo "$new"
echo $new > /opt/proc/config/temp.txt
if [ $status -eq 200 ]; then
if ! cmp /opt/proc/config/init.txt /opt/proc/config/temp.txt > /dev/null 2>&1
then
echo different
mv /opt/proc/config/temp.txt /opt/proc/config/init.txt
else
echo same
fi
else
echo "Error [HTTP status: $status]"
rm /opt/proc/config/temp.txt
exit 1
fi
답변1
파일을 비교 하는 데 무엇을 사용할지 잘 모르겠습니다 cmp
. 어쩌면 각 파일의 md5 또는 sha1 지문을 생성하고 지문을 비교할 수도 있습니다. 두 파일이 다른 오프셋이나 줄 번호 같은 세부 사항은 신경 쓰지 않기 때문에 두 파일이 정확히 동일한지 여부만 알고 싶을 것입니다. 그럼에도 불구하고 파일이 매우 크지 않으면 여기서 성능 문제에 대해 걱정하지 않습니다.
왜 단순히 사용하지 않는가?-o, --output 옵션다운로드한 파일을 디스크에 쓰시겠습니까?
또는 다른 방법을 사용하여 응답 헤더를 구문 분석하는 대신 sed
다음을 사용하십시오.컬 변수즉, 사용 가능합니다 %{response_code}
.