O problema aqui é que você tem que esperar que os programas que você executa a partir do seu script terminem seus trabalhos.
Se no seu script você executa o programa em segundo plano, você pode tentar algo mais.
Em geral, uma chamada para sync
antes de sair permite liberar buffers do sistema de arquivos e pode ajudar um pouco.
Se no script você iniciar alguns programas em segundo plano ( &
), você pode esperar que eles terminem antes de sair do script. Para se ter uma ideia de como ele pode funcionar você pode ver abaixo
#!/bin/bash
program_1 &
PID_PROGRAM_1=${!}
program_2 &
wait ${!}
daemon_1 &
program_3 &
PID_PROGRAM_3=${!}
sync
wait $PID_PROGRAM_1
wait $PID_PROGRAM_3
Uma vez que wait
funciona com tarefas e também com PID
números, uma solução preguiçosa deve ser colocada no final do script
for job in `jobs -p`
do
wait $job
done
Mais difícil é a situação se você executar algo que executa outra coisa em segundo plano porque você tem que pesquisar e esperar (se for o caso) o fim de todo o processo filho : por exemplo, se você executar um daemon provavelmente não é o caso esperar termine :-).
Nota:
wait $ {!} significa "esperar até que o último processo em segundo plano seja concluído" onde $!
está o PID do último processo em segundo plano. Então, colocar wait ${!}
logo depois program_2 &
é equivalente a executar diretamente program_2
sem enviá-lo em segundo plano com&
Com a ajuda de wait
:
Syntax
wait [n ...]
Key
n A process ID or a job specification