it-swarm.com.de

Wie man ein Shell-Skript im Hintergrund ausführt und keine Ausgabe erhält

Ich habe zwei Shell-Skripte a.sh und b.sh geschrieben. In a.sh und b.sh habe ich eine unendliche for-Schleife, und sie geben einige Ausgaben an das Terminal aus. Ich möchte ein anderes Skript schreiben, das sowohl a.sh als auch b.sh aufruft, aber ich möchte, dass der Benutzer die Kontrolle über das Terminal sofort wieder erlangt, anstatt dass das Skript unendlich ausgeführt wird und ich die Ausgabe im Terminal ausblenden möchte.

87
Behnam Safari

Verwenden Sie Nohup, wenn der Hintergrundjob lange dauert, oder Sie verwenden SecureCRT oder ähnliches, um sich beim Server anzumelden. 

Leiten Sie das Verzeichnis stdout und stderr in /dev/null um, um die Ausgabe zu ignorieren.

Nohup /path/to/your/script.sh > /dev/null 2>&1 &
184
George

Leiten Sie die Ausgabe in eine Datei wie folgt um:

./a.sh > somefile 2>&1 &

Dadurch werden sowohl stdout als auch stderr in dieselbe Datei umgeleitet. Wenn Sie stdout und stderr auf zwei verschiedene Dateien umleiten möchten, verwenden Sie Folgendes:

./a.sh > stdoutfile 2> stderrfile &

Sie können /dev/null als eine oder beide Dateien verwenden, wenn Sie sich nicht für stdout und/oder stderr interessieren. 

Siehe bash manpage für Details zu Weiterleitungen.

27
Adam Zalcman

Entschuldigung, dies ist ein bisschen spät, hat aber die ideale Lösung für Somple-Befehle gefunden, bei denen keine Standard- oder Fehlerausgabe gewünscht wird (Guthaben, wo es fällig ist: http://felixmilea.com/2014/12/running-bash-commands -hintergrund richtig/ )

Dadurch wird die Ausgabe auf Null umgeleitet und der Bildschirm bleibt klar:

command &>/dev/null &
17
DanteAlighieri

Wenn sich diese im selben Verzeichnis wie Ihr Skript befinden, das Folgendes enthält:

./a.sh > /dev/null 2>&1 &
./b.sh > /dev/null 2>&1 &

Der & am Ende führt dazu, dass Ihr Skript im Hintergrund ausgeführt wird.

Der > /dev/null 2>&1-Teil ist nicht erforderlich - er leitet die Streams stdout und stderr um, so dass Sie sie nicht auf dem Terminal sehen müssen.

12
Michael Chinen

Führen Sie eine Subshell aus, um die Benachrichtigungen zu entfernen, und schließen Sie STDOUT und STDERR:

(&>/dev/null script.sh &)
1
Tom Hale

Diese Beispiele funktionieren gut:

Nohup sh prog.sh proglog.log 2> & 1 &

Für Schleife kannst du so verwenden:

für i in {1..10}; mache Prog.sh; schlaf 1; erledigt prog.log 2> & 1 &

Es arbeitet im Hintergrund und zeigt keine Ausgabe an.

0
Ramin Ismayilli
Nohup sh -x runShellScripts.sh &
0
vaquar khan

Wenn Sie das Skript in einem Linux-Kickstart ausführen möchten, müssen Sie es wie folgt ausführen.

sh /tmp/script.sh > /dev/null 2>&1 < /dev/null &
0
SARATH CHANDRAN