it-swarm.com.de

Wie führe ich in einer Zeile mehrere Hintergrundbefehle in bash aus?

Ich führe normalerweise mehrere Befehle mit so etwas aus:

sleep 2 && sleep 3

oder

sleep 2 ; sleep 3

was aber, wenn ich sie beide von einem Befehlszeilenbefehl im Hintergrund ausführen möchte?

sleep 2 & && sleep 3 &

funktioniert nicht Ersetzen von && durch ; auch nicht

Gibt es eine Möglichkeit, dies zu tun?

128
Palace Chan

Genau wie wollen Sie, dass sie laufen? Wenn Sie möchten, dass sie im Hintergrund gestartet werden und sequentiell ausgeführt werden, führen Sie Folgendes aus:

(sleep 2; sleep 3) &

Wenn Sie dagegen möchten, dass sie in parallel im Hintergrund laufen, können Sie stattdessen Folgendes tun:

sleep 2 & sleep 3 &

Und die zwei Techniken könnten kombiniert werden, wie zum Beispiel:

(sleep 2; echo first finished) & (sleep 3; echo second finished) &

Wenn Bash bash ist, gibt es oft eine Vielzahl verschiedener Techniken, um dieselbe Aufgabe zu erfüllen, obwohl sie manchmal subtile Unterschiede haben.

226
Kitsune

Sie müssen einige Parens in Ihrer letzten Version hinzufügen -

(sleep 2 &) && (sleep 3 &)

oder das funktioniert auch - 

(sleep 2 &) ; (sleep 3 &)
40
iagreen

um mehrere Hintergrundbefehle auszuführen, müssen Sie am Ende jedes Befehls & hinzufügen ex: (command1 &) && (command2 &) && (command3 &)

7
saeed

Die obigen Antworten verwenden Klammern. Bash kann auch Klammern für einen ähnlichen Zweck verwenden:

{ sleep 2 && sleep 3; } &

Beachten Sie, dass die geschweiften Klammern in Bezug auf die Syntax wählerischer sind - das Leerzeichen nach {, das Leerzeichen vor } und das letzte Semikolon sind erforderlich. In einigen Situationen sind die Zahnspangen effizienter, da sie keine neue Unterschale bilden. In diesem Fall weiß ich nicht, ob es einen Unterschied macht.

5
Greg Reagle

Das funktioniert:

$(sleep 2 &) && sleep 3 &

Sie können auch:

$(sleep 2 && sleep 3) &
4
higuaro

Ich habe auch die gleiche Mission ... Ich habe versucht (sleep2 ; fg )& sleep3 ; fg, es funktioniert .. Und wenn Sie Strg + C verdoppeln, können die beiden Prozesse angehalten werden.

0
dingyang wang

Wenn Sie mehrere Befehle sequentiell ausführen möchten, gibt es eine sehr einfache Methode, die überall funktioniert: Erstellen einer Datei! Der Vorteil dieser Methode ist, dass sie sauber und einfach ist.

Erstellen Sie zuerst Ihre Datei mit einem Namen, z. commands.sh. Dann geben Sie Ihre Befehle dort ein. Hier ist ein Beispiel:

commands.sh:

#!/system/bin/sh

sleep 3;
sleep 2;

OK, jetzt sind wir im letzten Schritt. Um Befehle im Hintergrund (sequentiell) auszuführen, führen Sie einfach Folgendes aus:

$ sh commands.sh &
0
MAChitgarha