![O script Bash não espera que o wget termine o download](https://rvso.com/image/1476421/O%20script%20Bash%20n%C3%A3o%20espera%20que%20o%20wget%20termine%20o%20download.png)
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.