命令分组

命令分组

&我理解命令序列末尾的&号在后台执行(“并行”),分号;允许顺序(“系列”),括号允许命令分组

假设我有一个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

相关内容