O script Bash não espera que o wget termine o download

O script Bash não espera que o wget termine o download

Estou usando o seguinte script bash para mesclar vários arquivos 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

O problema que estou tendo é que o comando “cat” está criando “blocklist.p2p.gz” sem nada nele. Acredito que o problema seja causado pelo Bash não esperar que o wget conclua o download.

Acredito nisso porque se eu copiar e colar cada linha no prompt de comando, uma de cada vez (e pessoalmente esperar o download terminar), Cat criará um arquivo mesclado como eu esperava. Se eu copiar todas as seis linhas acima do script e colar tudo no mesmo prompt de comando, vejo o mesmo problema que o script está tendo.

Então, existe uma maneira de fazer o Bash esperar que o wget termine? O Bash deveria esperar por padrão e algo está fazendo com que isso não ocorra? Eu apreciaria muito uma solução.

EDIT: De acordo com os comentários abaixo, o script correto a ser usado é:

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

Responder1

Bash vê os &símbolos na URL como um terminador do comando e o executa como um processo em segundo plano. Se você inserir qualquer comando no bash e anexar um &a ele, ele será executado em segundo plano e retornará o controle ao script de chamada ou ao terminal imediatamente. Os campos entre eles estão sendo executados como comandos propriamente ditos.

Para evitar que o bash interprete a URL dessa maneira, coloque tudo entre aspas. Isso fará com que ele passe todo o URL como um parâmetro de string e será executado como um processo em primeiro plano.

informação relacionada