wait$!
é um erro de sintaxe, você está perdendo um espaço. Isso não tem nenhum impacto aqui porque você nunca inicia uma tarefa em segundo plano, então $!
permanece vazio e o comando é wait
sem argumento, que aguarda todos os trabalhos em segundo plano - e como não há nenhum, ele retorna imediatamente.
Há uma diferença entre usar wget --background …
e wget … &
. O primeiro comando diz wget
para bifurcar um processo filho e, em seguida, sair:
(bash)
fork ——————————————→
wait exec wget --background …
⋮
⋮ fork ———————————————————————→
←—————————————— exit download
(next script line) ⋮
Quando o pai wget
process (que é um primeiro plano) retorna, bash retoma a execução do processo. Com wget … &
, o shell cria um processo em segundo plano:
(bash)
fork ——————————————————→
(next script line) exec wget --background …
download
⋮
Nesse caso, você pode aguardar o processo do wget sair:
wget … &
wait $!
No entanto, isso é inútil: iniciar um trabalho em segundo plano apenas para esperar é equivalente a iniciar um trabalho em primeiro plano.
wget …