Antworten:
Das &weist die Shell an, den Befehl im Hintergrund auszuführen, dh, er wird gegabelt und asynchron in einer separaten Sub-Shell als Job ausgeführt.
Beachten Sie, dass beim Einfügen &der Ausgabe - sowohl stdout als auch stderr - weiterhin auf dem Bildschirm gedruckt wird . Wenn Sie keine Ausgabe auf dem Bildschirm sehen möchten, leiten Sie beide stdoutund stderrin eine Datei um, indem Sie:
myscript > ~/myscript.log 2>&1 &
In der Regel möchten Sie die Datei möglicherweise verwerfen, stderrindem Sie sie an weiterleiten, /dev/nullwenn Sie sich später keine Gedanken über die Fehleranalyse machen.
Sie können auch Befehle / Skripte gleichzeitig in separaten Unterschalen ausführen. Zum Beispiel;
./script1 & ./script2 & ./script3 &
Ein Hintergrundjob kann zur Befehlszeile zurückgebracht werden, bevor er mit dem Befehl beendet wird:
fg <job-number>
Die job-numberkann durch Laufen erhalten werden
jobs
2>&1leitet weiter stderrzu stdout.
stty tostopdass Hintergrundjobs angehalten werden, wenn sie versuchen, an das Terminal zu schreiben.
Wenn Sie verwenden &, läuft der Prozess im Hintergrund. Die Standardausgabe ist aber immer noch das Terminal.
Tatsächlich können Sie ping 8.8.8.8 &und find / -name '*test*' &zur gleichen Zeit ausführen (was zu einer gemischten Ausgabe führt), jedoch möglicherweise nicht ping 8.8.8.8und find / -name '*test*'zur gleichen Zeit auf derselben Shell.
Wenn Sie nichts sehen möchten, verwenden Sie etwas wie ping 8.8.8.8 &> /dev/null &.
Darüber hinaus möchten Sie vielleicht mehr über nohupund erfahren disown.
disownverhindert nicht, dass die Ausgabe auf das Terminal gedruckt wird.
/dev/null, dass eine Datei die Terminalausgabe umleiten soll, wenn die Ausgabe verworfen werden soll, anstatt sie irgendwo zu speichern. Und bin ich richtig , dass2>&1Umleitungenstderrzustdout? Vielleicht möchten Sie das auch klären ... Danke.