等待循环bash

时间:2015-04-24 17:35:15

标签: linux bash for-loop while-loop wait

我创建了一个循环来读取.txt并使用每一行作为输入执行另一个shell。

问题:我需要循环从txt并行执行前两行,等待它们完成,然后并行执行接下来的两行。

ATTEMPT AT SOLUTION:我想添加一个等待命令,只是不确定如何构造所以它等待每两行,而不是循环的每次流失。

我目前的循环:

cat input.txt | while read line; do
export step=${line//\"/}
export step=ExecuteModel_${step//,/_}
export pov=$line
$owsdirectory"/hpm_ws_client.sh" processCalcScriptOptions "$appName" "$pov" "$layers" "$stages" "" "$stages" "$stages" FALSE > "$appLogFolder""/"$step"_ProcessID.log"

/app/dev2/batch/hpcm/shellexe/rate_tool2/model_automation/check_process_status.sh "$appLogFolder" "$step" > "$appLogFolder""/""$step""_Monitor.log"

输入txt:

SEQ010,FY15
SEQ010,FY16
SEQ020,FY15
SEQ020,FY16
SEQ030,FY15
SEQ030,FY16
SEQ030,FY15
SEQ030,FY16
SEQ040,FY15
SEQ040,FY16
SEQ050,FY15
SEQ050,FY16

1 个答案:

答案 0 :(得分:3)

通常,您使用semxargsparallel来并行化循环,但所有这些工具通过始终并行运行2个(或N个)作业来优化吞吐量,开始新的,因为旧的完成。

要改为运行成对作业并等待两者完成,然后再考虑开始更多作业,您可以在后台运行它们并在每N次迭代中保持计数器wait

printf "%s\n" {1..10} | while IFS= read -r line
    do
       echo "Starting command"
       sleep 2 &

       if (( ++i % 2 == 0 ))
       then
         echo "Waiting..."
         wait
       fi
    done

输出:

Starting command
Starting command
Waiting...
Starting command
Starting command
Waiting...