Script Bash não está esperando o wget concluir o download

2

Estou usando o seguinte script 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. Eu acredito que o problema é 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, aguardar a conclusão do download), o Cat criará um arquivo mesclado como eu esperava. Se eu copiar todas as seis linhas acima do script e colar o lote inteiro no mesmo prompt de comando, vejo o mesmo problema que o script está tendo.

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

EDITAR: 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
    
por XJDHDR 09.12.2015 / 19:14

1 resposta

3

O Bash está vendo os símbolos & na URL como um terminador do comando e executando-o como um processo em segundo plano. Se você digitar qualquer comando no bash e anexar um & a ele, ele será executado em segundo plano e retornará o controle para o script de chamada ou para o terminal imediatamente. Os campos entre eles estão sendo executados como comandos em si.

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

    
por 09.12.2015 / 19:22

Tags