2013-01-31 75 views
2

下面是一個例子程序:並行設置變量在bash

#!/bin/bash 

for x in {1..5} 
do 
    output[$x]=$(echo $x) & 
done 

wait 

for x in {1..5} 
do 
    echo ${output[$x]} 
done 

我希望它可以運行並打印出分配給output陣列的每個成員的值,但不打印輸出。刪除&正確分配變量。我必須使用不同的語法來並行實現這一點嗎?

回答

4

output[$x]=$(echo $x) & 

整個分配在後臺任務(子過程),這就是爲什麼你沒有看到的結果,因爲它沒有傳播到父進程。

您可以使用wait to wait for subprocesses,但返回結果(狀態代碼除外)將很困難。也許你可以將中間結果寫入文件,並在所有進程完成後收集這些結果? (不是很好,我很欣賞)

2

如果你想避免寫入文件,你可以使用GNU parallel

#!/bin/bash 
output=(`parallel -k --gnu echo {1} ::: {1..5}`) 
for i in ${output[@]} 
do 
    echo $i 
done 

-k是保持輸出

+0

+1哦順序。尼斯! –