在循环内等待 bash
Wait inside loop bash
我创建了一个循环来读取 .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"
输入文本:
SEQ010,FY15
SEQ010,FY16
SEQ020,FY15
SEQ020,FY16
SEQ030,FY15
SEQ030,FY16
SEQ030,FY15
SEQ030,FY16
SEQ040,FY15
SEQ040,FY16
SEQ050,FY15
SEQ050,FY16
通常您会使用 sem
、xargs
或 parallel
来并行化一个循环,但所有这些工具都通过始终拥有 2(或 N)个作业来优化吞吐量 运行同时进行,并在旧的完成后开始新的。
要改为 运行 对作业并等待它们完成后再考虑开始更多作业,您可以只 运行 它们在后台并保持对 wait
的计数器每 N迭代次数:
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...
我创建了一个循环来读取 .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"
输入文本:
SEQ010,FY15
SEQ010,FY16
SEQ020,FY15
SEQ020,FY16
SEQ030,FY15
SEQ030,FY16
SEQ030,FY15
SEQ030,FY16
SEQ040,FY15
SEQ040,FY16
SEQ050,FY15
SEQ050,FY16
通常您会使用 sem
、xargs
或 parallel
来并行化一个循环,但所有这些工具都通过始终拥有 2(或 N)个作业来优化吞吐量 运行同时进行,并在旧的完成后开始新的。
要改为 运行 对作业并等待它们完成后再考虑开始更多作业,您可以只 运行 它们在后台并保持对 wait
的计数器每 N迭代次数:
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...