Esses comandos wget e cURL funcionam na linha de comando, mas não em um script Bash

Esses comandos wget e cURL funcionam na linha de comando, mas não em um script Bash

Estou tentando baixar imagens de um site e tentei:

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

Em todos os casos o comando funciona quando eu o executo normalmente no terminal. Porém, assim que tento incorporá-lo em algum script bash a imagem é corrompida com a seguinte mensagem:

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

O roteiro:

#!/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

Responder1

Os dois números hexadecimais em

Not a JPEG file: starts with 0x48 0x54

traduzir para ASCII HT, que eu acho que continua HTTP[...]. Verifique o cabeçalho do arquivo com xxd -l 20 img.jpg. Esta é a saída esperada do último comando que você postou, já que

wget --save-headers

instrui wgeta preceder a saída com o HTTPcabeçalho da resposta.

As outras duas invocações não farão isso.


Acabei de testar seu script e ele funciona com curlou wget. Para wgetbaixar o arquivo -Ué necessária uma string de usuário, caso contrário o servidor recusa. Ou use

curl -o img.jpg $1

ou

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

sem --save-headers.

informação relacionada