El script Bash no espera a que wget finalice la descarga

El script Bash no espera a que wget finalice la descarga

Estoy usando el siguiente script bash para fusionar varios archivos 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

El problema que tengo es que el comando "cat" está creando "blocklist.p2p.gz" sin nada dentro. Creo que el problema se debe a que Bash no espera a que wget complete la descarga.

Creo esto porque si copio y pego cada línea en el símbolo del sistema una a la vez (y personalmente espero a que finalice la descarga), Cat crea un archivo combinado como esperaba. Si copio las seis líneas anteriores del script y luego lo pego todo en el mismo símbolo del sistema, veo el mismo problema que tiene el script.

Entonces, ¿hay alguna manera de hacer que Bash espere a que finalice wget? ¿Se supone que Bash debe esperar de forma predeterminada y algo está provocando que esto no ocurra? Agradecería mucho una solución.

EDITAR: Según los comentarios a continuación, el script correcto a utilizar es:

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

Respuesta1

Bash ve los &símbolos en la URL como un terminador del comando y lo ejecuta como un proceso en segundo plano. Si ingresa cualquier comando en bash y &le agrega un, lo ejecutará en segundo plano y devolverá el control al script de llamada o al terminal inmediatamente. Los campos entre ellos se ejecutan como comandos en sí.

Para evitar que bash interprete la URL de esta manera, incluya todo entre comillas. Esto hará que pase la URL completa como un parámetro de cadena y se ejecutará como un proceso en primer plano.

información relacionada