¿Es posible ejecutar dos comandos al mismo tiempo en un script de shell?

10

Sé que en la línea de comandos puedo usar &para ejecutar un comando en segundo plano. Pero me pregunto si puedo hacerlo en un guión.

Tengo un script como este:

date_stamp=$(date +"%Y-%m-%d" --date='yesterday')
shopt -s extglob

cd /my/working/directory/

sh ./stay/get_it_ios.sh
sh ./stay/get_it_mix.sh

cd stay
zip  ../stay_$date_stamp.zip  ./*201*

rm ./stay/!(*py|*sh)

Y quiero correr sh ./stay/get_it_ios.shy sh ./stay/get_it_mix.shjuntos para obtener datos más precisos. ¿Es posible hacer esto en el ámbito de un script de shell?

zen
fuente

Respuestas:

16

Sí lo es. Si desea hacer dos cosas al mismo tiempo y esperar a que se completen, puede hacer algo como:

sh ./stay/get_it_ios.sh &  PIDIOS=$!
sh ./stay/get_it_mix.sh &  PIDMIX=$!
wait $PIDIOS
wait $PIDMIX

Su secuencia de comandos ejecutará ambas secuencias de comandos en paralelo y esperará a que se completen ambas secuencias de comandos antes de continuar.

DopeGhoti
fuente
44
Puede ejecutar uno waitsin argumento para esperar ambos procesos.
Stéphane Chazelas
2
A menos que anteriormente en la secuencia de comandos, haya puesto en segundo plano un tercer proceso que se supone que se ejecutará hasta un punto posterior. Es mejor declarar afirmativamente lo que estás waitbuscando, en mi opinión.
DopeGhoti
Cuando dice ejecutar ambos scripts en paralelo, ¿quiere decir que comenzarán al mismo tiempo? Quiero decir, supongamos que pudimos registrar la hora con una precisión muy grande (por ejemplo, usando relojes atómicos). ¿Ambos deberían comenzar juntos? Pregunto porque las secuencias de comandos se lee línea por línea, ¿verdad?
Sigur
1
Como supones, los scripts no comenzarán a ejecutarse en el mismo instante hasta el ciclo del reloj. Los scripts de Shell ejecutan los comandos en el orden en que se dan, por lo que el primer comando en segundo plano se ejecutará antes que el segundo, aunque solo sea (en casi todos los casos) muy ligeramente. Cuando digo que "se ejecutarán en paralelo", quiero decir exactamente eso: ambos se ejecutarán simultáneamente (sujeto a la gestión del trabajo, el manejo de la señal y / o la priorización del núcleo).
DopeGhoti