2015-01-12 2 views
0

, если у меня есть для каждого оператора, как это:прогона для каждого цикла в параллельных

for i in 1 2 3 4 
do 
    fairly large script here with lots of logic and stuff and $i is in many areas..the code in ehre also needs to run in a sequence... 
done 

как можно нерест 4 петли параллельно и не запускать в серийном

+0

Используя мой ответ ... -_- –

+0

Посмотрите на команду «параллельно» (https://www.gnu.org/ программное обеспечение/параллельный /). –

ответ

1

Я думаю, что понимаю, что вы имеете в виду сейчас. Вы хотите, чтобы 4 пары заданий выполнялись параллельно, и две половинки каждой пары должны запускаться последовательно. Итак, по существу, у вас есть

Job 1A followed sequentially by Job 1B 
Job 2A followed seuqentially by Job 2B 
Job 3A followed sequentially by Job 3B 
Job 4A followed sequentially by Job 4B 

и все 4 строки могут быть запущены параллельно.

Если это так, то вам нужно:

for i in 1 2 3 4 ; do 
    (echo $i A start; sleep 5; echo $i A end; echo $i B start; sleep 5; echo $i B end) & 
done 
+0

, так что я должен был бы начать для каждого команда внутри цикла? У меня около 700 строк кода внутри цикла с различными переменными, другими циклами и операторами условий. Пойду ли я в конце каждого из них? Я все еще смущен тем, где начинается и заканчивается, я думаю ... – user2061886

+0

Поместите свои 700 строк кода в отдельный скрипт и просто вызовите скрипт из цикла. –

0

С & оператором (прогоном in background)

for i in 1 2 3 4 
do 
    echo "test 1 $i" & 
    echo "test 2 $i" & 
done 
+0

Возможно, стоит отметить, что вы можете добавить 'wait' в строку после' done', если вы хотите дождаться завершения всех 8 процессов. –

+0

Может быть, я должен был быть немного более ясен с моим вопросом ... так что я хочу, чтобы я работал на 1, 2, 3 и 4. Но я не хочу, чтобы я бежал за 1, затем 2, затем 3 et ... Я хочу, чтобы я запускал 1,2,3 и 4 в одно и то же время. – user2061886

+0

@ user2061886 Вы даже попробовали, что предложил sputnick? Параллельно выполняется все 8 процессов одновременно. Попробуйте заменить команду 'echo' на' sleep 5; echo done', и вы увидите, что это занимает 5 секунд, а не 40. –