コマンドのグループ化

コマンドのグループ化

&私は、コマンドシーケンスの最後にあるアンパサンドがバックグラウンドで実行され(「並列」)、セミコロンがシーケンス;(「シリーズ」)を受け入れ、括弧がバックグラウンドで実行されることを理解しています。コマンドのグループ化

いくつかのコマンドを含むファイルがあるとしましょうbash

#!/bin/bash
cmd1
cmd2
cmd3
cmd4

たとえば、コマンドのグループ化を適用するには、最初の2つを並列に実行して待機し、次の2つを並列に実行するには何を入力する必要がありますか? :

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

それとも、すべてを1行で実施する必要がありますか?

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

それともどこに行連続文字を使用しますか?

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

答え1

ただ使用&してwait

cmd1 &
cmd2 &
wait
cmd3 &
cmd4 &
wait

waitはバックグループプロセスを待ちます。

行連続の場合と(を使用してください)。リダイレクトがある場合にのみ機能します。

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

それ以外の場合、waitサブシェルはすぐに返されます。

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

関連情報