이러한 wget 및 cURL 명령은 명령줄에서는 작동하지만 Bash 스크립트에서는 작동하지 않습니다.

이러한 wget 및 cURL 명령은 명령줄에서는 작동하지만 Bash 스크립트에서는 작동하지 않습니다.

웹사이트에서 이미지를 다운로드하려고 하며 다음을 시도했습니다.

curl -o img.jpg (URL)
wget (URL) -O img.jpg
wget --save-headers -U "Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.17  (KHTML,   Gecko) Ubuntu/11.04 Chromium/11.0.654.0 Chrome/11.0.654.0  Safari/534.17" (URL) -O img.jpg

모든 경우에 명령은 터미널에서 정상적으로 실행하면 작동합니다. 그러나 이를 일부 bash 스크립트에 통합하려고 하면 이미지가 다음 메시지와 함께 손상됩니다.

Error interpreting JPEG image file (Not a JPEG file: starts with 0x48 0x54).

스크립트:

#!/bin/bash
#I pass the url as a parameter - http://img1.goodfon.su/wallpaper/original/f/c3/les-eli-lokomotiv-noch-sneg.jpg

#wget --save-headers -k -U "Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.17  (KHTML,   Gecko) Ubuntu/11.04 Chromium/11.0.654.0 Chrome/11.0.654.0  Safari/534.17" $1 -O img.jpg
#curl -o img.jpg $1
wget $1 -O img.jpg

avconv -framerate 25 -f image2 -i img.jpg -c:v h264 -crf 1 out.mov

답변1

2개의 16진수

Not a JPEG file: starts with 0x48 0x54

HT계속해서 ASCII로 변환됩니다 HTTP[...]. 으로 파일 헤더를 확인하세요 xxd -l 20 img.jpg. 이것은 게시한 마지막 명령의 예상 출력입니다.

wget --save-headers

답변 헤더를 wget출력 앞에 추가하도록 지시합니다 .HTTP

다른 두 호출에서는 그렇게 하지 않습니다.


방금 스크립트를 테스트했는데 curl또는 wget. wget파일을 다운로드하려면 사용자 문자열이 필요 -U하며 그렇지 않으면 서버가 거부합니다. 사용하거나

curl -o img.jpg $1

또는

wget -U "Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.17  (KHTML,   Gecko) Ubuntu/11.04 Chromium/11.0.654.0 Chrome/11.0.654.0  Safari/534.17" $1 -O img.jpg

없이 --save-headers.

관련 정보