Ich schreibe ein Bash-Skript und möchte, dass der allerletzte Befehl als separater Prozess gestartet wird. Der letzte Befehl sendet auch alle Ausgaben in eine Datei. Ich möchte jedoch auch, dass die Ausgabe weiterhin auf der Konsole angezeigt wird. Was ich bisher habe, ist
$ command > "file" &
Dadurch wird die Ausgabe an "file" gesendet und der Befehl als eigener Prozess gestartet. Ich möchte jedoch auch gleichzeitig die Ausgabe in der Konsole anzeigen (aber wenn ich Strg + C oder W / E drücke, stoppt der Befehl nicht). Dies ist sehr ähnlich zu dieser Frage , aber mit dem Kaviat, dass es sein eigener Faden sein muss.
Ich habe versucht:
$ command | tee "file" &
Das Problem ist jedoch, dass tee nicht Teil des Prozesses ist und die Ausgabe nicht tatsächlich angezeigt wird.
Um das zu verdeutlichen, möchte ich command
einen eigenen Prozess haben, der die Ausgabe in eine Datei sendet, aber die Ausgabe immer noch in der Konsole anzeigen (bis ich q drücke, die Eingabetaste drücke, Strg + C oder so). Da es sich um ein Bash-Skript handelt, sind zwei separate Zeilen zulässig.
quelle
-n 0
Flagge bewirkt?> file; command > file & tail -n +1 -F file
odercommand > file & sleep 1; tail -n +1 -F file
gegen die Race - Bedingung zu schützen , in dem dertail
Prozess beginnt , bevor derfile
erstellt wird. In der ersten Option müssen Sie möglicherweise das Schreiben in eine bereits vorhandene Datei verwendencommand >> file
odercommand >| file
zulassen.touch file
eine Zeile vor hinzuzufügencommand
. In meinem Fall ist die Datei jedoch immer vorhanden.tail
Lesen gelöscht.