Frage 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 drucken etwas Ausgabe an das Terminal. Ich möchte ein weiteres Skript schreiben, das sowohl a.sh als auch b.sh aufruft, aber ich möchte, dass der Benutzer sofort die Kontrolle über das Terminal zurückgewinnt, anstatt das Skript unendlich laufen zu lassen und die Ausgabe im Terminal zu verstecken.


75
2018-02-08 08:53


Ursprung


Antworten:


Benutzen nohup Wenn Ihr Hintergrundjob viel Zeit in Anspruch nimmt oder Sie SecureCRT oder ähnliches verwenden, melden Sie sich am Server an.

Redirect die stdout und stderr zu /dev/null um die Ausgabe zu ignorieren.

nohup /path/to/your/script.sh > /dev/null 2>&1 &

160
2018-02-08 08:58



Leiten Sie die Ausgabe in eine Datei wie diese um:

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

Dadurch werden sowohl stdout als auch stderr auf 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 verwenden /dev/null als eine oder beide der Dateien, wenn Sie sich nicht um das stdout und / oder stderr kümmern.

Sehen Bash-Manpage für Details zu Weiterleitungen.


24
2018-02-08 08:56



Es tut uns leid, dass dies etwas spät ist, aber wir haben die ideale Lösung für einige Befehle gefunden, bei denen keine Standardausgabe oder Fehlerausgabe gewünscht ist. http://felixmilea.com/2014/12/running-bash-commands-background-properly/)

Dadurch wird die Ausgabe auf null umgeleitet und der Bildschirm wird gelöscht:

command &>/dev/null &

15
2018-04-09 19:57



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

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

Das & Am Ende läuft das Skript im Hintergrund.

Das > /dev/null 2>&1 Teil ist nicht notwendig - es leitet die Stdout- und Stderr-Streams um, so dass Sie sie nicht auf dem Terminal sehen müssen, was Sie für verrauschte Skripts mit vielen Ausgaben tun sollten.


11
2018-02-08 08:55



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

(&>/dev/null script.sh &)

1
2018-06-27 11:16



nohup sh -x runShellScripts.sh &

0
2018-05-10 22:22



Diese Beispiele funktionieren gut:

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

For-Schleife können Sie wie folgt verwenden:

für i in {1..10}; do sh prog.sh; Schlaf 1; fertig prog.log 2> & 1 &

Es funktioniert im Hintergrund und zeigt keine Ausgabe an.


0
2017-07-31 10:39