0
我有一組腳本,例如並行執行命令和等待
01_some_stuff1
02_some_stuff2
03_some_stuff3a
03_some_stuff3b
04_some_stuff4a
04_some_stuff4b
這些腳本應按照它們的編號順序運行,並且具有相同編號的腳本應該並行運行。
我的第一個想法是重複的可能數字
for n in $(seq -f %02.0f 0 99); do
for s in "${n}_*"; do
export CURRENT_JOB="${s}"
"${s}" &
done
wait
done
這是一種安全的方法?有沒有更優雅的解決方案可以爲內部循環元素設置不同的環境?
這其實並不是一種安全的方法。如果腳本'04_some_4c'很短並且在'04_some_4a'之前完成,你的腳本將運行'05_some5a',而4a仍在運行,因爲'wait'只在最後一個在後臺啓動的作業中等待。我建議一個解決方案,將啓動進程的PID('$!')保存在一個數組中。然後你可以迭代它並等待每個進程。 –
@MoritzSauter:bash manpage說:「如果沒有給出n,則所有當前活動的子進程都被等待」不僅是最後一個啓動的作業 – urzeit
哦,你說得對。混合起來。你有沒有嘗試過你的想法? –