Aby uruchamiać polecenia jednocześnie, możesz użyć &
separatora poleceń.
~$ command1 & command2 & command3
Rozpocznie się command1
, a następnie uruchomi w tle. To samo z command2
. Potem zaczyna się command3
normalnie.
Dane wyjściowe wszystkich poleceń będą zniekształcone, ale jeśli nie będzie to dla ciebie problemem, to będzie rozwiązanie.
Jeśli chcesz osobno spojrzeć na dane wyjściowe później, możesz potokować dane wyjściowe każdego polecenia do tee
, co pozwala określić plik, do którego ma być dublowany wynik.
~$ command1 | tee 1.log & command2 | tee 2.log & command3 | tee 3.log
Dane wyjściowe będą prawdopodobnie bardzo nieporządne. Aby temu przeciwdziałać, możesz nadać wyjściu każdego polecenia prefiks sed
.
~$ echo 'Output of command 1' | sed -e 's/^/[Command1] /'
[Command1] Output of command 1
Jeśli więc połączymy to wszystko razem, otrzymamy:
~$ command1 | tee 1.log | sed -e 's/^/[Command1] /' & command2 | tee 2.log | sed -e 's/^/[Command2] /' & command3 | tee 3.log | sed -e 's/^/[Command3] /'
[Command1] Starting command1
[Command2] Starting command2
[Command1] Finished
[Command3] Starting command3
To wysoce wyidealizowana wersja tego, co prawdopodobnie zobaczysz. Ale to najlepsze, o czym mogę teraz myśleć.
Jeśli chcesz zatrzymać je wszystkie naraz, możesz skorzystać z wbudowanej wersji trap
.
~$ trap 'kill %1; kill %2' SIGINT
~$ command1 & command2 & command3
Będzie to wykonać command1
, a command2
w tle i command3
w, co pozwala zabić go na pierwszym planie Ctrl+ C.
Po zabiciu ostatniego procesu z Ctrl+ Cte kill %1; kill %2
polecenia są wykonywane, ponieważ ich wykonanie połączone z odbiorem sygnału, a INTerupt rzeczy wysłanego przez naciśnięcie Ctrl+ C.
Odpowiednio zabijają pierwszy i drugi proces w tle (twój command1
i command2
). Nie zapomnij usunąć pułapki po zakończeniu korzystania z poleceń trap - SIGINT
.
Ukończ potwora polecenia:
~$ trap 'kill %1; kill %2' SIGINT
~$ command1 | tee 1.log | sed -e 's/^/[Command1] /' & command2 | tee 2.log | sed -e 's/^/[Command2] /' & command3 | tee 3.log | sed -e 's/^/[Command3] /'
Możesz oczywiście spojrzeć na ekran . Pozwala podzielić konsolę na tyle oddzielnych konsol, ile chcesz. Możesz więc monitorować wszystkie polecenia osobno, ale jednocześnie.