Kolejne polecenia

14

Czy mam rację, zakładając, że po ;połączeniu dwóch poleceń w linii Bash zawsze czeka na zakończenie pierwszego polecenia przed wykonaniem drugiego polecenia? I podobnie, w skrypcie powłoki zawierającym dwa różne polecenia w różnych wierszach, Bash zawsze czeka, aż polecenie w pierwszym wierszu zakończy działanie, zanim wykona polecenie w drugim wierszu?

Jeśli tak jest, czy istnieje sposób na wykonanie dwóch poleceń w jednym wierszu lub w skrypcie, aby drugie polecenie nie czekało do zakończenia pierwszego polecenia?

Ponadto, czy różne wiersze w skrypcie powłoki są równoważne oddzielnym wierszom połączonym przez ;lub &&?

EmmaV
źródło
1
Może Cię zainteresować Jakie są operatory kontroli i przekierowania powłoki? .
terdon

Odpowiedzi:

26

Masz rację, polecenia w skryptach są domyślnie wykonywane sekwencyjnie.

Możesz uruchomić polecenie w tle, dodając do niego &(pojedynczy znak &).

Polecenia w osobnych wierszach są równoważne ;domyślnie połączonym poleceniom . Jeśli powiesz swojej powłoce, aby przerwała stosowanie niezerowych kodów wyjścia ( set -e), skrypt wykona się tak, jakby wszystkie polecenia zostały połączone &&.

Stephen Kitt
źródło
2

Aby odpowiedzieć na drugie pytanie, możesz użyć &polecenia w tle i kontynuować skrypt bez czekania na jego zakończenie.

commandA & commandB

Jeśli uruchomisz to na interaktywnym terminalu (zamiast skryptu), możesz użyć, fgaby przywrócić skupienie polecenia w tle lub jobswyświetlić listę zadań w tle.

rmelcer
źródło