Эти команды 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

Два шестнадцатеричных числа в

Not a JPEG file: starts with 0x48 0x54

перевести в ASCII HT, который, как я полагаю, продолжает 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.

Связанный контент