2012-01-24 37 views
20

Quiero escribir un script bash donde ejecuto dos comandos al mismo tiempo, luego continúo cuando ambos se completan.¿Puede una secuencia de comandos bash ejecutar comandos simultáneos y luego esperar a que se completen?

Aquí hay algo que no funciona, pero lo voy a poner aquí para ilustrar lo que estoy tratando de hacer:

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

El script se ejecutará tanto job1 y job2 al mismo tiempo, pero solo esperará a que job2 termine antes de continuar. Si job1 tarda más tiempo, es posible que los resultados no estén listos para el comando final.

Respuesta

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

+1, pero no se requiere que el argumento de que esperar en este caso, ya que es el valor predeterminado. –

+0

@JohanLundberg, de hecho, no tenía idea ;-) –

+1

Motivo para agregar el argumento para esperar es si desea recopilar el estado de los trabajos. Lamentablemente, solo devuelve el estado del último proceso en la lista, por lo que tendría que iterar para verificar/recopilar todo el estado ' – libjack

1

algo como esto debería funcionar

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

    ./dostuffwithresults 
Cuestiones relacionadas