Shell-Script

並行執行命令並等待一組命令完成,然後再開始下一個

  • December 19, 2019

我有包含多個命令的腳本。如何將命令分組在一起執行(我想製作幾組命令。在每個組中,命令應該並行執行(同時)。這些組應該按順序執行,等待一組完成後再開始下一組)…即

#!/bin/bash
command #1
command #2
command #3
command #4
command #5
command #6
command #7
command #8
command #9
command #10

我怎樣才能執行每 3 個命令來聚集?我試過:

#!/bin/bash
{
command #1
command #2
command #3
} & 
{   
command #4
command #5
command #6
} & 
{
command #7
command #8
command #9
}&
command #10

但這不能正常工作(我想同時並行執行多組命令。另外我需要等待第一組完成後再執行下一組)

腳本正在退出並顯示錯誤消息!

每組內的命令並行執行,各組按順序執行,每組並行命令等待上一組執行完畢後才開始執行。

以下是一個工作範例:

假設有 3 組命令,如下面的程式碼所示。在每組中,三個命令在後台以&.

這 3 個命令將幾乎同時啟動,並在腳本waits完成時並行執行。

在第三組中的三個命令全部退出後,command 10將執行。

$ cat command_groups.sh 
#!/bin/sh

command() {
   echo $1 start
   sleep $(( $1 & 03 ))      # keep the seconds value within 0-3
   echo $1 complete
}

echo First Group:
command 1 &
command 2 &
command 3 &
wait

echo Second Group:
command 4 &
command 5 &
command 6 &
wait

echo Third Group:
command 7 &
command 8 &
command 9 &
wait

echo Not really a group, no need for background/wait:
command 10

$ sh command_groups.sh 
First Group:
1 start
2 start
3 start
1 complete
2 complete
3 complete
Second Group:
4 start
5 start
6 start
4 complete
5 complete
6 complete
Third Group:
7 start
8 start
9 start
8 complete
9 complete
7 complete
Not really a group, no need for background/wait:
10 start
10 complete
$   

引用自:https://unix.stackexchange.com/questions/242087