这些 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

相关内容