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

翻譯成 ASCIIHT我想這會繼續HTTP[...]。使用 . 檢查文件頭xxd -l 20 img.jpg。這是您發布的最後一個命令的預期輸出,因為

wget --save-headers

指示wget在輸出前添加HTTP答案的標題。

其他兩個呼叫不會這樣做。


我剛剛測試了您的腳本,它適用於curlwget。要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

相關內容