我有一个问题,我依次运行我的bash命令行的脚本,如:
./process.sh data1.txt
./process.sh data2.txt
...
./process.sh dataN.txt
我想做的是将它们作为后台作业启动,但在任何给定时间只运行10个。我可以用传统的编程语言(使用连接,等待样式构造非常舒服)这样做我的问题是如何使用UNIX bash执行此操作。
感谢。
答案 0 :(得分:4)
BG_LIMIT=10
counter=0
for data in data*.txt; do
./process.sh $data &
if (( ++counter % $BG_LIMIT == 0 )); then
echo "Wating for background jobs to complete..."
wait
fi
done
echo "Waiting for any remaining jobs to complete..."
wait
答案 1 :(得分:2)
您也可以使用xargs
:
$ for x in data*.txt; do echo "$x"; done | xargs -n 1 -P 10 ./process.sh
for
循环可能有不同的变体:find
,简单的echo data*.txt
等。重点是在{{1}的标准输入上生成文件名列表阅读。