2013-12-11 74 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 
你知道你需要使用'&'字符的命令後,將其發送到後臺