2012-01-24 14 views
20

Voglio scrivere uno script bash in cui eseguo due comandi contemporaneamente, quindi proseguo quando entrambi completano.Uno script bash può eseguire comandi simultanei, quindi attendere che vengano completati?

ecco qualcosa che non funziona, ma mi metterò qui per illustrare quello che sto cercando di fare:

#!/bin/bash 
./job1 & 
./job2 
./dostuffwithresults 

Lo script verrà eseguito sia job1 e job2, allo stesso tempo, ma attenderà solo che job2 finisca prima di continuare. Se job1 richiede più tempo, i risultati potrebbero non essere pronti per il comando finale.

risposta

33
j1 & 
j2 & 
j3 & 
wait $(jobs -p) 
dostuffwithresults 
+6

+1, ma l'argomento di aspettare non è necessaria in questo caso in quanto è il default. –

+0

@JohanLundberg, in effetti, non ne avevo idea ;-) –

+1

Motivo per aggiungere l'argomento di attesa è se si desidera raccogliere lo stato dai lavori. Sfortunatamente, restituisce solo lo stato dell'ultimo processo in elenco, quindi dovrebbe iterare per controllare/raccogliere tutto lo stato ' – libjack

1

qualcosa come questo dovrebbe funzionare

#!/bin/bash 
    while [ `pgrep job*` ] 
    do 
    echo 'waiting' 
    done 

    ./dostuffwithresults 
Problemi correlati