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 bash
Datei 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 wait
Subshell 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