Come appena macchiato here il problema è che bisogna aspettare che i programmi che si esegue dallo script terminare il loro lavori.
Se nello script si esegue il programma in in background è possibile provare qualcosa di più.
In generale una chiamata a sync
prima di uscire consente di svuotare i buffer del file system e può aiutare un po '.
Se nello script vengono avviati alcuni programmi in sfondo (&
), si può wait che finire prima di uscire dallo script. Per avere un'idea di come può funzionare potete vedere qui sotto
#!/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
# ...
Dal wait
opere con posti di lavoro nonché con PID
numeri una soluzione pigra dovrebbe essere quello di mettere alla fine dello script
for job in `jobs -p`
do
wait $job
done
Più difficile è la situazione se si esegue qualcosa che esegue qualcos'altro in background perché si deve cercare e attendere (se è il caso) la fine di tutto il processo figlio: ad esempio se si esegue un demone probabilmente non è il caso di aspettare finisce :-).
Nota:
attesa $ significa "aspettare l'ultimo processo in background viene completato" dove $!
è il PID dell'ultimo processo in background {!}. Quindi, per mettere wait ${!}
subito dopo program_2 &
è equivalente a eseguire direttamente program_2
senza inviarlo in background con &
Da l'aiuto di wait
:
Syntax
wait [n ...]
Key
n A process ID or a job specification
Avremo bisogno di avere una descrizione -o se possibile codice- di quello che il tuo piccolo script fa esattamente ... – ChristopheD
Per gli script Python non buffer puoi usare "python -u". Per gli script perl di unbuffer, vedere la risposta di Greg Hewgill di seguito. E così via ... – Eloici
Se è possibile modificare lo script, di solito è possibile svuotare il buffer di output in modo esplicito all'interno di uno script, ad esempio in python con 'sys.stdout.flush()'. – drevicko