&
我理解命令序列末尾的&號在後台執行它(“並行”),分號;
允許順序(“系列”),括號允許命令分組。
假設我有一個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 & )
答案1
只需使用&
和wait
cmd1 &
cmd2 &
wait
cmd3 &
cmd4 &
wait
wait 將等待 backgroup 進程。
至於行繼續,只需使用(
和)
,請注意,僅當您有重定向時才有用。
(
cmd1 &
cmd2 &
wait
) > some-log.A
(
cmd3 &
cmd4 &
wait
) > some-log.B
請注意,如果沒有wait
,子 shell 將立即返回。
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