在循环bash内等待



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

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

尝试解决方案:我想添加一个等待命令,只是不知道如何构建,所以它每两行等待一次,而不是每次循环。

我的当前循环:

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

通常情况下,您会使用semxargsparallel来并行化循环,但所有这些工具都通过始终让2个(或N个)作业并行运行,并在旧作业完成时启动新作业来优化吞吐量。

相反,要运行成对的作业,并等待两个作业都完成后再考虑启动更多作业,您可以在后台运行它们,并每N次迭代保留一个wait计数器:

printf "%sn" {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...

相关内容

  • 没有找到相关文章

最新更新