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 &&
?
Odpowiedzi:
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&&
.źródło
Aby odpowiedzieć na drugie pytanie, możesz użyć
&
polecenia w tle i kontynuować skrypt bez czekania na jego zakończenie.Jeśli uruchomisz to na interaktywnym terminalu (zamiast skryptu), możesz użyć,
fg
aby przywrócić skupienie polecenia w tle lubjobs
wyświetlić listę zadań w tle.źródło