Ich habe zwei Shell-Skripte geschrieben a.sh
und b.sh
. In a.sh
und b.sh
ich haben eine Endlosschleife und sie drucken eine Ausgabe an das Terminal. Ich möchte ein anderes Skript schreiben, das beide aufruft, a.sh
und b.sh
ich möchte, dass der Benutzer sofort die Kontrolle über das Terminal wiedererlangt, anstatt das Skript unendlich laufen zu lassen und die Ausgabe im Terminal auszublenden.
linux
scripting
sh
background-process
Behnam Safari
quelle
quelle
nohup /path/to/your/script.sh parameter1 > & 1 &
wenn jemand einen besseren Weg kennt./dev/null 2>&1
wenn Sie es verwenden,nohup
da bereits alle STDOUT- und STDERR-Streams automatisch an die Datei nohup.out angehängt werden. Verwenden Sie nur:nohup /path/to/your/command &
-bash: syntax error near unexpected token '&'
Leiten Sie die Ausgabe in eine Datei wie folgt um:
Dadurch werden sowohl stdout als auch stderr in dieselbe Datei umgeleitet. Wenn Sie stdout und stderr in zwei verschiedene Dateien umleiten möchten, verwenden Sie Folgendes:
Sie können
/dev/null
als eine oder beide Dateien verwenden, wenn Sie sich nicht für stdout und / oder stderr interessieren.Weitere Informationen zu Weiterleitungen finden Sie in der Bash-Manpage .
quelle
Es tut uns leid, dass dies etwas spät ist, aber wir haben die ideale Lösung für Somple-Befehle gefunden, bei denen Sie keine Standard- oder Fehlerausgabe wünschen (Gutschrift, wo sie fällig ist: http://felixmilea.com/2014/12/running-bash-commands-background -richtig/ )
Dadurch wird die Ausgabe auf Null umgeleitet und der Bildschirm bleibt frei:
quelle
Wenn sie sich im selben Verzeichnis wie Ihr Skript befinden, das Folgendes enthält:
Das
&
Ende wird Ihr Skript im Hintergrund ausgeführt.Der
> /dev/null 2>&1
Teil ist nicht erforderlich - er leitet die Streams stdout und stderr um, sodass Sie sie nicht auf dem Terminal sehen müssen, was Sie möglicherweise für verrauschte Skripte mit viel Ausgabe tun möchten.quelle
Führen Sie eine Unterschale aus, um Benachrichtigungen zu entfernen und STDOUT und STDERR zu schließen:
quelle
[1] + 54765 done <emacs>
DankeschönWenn Sie das Skript in einem Linux-Kickstart ausführen möchten, müssen Sie es wie folgt ausführen.
quelle
quelle
-x
dasDiese Beispiele funktionieren gut:
nohup sh prog.sh proglog.log 2> & 1 &
Für die Schleife können Sie Folgendes verwenden:
für i in {1..10}; do sh prog.sh; Schlaf 1; erledigt prog.log 2> & 1 &
Es funktioniert im Hintergrund und zeigt keine Ausgabe.
quelle