Befehlsgruppierung

Befehlsgruppierung

Ich verstehe, dass das Et-Zeichen &am Ende einer Befehlssequenz diese im Hintergrund ausführt (in "parallel"), das Semikolon ;eine sequentielle Ausführung (in "Reihen") ermöglicht und die KlammerBefehlsgruppierung.

Angenommen, ich habe eine bashDatei mit einigen Befehlen:

#!/bin/bash
cmd1
cmd2
cmd3
cmd4

Wenn ich eine Befehlsgruppierung anwenden möchte, z. B. die ersten beiden parallel ausführen, warten und dann die nächsten beiden parallel ausführen möchte, sollte ich Folgendes eingeben:

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

oder muss alles zwingend in einer Zeile stehen?

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

oder überall das Zeichen „Zeile fortsetzen“ verwenden?

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

Antwort1

einfach verwenden &undwait

cmd1 &
cmd2 &
wait
cmd3 &
cmd4 &
wait

warten wartet auf den Backgroup-Prozess.

Verwenden Sie zur Zeilenfortsetzung einfach (und ). Beachten Sie, dass dies nur nützlich ist, wenn Sie eine Umleitung haben.

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

beachten Sie, dass waitSubshell ohne sofort zurückkehrt.

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

im Vergleich zu

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

verwandte Informationen