2013-12-11 41 views
1

对于数组中的每个项目,我想执行相同的命令。发送bash数组循环到背景

cat dummy.sh 
#!/bin/bash 

declare -a LIST=(1 2 3 4 5 6 7 8 9 10) 
for ITEM in ${LIST[@]}; do 
    sleep $ITEM 
    for i in $(seq 2); do 
     echo $ITEM 
    done 
done  

这是一个例子,但是这样的循环也不起作用。我想发送每个for ITEM in ${LIST[@]}; do(数组中每个项目的命令)到背景,以便它们在同一时间执行。我怎样才能做到这一点?

+1

?祝你好运。 – shellter

+0

是的,但是我试着在'echo $ ITEM&','done&','done&'或'./dummy.sh&'后面加'&' - 我找不到正确的方法。 – PoGibas

回答

4

使用subshell内循环,然后wait的子进程来完成:

#!/bin/bash 

LIST=(1 2 3 4 5 6 7 8 9 10) 

for ITEM in ${LIST[@]}; do 
    (
     sleep $ITEM 
     for i in $(seq 2); do 
      echo $ITEM 
     done 
    ) & 
done 

wait 
你知道你需要使用'&'字符的命令后,将其发送到后台