El bucle externo que tienes es básicamente
for i in {1..10}; do
some_compound_command &
done
Esto comenzaría diez instancias simultáneas de some_compound_command
en segundo plano. Comenzarán lo más rápido posible, pero no "todo al mismo tiempo" (es decir, si some_compound_command
toma muy poco tiempo, entonces el primero bien puede terminar antes de que comience el último).
El hecho de que some_compound_command
sea un bucle no es importante. Esto significa que el código que muestra es correcto en que las iteraciones del j
bucle interno se ejecutarán secuencialmente, pero todas las instancias del bucle interno (una por iteración del i
bucle externo ) se iniciarían simultáneamente.
Lo único a tener en cuenta es que cada trabajo en segundo plano se ejecutará en una subshell. Esto significa que los cambios realizados en el entorno (p. Ej., Modificaciones en los valores de las variables de shell, cambios en el directorio de trabajo actual con cd
, etc.) en una instancia del bucle interno no serán visibles fuera de ese trabajo en segundo plano en particular.
Lo que quizás desee agregar es una wait
declaración después de su ciclo, solo para esperar a que todos los trabajos en segundo plano realmente finalicen, al menos antes de que finalice el script:
for i in {1..10}; do
for j in {1..10}; do
run_command "$i" "$j"
done &
done
wait