我想创建一个for循环,我总是同时调用N
个函数。它们不依赖于彼此,我只是想并行地运行这个循环。
我的想法是将我的函数作为后台进程调用,在每次第N次调用之后,我想等待所有后台进程。
但不知怎的,它不等待...... 我确定我错过了一些明显的东西。
#!/bin/bash
fun(){
for i in {1..5}
do
echo $i
sleep 1s
done
}
N=2
(
for k in {1..8}
do
((i=i%N))
# ((i++==0)) && (echo "waiting for all background processes" && wait) PROBLEM SOLVED:
((i++==0)) && echo "waiting for all background processes" && wait
echo "i = $i"
fun &
done
wait
)
编辑:它可能与子壳有关......我不确定
EDIT2:是的,这是因为(echo "waiting for all background processes" && wait)
是在子shell中执行的......这就是问题
答案 0 :(得分:0)
我找到了答案,这是由于(echo "waiting for all background processes" && wait)
在子shell中执行...
我修复了代码