Agrupación de comandos

Agrupación de comandos

Entiendo que el signo &y al final de una secuencia de comando la ejecuta en segundo plano (en "paralelo"), el punto y coma ;permite secuencial (en "serie") y el paréntesis permiteagrupación de comandos.

Supongamos que tengo un basharchivo con algunos comandos:

#!/bin/bash
cmd1
cmd2
cmd3
cmd4

Si quiero aplicar agrupación de comandos, por ejemplo, ejecutar los dos primeros en paralelo, esperar, luego ejecutar los dos siguientes en paralelo, ¿debería poner?:

#!/bin/bash
( \
cmd1 &
cmd2 &
); \
( \
cmd3 &
cmd4 & 
)

¿O todo debe ser obligatorio en una sola línea?

#!/bin/bash
(cmd1 & cmd2 &);(cmd3 & cmd4 &)

¿O usar el carácter de línea continua en todas partes?

#!/bin/bash
( \
cmd1 & \
cmd2 &); \
( \
cmd3 & \
cmd4 & )

Respuesta1

simplemente use &ywait

cmd1 &
cmd2 &
wait
cmd3 &
cmd4 &
wait

esperar esperará el proceso del grupo de fondo.

En cuanto a la continuación de línea, simplemente use (y ). Tenga en cuenta que esto solo es útil si tiene redirección.

(
cmd1 &
cmd2 &
wait
) > some-log.A
(
cmd3 &
cmd4 &
wait
) > some-log.B

tenga en cuenta que sin wait, el subshell regresará inmediatamente.

date ; (
> sleep 20 &
> sleep 10 &
> ) ; date
Wed Nov 29 16:08:15 CET 2017
Wed Nov 29 16:08:15 CET 2017

en comparación con

date ; (
> sleep 20 &
> sleep 10 &
> wait
> ) ; date
Wed Nov 29 16:10:08 CET 2017
Wed Nov 29 16:10:28 CET 2017

información relacionada