![Bash-Skript wartet nicht, bis wget den Download abgeschlossen hat](https://rvso.com/image/1476421/Bash-Skript%20wartet%20nicht%2C%20bis%20wget%20den%20Download%20abgeschlossen%20hat.png)
Ich verwende das folgende Bash-Skript, um verschiedene GZIP-Archive zusammenzuführen:
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
Mein Problem ist, dass der Befehl „cat“ eine Datei „blocklist.p2p.gz“ erstellt, die nichts enthält. Ich glaube, das Problem wird dadurch verursacht, dass Bash nicht wartet, bis wget den Download abgeschlossen hat.
Ich glaube das, weil Cat, wenn ich jede Zeile einzeln in die Eingabeaufforderung kopiere und einfüge (und persönlich warte, bis der Download abgeschlossen ist), wie erwartet ein zusammengeführtes Archiv erstellt. Wenn ich alle sechs Zeilen oben aus dem Skript kopiere und dann alles in dieselbe Eingabeaufforderung einfüge, sehe ich dasselbe Problem, das das Skript hat.
Gibt es also eine Möglichkeit, Bash warten zu lassen, bis wget fertig ist? Soll Bash standardmäßig warten und irgendetwas führt dazu, dass dies nicht geschieht? Ich wäre für eine Lösung sehr dankbar.
BEARBEITEN: Gemäß den Kommentaren unten ist das richtige zu verwendende Skript:
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
Antwort1
Bash betrachtet die &
Symbole in der URL als Abschlusszeichen des Befehls und führt ihn als Hintergrundprozess aus. Wenn Sie in Bash einen beliebigen Befehl eingeben und ein anhängen &
, wird dieser im Hintergrund ausgeführt und die Kontrolle sofort an das aufrufende Skript oder das Terminal zurückgegeben. Die Felder dazwischen werden selbst als Befehle ausgeführt.
Um zu verhindern, dass Bash die URL auf diese Weise interpretiert, schließen Sie das Ganze in Anführungszeichen ein. Dadurch wird die gesamte URL als String-Parameter übergeben und als Vordergrundprozess ausgeführt.