基於This solution我試圖開發一個腳本,將限制運行的進程數爲4.但作爲替代方案,我希望作業被存儲在一個數組中參考索引。我寫了以下內容:使用腳本運行有限數量的並行程序
todo_array[1]="echo start1;sleep 3;echo done1"
todo_array[2]="echo start2;sleep 3;echo done2"
todo_array[3]="echo start3;sleep 3;echo done3"
todo_array[4]="echo start4;sleep 3;echo done4"
todo_array[5]="echo start5;sleep 3;echo done5"
todo_array[6]="echo start6;sleep 3;echo done6"
todo_array[7]="echo start7;sleep 3;echo done7"
todo_array[8]="echo start8;sleep 3;echo done8"
todo_array[9]="echo start9;sleep 3;echo done9"
max_jobs=4
seq ${#todo_array[@]} | xargs -i --max-procs=$max_jobs bash -c $todo_array[{}]
但是,當我執行我得到一個空的9 newlinex輸出。 我在做什麼錯? 感謝
編輯:我把它修改爲
seq ${#todo_array[@]} | xargs -i --max-procs=$max_jobs bash -c "$todo_array[{}]"
,我得到以下奇怪的輸出:
start1
start1
start1
start1
done1[2]
done1[3]
done1[1]
done1[4]
start1
start1
start1
start1
done1[5]
done1[6]
done1[7]
done1[8]
start1
done1[9]
如果我運行腳本,我沒有得到空換行符。我得到這4行錯誤:'bash:[3]:command not found bash:[2]:command not found bash:[4]:command not found bash:[1]:command not found' –
我想你可能想要「&」(並行運行作業)和「$$」(跟蹤你開始的每個後臺作業的PID)。 – paulsm4
陣列引用需要大括號,例如'$ {todo_array [1]}'。然而,'xargs -IX --max-procs = $ max_jobs bash -c「$ {todo_array [X]}」'對我來說不起作用,不知道爲什麼。 –