Mam skrypt zawierający wiele poleceń. Jak grupować polecenia, aby działały razem (chcę utworzyć kilka grup poleceń. W obrębie każdej grupy polecenia powinny być uruchamiane równolegle (jednocześnie). Grupy powinny działać sekwencyjnie, czekając na zakończenie jednej grupy przed rozpoczęciem następna grupa) ... tj
#!/bin/bash
command #1
command #2
command #3
command #4
command #5
command #6
command #7
command #8
command #9
command #10
jak mogę uruchamiać co 3 polecenia, aby się zebrać? Próbowałem:
#!/bin/bash
{
command #1
command #2
command #3
} &
{
command #4
command #5
command #6
} &
{
command #7
command #8
command #9
}&
command #10
Ale to nie działało poprawnie (chcę równolegle uruchamiać grupy poleceń. Muszę też poczekać, aż pierwsza grupa się zakończy, zanim uruchomię następną grupę)
Skrypt kończy działanie z komunikatem o błędzie!
Odpowiedzi:
Polecenia w obrębie każdej grupy działają równolegle, a grupy działają kolejno, każda grupa poleceń równoległych czeka na zakończenie poprzedniej grupy przed rozpoczęciem wykonywania.
Oto działający przykład:
Załóż 3 grupy poleceń jak w poniższym kodzie. W każdej grupie trzy polecenia są uruchamiane w tle za pomocą
&
.3 polecenia zostaną uruchomione prawie w tym samym czasie i będą działać równolegle, dopóki skrypt
waits
ich nie zakończy.Po wykonaniu wszystkich trzech poleceń w trzeciej grupie,
command 10
zostanie wykonane.źródło
Powinien działać (każdy pojedynczy komponent trypletu będzie działał sekwencyjnie, ale grupy hete będą działały równolegle). Prawdopodobnie nie chcesz, aby twoja powłoka nadrzędna zakończyła się przed zakończeniem grup - stąd
wait
.źródło
wait
.