Die äußere Schleife, die Sie haben, ist im Grunde
for i in {1..10}; do
some_compound_command &
done
Dies würde zehn gleichzeitige Instanzen von some_compound_command
im Hintergrund starten . Sie werden so schnell wie möglich gestartet, aber nicht ganz "alle zur gleichen Zeit" (dh wenn es sehr wenig Zeit in Anspruch some_compound_command
nimmt , kann die erste gut enden, bevor die letzte beginnt).
Die Tatsache, dass es sich some_compound_command
zufällig um eine Schleife handelt, ist nicht wichtig. Dies bedeutet, dass der von Ihnen angezeigte Code insofern korrekt ist , als die Iterationen der inneren j
Schleife nacheinander ausgeführt werden, aber alle Instanzen der inneren Schleife (eine pro Iteration der äußeren i
Schleife) gleichzeitig gestartet werden.
Das einzige, was Sie beachten sollten, ist, dass jeder Hintergrundjob in einer Subshell ausgeführt wird. Dies bedeutet, dass Änderungen an der Umgebung (z. B. Änderungen an Werten von Shell-Variablen, Änderungen des aktuellen Arbeitsverzeichnisses mit cd
usw.) in einer Instanz der inneren Schleife außerhalb dieses bestimmten Hintergrundjobs nicht sichtbar sind.
Was Sie möglicherweise hinzufügen möchten, ist eine wait
Anweisung nach Ihrer Schleife, um zu warten, bis alle Hintergrundjobs tatsächlich beendet sind, zumindest bevor das Skript beendet wird:
for i in {1..10}; do
for j in {1..10}; do
run_command "$i" "$j"
done &
done
wait