Estos comandos wget y cURL funcionan en la línea de comandos pero no en un script Bash

Estos comandos wget y cURL funcionan en la línea de comandos pero no en un script Bash

Estoy intentando descargar imágenes de un sitio web y lo he intentado:

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

En todos los casos, el comando funciona cuando lo ejecuto normalmente en la terminal. Sin embargo, tan pronto como intento incorporarlo en algún script bash, la imagen se corrompe y aparece el siguiente mensaje:

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

La secuencia de comandos:

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

Respuesta1

Los dos números hexadecimales en

Not a JPEG file: starts with 0x48 0x54

traducir a ASCII HT, que supongo que continúa HTTP[...]. Verifique el encabezado del archivo con xxd -l 20 img.jpg. Este es el resultado esperado del último comando que publicó, ya que

wget --save-headers

indica wgetque se anteponga al resultado el HTTPencabezado de la respuesta.

Las otras dos invocaciones no harán eso.


Acabo de probar tu script y funciona con curlo wget. Para wgetdescargar el archivo, -Use necesita una cadena de usuario; de lo contrario, el servidor se niega. Cualquier uso

curl -o img.jpg $1

o

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

sin --save-headers.

información relacionada