Jak można uruchomić wiele programów w tle za pomocą jednego polecenia?
Próbowałem poniższych poleceń, ale one nie działają.
nohup ./script1.sh & && nohup ./script2.sh &
-bash: syntax error near unexpected token '&&'
nohup ./script1.sh & ; nohup ./script2.sh &
-bash: syntax error near unexpected token ';'
bash
shell-script
Rahul Patil
źródło
źródło
Odpowiedzi:
Z punktu widzenia składni powłoki
&
rozdziela polecenia takie jak;
/|
/&&
... (choć oczywiście z innym semantycznym). Więc to tylko:źródło
;
uruchamia następne polecenie, jak tylko zakończy się pierwsze.&
faktycznie umieszcza polecenie w tle. po prostu spróbuj tego:echo foo & echo bar & echo test &
sudo
, możesz wprowadzić hasło tylko raz, zawiń jebash -c
lub w podobny sposób.Sekcja strony podręcznika bash, zatytułowana „ Polecenia złożone”, ma dwie opcje, które mogłyby działać, wyświetlać i grupować polecenia.
Polecenie grupowe to seria poleceń zamkniętych w nawiasy klamrowe
{}
. Lista jest taka sama, ujęta w nawiasy()
. Oba mogą być użyte do tła wielu poleceń w tle, a wreszcie do tła całej kolekcji jako zestawu. Konstrukcja listy wykonuje polecenia w podpowłoce, więc przypisania zmiennych nie są zachowywane.Aby wykonać grupę poleceń:
Możesz także wykonywać swoje polecenia na liście (podpowłoce):
źródło
()
składnia listy wykonuje zamknięte polecenia w podpowłoce, więc zmienne nie są zachowywane.Inny sposób:
źródło
&&
w swoim pytaniu, to znaczy najpierw uruchom komendę, a następnie, jeśli uruchomisz pomyślnie, uruchom następną komendę. jeśli nie uważasz, możesz uruchomićcommand1 & ; command2 & ;
;
bez problemu z tym