Внешний цикл, который у вас есть, в основном
for i in {1..10}; do
some_compound_command &
done
Это запустит десять одновременных экземпляров some_compound_command
в фоновом режиме. Они будут запущены настолько быстро, насколько это возможно, но не совсем «все одновременно» (то есть, если это some_compound_command
занимает очень мало времени, первое может закончиться раньше, чем начнется последнее).
Тот факт, что some_compound_command
это цикл, не важен. Это означает, что код, который вы показываете, верен в том j
смысле, что итерации внутреннего цикла будут выполняться последовательно, но все экземпляры внутреннего цикла (по одному на итерацию внешнего i
цикла) будут запускаться одновременно.
Единственное, что нужно иметь в виду, это то, что каждое фоновое задание будет выполняться в подоболочке. Это означает, что изменения, внесенные в среду (например, изменения значений переменных оболочки, изменения текущего рабочего каталога с помощью cd
и т. Д.) В одном экземпляре внутреннего цикла, не будут видны за пределами этого конкретного фонового задания.
Возможно, вы захотите добавить wait
оператор после цикла, просто чтобы дождаться завершения всех фоновых заданий, по крайней мере, до завершения сценария:
for i in {1..10}; do
for j in {1..10}; do
run_command "$i" "$j"
done &
done
wait