Bash スクリプトが wget のダウンロードの完了を待機しない

Bash スクリプトが wget のダウンロードの完了を待機しない

さまざまな gzip アーカイブを結合するために、次の 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

私が抱えている問題は、「cat」コマンドが何も入っていない「blocklist.p2p.gz」を作成していることです。この問題は、Bash が wget のダウンロードの完了を待たないことが原因であると考えています。

私がそう思うのは、各行をコマンド プロンプトに 1 行ずつコピーして貼り付けると (個人的にはダウンロードが完了するまで待ちます)、Cat は期待どおりにマージされたアーカイブを作成するからです。スクリプトから上記の 6 行すべてをコピーして、全体を同じコマンド プロンプトに貼り付けると、スクリプトで発生しているのと同じ問題が発生します。

では、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 全体が文字列パラメータとして渡され、フォアグラウンド プロセスとして実行されます。

関連情報