El problema que se acaba de ver aquí es que tienes que esperar a que los programas que ejecutas desde tu script terminen su trabajo.
Si en su secuencia de comandos ejecuta el programa en segundo plano , puede intentar algo más.
En general, una llamada a sync
antes de salir permite vaciar los búferes del sistema de archivos y puede ayudar un poco.
Si en el script inicia algunos programas en segundo plano ( &
), puede esperar a que terminen antes de salir del script. Para tener una idea de cómo puede funcionar, puede ver a continuación.
#!/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
Dado que wait
funciona tanto con trabajos como con PID
números, una solución perezosa debería ser poner al final del script
for job in `jobs -p`
do
wait $job
done
Más difícil es la situación si ejecuta algo que ejecuta otra cosa en segundo plano porque tiene que buscar y esperar (si es el caso) el final de todo el proceso hijo : por ejemplo, si ejecuta un demonio, probablemente no sea el caso esperar que termine :-).
Nota:
esperar $ {!} significa "esperar hasta que se complete el último proceso en segundo plano" donde $!
está el PID del último proceso en segundo plano. Así que ponerwait ${!}
justo después program_2 &
es equivalente a ejecutar directamente program_2
sin enviarlo en segundo plano con&
Con la ayuda de wait
:
Syntax
wait [n ...]
Key
n A process ID or a job specification