Command

命令分組

  • November 29, 2017

我理解&命令序列末尾的 & 號在後台執行它(在“並行”中),分號;允許順序(在“系列”中),括號允許命令分組

假設我有一個bash包含一些命令的文件:

#!/bin/bash
cmd1
cmd2
cmd3
cmd4

如果我想應用命令分組,例如,並行執行前兩個,等待,然後並行執行接下來的兩個,我應該把?:

#!/bin/bash
( \
cmd1 &
cmd2 &
); \
( \
cmd3 &
cmd4 & 
)

或者所有內容都必須在一行中強制執行?

#!/bin/bash
(cmd1 & cmd2 &);(cmd3 & cmd4 &)

還是到處使用繼續行字元?

#!/bin/bash
( \
cmd1 & \
cmd2 &); \
( \
cmd3 & \
cmd4 & )

只需使用&wait

cmd1 &
cmd2 &
wait
cmd3 &
cmd4 &
wait

wait 將等待 backgroup 程序。

至於續行,只需使用(and ),請注意這僅在您有重定向時才有用。

(
cmd1 &
cmd2 &
wait
) > some-log.A
(
cmd3 &
cmd4 &
wait
) > some-log.B

請注意,沒有wait, subshel​​l 將立即返回。

date ; (
> sleep 20 &
> sleep 10 &
> ) ; date
Wed Nov 29 16:08:15 CET 2017
Wed Nov 29 16:08:15 CET 2017

相比

date ; (
> sleep 20 &
> sleep 10 &
> wait
> ) ; date
Wed Nov 29 16:10:08 CET 2017
Wed Nov 29 16:10:28 CET 2017

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