Bash 腳本不等待 wget 完成下載

Bash 腳本不等待 wget 完成下載

我使用以下 bash 腳本將各種 gzip 檔案合併在一起:

wget -O bluelvl1.gz http://list.iblocklist.com/?list=ydxerpxkpcfqjaybcssw&fileformat=p2p&archiveformat=gz
wget -O bluelvl2.gz http://list.iblocklist.com/?list=gyisgnzbhppbvsphucsw&fileformat=p2p&archiveformat=gz
wget -O badpeer.gz http://list.iblocklist.com/?list=cwworuawihqvocglcoss&fileformat=p2p&archiveformat=gz
wget -O microsoft.gz http://list.iblocklist.com/?list=xshktygkujudfnjfioro&fileformat=p2p&archiveformat=gz
wget -O unallocated.gz http://list.iblocklist.com/?list=gihxqmhyunbxhbmgqrla&fileformat=p2p&archiveformat=gz
cat bluelvl1.gz bluelvl2.gz badpeer.gz microsoft.gz unallocated.gz > blocklist.p2p.gz

我遇到的問題是“cat”命令正在創建“blocklist.p2p.gz”,其中沒有任何內容。我認為問題是由 Bash 沒有等待 wget 完成下載引起的。

我相信這一點,因為如果我一次將每一行複製並貼上到命令提示字元(並親自等待下載完成),Cat 就會按照我的預期創建一個合併的存檔。如果我從腳本複製上面的所有六行,然後將全部內容貼到同一命令提示字元中,我會看到腳本遇到的相同問題。

那麼有沒有辦法讓 Bash 等待 wget 完成呢? Bash 是否應該默認等待,但有什麼原因導致這種情況不發生?我將非常感謝一個解決方案。

編輯:根據下面的評論,要使用的正確腳本是:

wget -O bluelvl1.gz "http://list.iblocklist.com/?list=ydxerpxkpcfqjaybcssw&fileformat=p2p&archiveformat=gz"
wget -O bluelvl2.gz "http://list.iblocklist.com/?list=gyisgnzbhppbvsphucsw&fileformat=p2p&archiveformat=gz"
wget -O badpeer.gz "http://list.iblocklist.com/?list=cwworuawihqvocglcoss&fileformat=p2p&archiveformat=gz"
wget -O microsoft.gz "http://list.iblocklist.com/?list=xshktygkujudfnjfioro&fileformat=p2p&archiveformat=gz"
wget -O unallocated.gz "http://list.iblocklist.com/?list=gihxqmhyunbxhbmgqrla&fileformat=p2p&archiveformat=gz"
cat bluelvl1.gz bluelvl2.gz badpeer.gz microsoft.gz unallocated.gz > blocklist.p2p.gz

答案1

Bash 將&URL 中的符號視為指令的終止符,並將其作為後台程序執行。如果您在 bash 中輸入任何命令並向&其附加 a,它將在後台運行該命令並立即將控制權傳回給呼叫腳本或終端。它們之間的字段本身作為命令執行。

為了防止 bash 以這種方式解釋 URL,請將整個內容用引號引起來。這將使其將整個 URL 作為字串參數傳遞,並且它將作為前台進程運行。

相關內容