Como acaba de manchar here el problema es que usted tiene que esperar que los programas que se ejecutan desde el script terminan su trabajos.
Si en su secuencia de comandos ejecuta el programa en fondo puede intentar algo más.
En general, una llamada al sync
antes de salir permite vaciar los búferes del sistema de archivos y puede ayudar un poco.
Si en la secuencia de comandos se inician algunos programas en fondo (&
), puede wait que terminar antes de que salga de la secuencia de comandos. Para tener una idea acerca de cómo puede funcionar se puede ver a continuación
#!/bin/bash
#... some stuffs ...
program_1 & # here you start a program 1 in background
PID_PROGRAM_1=${!} # here you remember its PID
#... some other stuffs ...
program_2 & # here you start a program 2 in background
wait ${!} # You wait it finish not really useful here
#... some other stuffs ...
daemon_1 & # We will not wait it will finish
program_3 & # here you start a program 1 in background
PID_PROGRAM_3=${!} # here you remember its PID
#... last other stuffs ...
sync
wait $PID_PROGRAM_1
wait $PID_PROGRAM_3 # program 2 is just ended
# ...
Desde wait
trabajos con puestos de trabajo, así como con PID
números de una solución perezosa debe ser poner al final de la secuencia de comandos
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 daemon probablemente no lo es el caso de esperar termina :-).
Nota:
espera $ significa "esperar hasta el último proceso en segundo plano se ha completado", donde $!
es el PID del último proceso de fondo {!}. Así que para poner wait ${!}
justo después program_2 &
es equivalente a ejecutar directamente program_2
sin enviarlo en el fondo con &
De la ayuda de wait
:
Syntax
wait [n ...]
Key
n A process ID or a job specification
Tendremos que tener una descripción, o si es posible un código, de lo que hace exactamente tu pequeña secuencia de comandos ... – ChristopheD
Para desvincular las secuencias de comandos de python puedes usar "python -u". Para desvincular las secuencias de comandos de perl, consulte la respuesta de Greg Hewgill a continuación. Y así sucesivamente ... – Eloici
Si puede editar la secuencia de comandos, generalmente puede vaciar el búfer de salida de forma explícita dentro de una secuencia de comandos, por ejemplo, en python con 'sys.stdout.flush()'. – drevicko