Wie kann man mit einem Befehl mehrere Programme im Hintergrund ausführen?
Ich habe die folgenden Befehle ausprobiert, aber sie funktionieren nicht.
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
quelle
quelle
Antworten:
Trennt aus Sicht der Shell-Syntax
&
Befehle wie;
/|
/&&
... (allerdings mit unterschiedlicher Semantik). Also ist es nur:quelle
;
startet der nächste Befehl, sobald der erste beendet ist.&
Setzt den Befehl tatsächlich in den Hintergrund. versuchen Sie es einfach:echo foo & echo bar & echo test &
sudo
, könntest du das Passwort nur einmal eingeben, dann einwickelnbash -c
oder ähnliches.Der Bash-Manpage-Abschnitt mit dem Titel Compound Commands (Zusammengesetzte Befehle) enthält zwei Optionen, die funktionieren, nämlich Befehle auflisten und gruppieren.
Ein Gruppenbefehl ist eine Reihe von Befehlen in geschweiften Klammern
{}
. Eine Liste ist die gleiche, in Klammern eingeschlossen()
. Beide können verwendet werden, um mehrere Befehle im Hintergrund auszuführen und schließlich die gesamte Sammlung als Gruppe im Hintergrund anzuzeigen. Das Listenkonstrukt führt Befehle in einer Subshell aus, sodass die Variablenzuweisungen nicht beibehalten werden.So führen Sie eine Gruppe von Befehlen aus:
Sie können Ihre Befehle auch in einer Liste (Subshell) ausführen:
quelle
()
Listensyntax die eingeschlossenen Befehle in einer Subshell ausführt, sodass Variablen in dieser nicht beibehalten werden.ein anderer Weg:
quelle
&&
in Ihrer Frage, bedeutet dies zunächst dann einen Befehl ausführen , wenn successfuly ausführen, können Sie es nicht neben command.if laufen betrachten, die Sie ausführen könnencommand1 & ; command2 & ;
;
ohne Probleme ausgeführt