Wystąpił problem z bólem głowy.
Chcę wykonywać wiele poleceń w tle, więc chcę je uruchamiać pojedynczo. Łatwo jest uruchomić jedno polecenie w powłoce linux w tle, podobnie jak to:
myCommand &
Łatwo jest również uruchomić wiele poleceń, tak jak poniżej:
myCommand1 && myCommand2
lub
myCommand1 ; myCommand2
Ale jeśli chcę uruchomić wiele poleceń w tle, próbowałem następującego formatu poleceń, ale nie powiodło się:
myCommand1 & && myCommand2 &
lub
myCommand1 & ; myCommand2 &
Oba formaty zawodzą. Jak mogę uruchomić wiele poleceń, które mają &
jeden wiersz poleceń?
command-line
bash
Zegar ZHONG
źródło
źródło
Odpowiedzi:
Posługiwać się ().
Jeśli chcesz je uruchamiać sekwencyjnie:
lub
Jeśli chcesz, aby działały równolegle:
W bash możesz także użyć tego (spacja za {i; są obowiązkowe):
źródło
(myCommand1 &) && (myCommand2 &)
będzie działać,myCommand2
nawet jeśli sięmyCommand1
nie powiedzie.Przypuszczam, że chcesz tego:
Spowoduje
myCommand1
to uruchomienie i wysłanie go w tło, po którym następuje znak ampersand, a następnie natychmiast rozpocznie sięmyCommand2
i wyśle to również w tło, tym samym ponownie uwalniając powłokę.Listy
Dla lepszego zrozumienia można zastąpić rurociągu przez polecenia tutaj.
Podzielmy to na przykłady. Możesz zbudować listę, łącząc polecenia i oddzielając je jednym z poniższych
; & && ||
:Można zakończyć list jednego z nich:
; & <newline>
.Zwykle wykonuje się polecenie lub listę, naciskając klawisz Enter, który jest równy
<newline>
. Średnik;
służy temu samemu celowi, szczególnie w skryptach. Ampersand&
uruchamia jednak polecenia w podpowłoce w tle, natychmiast uwalniając powłokę.Możesz używać okrągłych
()
lub nawiasów klamrowych{}
do dalszych list grup, z tą różnicą, że okrągłe nawiasy odradzają podpowłokę, a nawiasy kręcone nie. Nawiasy klamrowe wymagają spacji po pierwszej i średnika lub nowej linii przed nawiasem zamykającym. Na przykład:Może to być dość skomplikowane, jeśli nie masz pewności co do użycia
true
ifalse
sprawdzenia, czy konstrukcja działa zgodnie z oczekiwaniami:Kontrola pracy
Na
jobs
polecenie wyświetla listę zadań, które są uruchomione w tle lub zostały niedawno ukończony w bieżącej powłoki. Istnieje wiele skrótów klawiaturowych i poleceń do kontroli zadań:jobs
liściefg
=%
przenosi proces na pierwszy plan, uruchamiając go w razie potrzeby, możesz określić proces w następujący sposób:bg
=%&
przenosi proces w tło, uruchamiając go w razie potrzeby:wait
oczekuje na zakończenie procesu w tle i zwraca status zakończenia:Wyobraź sobie, że rozpocząłeś długi proces (
jobs
ujawnia swój numer 3), a potem zdałeś sobie sprawę, że chcesz, aby komputer został zawieszony po zakończeniu, aecho
także komunikat, jeśli proces się nie powiedzie:źródło
man bash
) i szeroko używana dokładnie tak, jak powinna AFAIK - nigdy nie doświadczyłem nic dziwnego.