Bash使用while循环控制分叉for循环

时间:2014-06-16 13:46:22

标签: bash for-loop while-loop

我有一个for循环,循环遍历目录中的所有文件。我想在每个文件上运行一个进程(在此示例中为echo文件名和sleep 5)。但是,我希望能够一次运行这5个文件(在后台使用&)。问题是我无法弄清楚如何在$f循环中迭代while,这样我最终不会同时处理同一个文件五次而不是五个不同的文件。

#!/bin/bash

maxjobs=5

for f in `ls /home/user/`
do
 jobsrunning=0
  while [ $jobsrunning -lt $maxjobs ]
  do
    echo "Converting file"$f 
    sleep 5 & #wait for 5 seconds 
    jobsrunning=$((jobsrunning + 1))
    echo $jobsrunning
  done
wait
done

1 个答案:

答案 0 :(得分:3)

你真的只需要重置jobsrunning,我根本不认为你需要内循环。这只是一个条件。

#!/bin/bash

maxjobs=5
jobsrunning=0
for f in /home/user/*; do
    if (( jobsrunning >= maxjobs )); then
        wait
        jobsrunning=0
    fi
    echo "converting"
    sleep 5 & # wait for how many seconds?
    (( jobsrunning++ ))
    echo "$jobsrunning"
done
wait

那就是说,这听起来像是parallel的工作。