2016-01-13 9 views
6

Was ich versuche zu tun:Wie wird die Ausgabe eines Prozesses an den Logger-Befehl und an den Befehl head übergeben?

  • Starten Sie einen Prozess, der Text kontinuierlich ausgibt

  • Rohr die Ausgabe an zwei Befehle:

    1. Ein Logger Skript
    2. ' Kopf 'Befehl, so kann ich die ersten Zeilen die ursprüngliche Prozessausgabe speichern.

Was ich (unsuccessfuly) versucht, so weit ist:

./myProgram | tee > (myLogger log.txt) | head > firstLines.txt

Das Problem ist, dass die myProgram Ausfahrten sobald head beendet ist.

Auch wenn ich -i in tee Befehl verwende, kann ich myProgram nicht weiter laufen lassen.

Da der Logger den eingehenden Text an eine vorhandene Datei anhängen kann, funktioniert in diesem Fall die Ausführung head log.txt > firstLines.txt nicht.

+1

Schalten Sie die Reihenfolge um. Verwenden Sie '> (...)' für 'head' und die normale Pipe für Ihren Logger? –

+0

Das war meine erste Vermutung, aber ich habe es versucht und das Problem bleibt bestehen. –

+0

Nicht so elegante Lösung: Ausgabe in eine temporäre Datei, dann diese temporäre Datei an log.txt anhängen, dann Kopf temporäre Datei, dann temporäre Datei entfernen – Bartez

Antwort

1

Sie können awk als Alternative verwenden, beides zu tun:

./myProgram | 
    awk 'NR<=10{print > "firstLines.txt"} NR>10{close("firstLines.txt")} 1' > log.txt 
+1

Beat Sie um 8 Sekunden - was hat Sie gehalten? ;-) –

+1

lol :) ja ich weiß, diesen Thread spät geöffnet. – anubhava

+1

Funktioniert einwandfrei! Vielen Dank! – Stefano

1

Gefällt Ihnen dieses vielleicht:

yes | awk 'FNR<4 {print >>"file"; close("file")} 1' | more 

wo yes Ihr Programm ist, file ist, wo Sie die Ausgabe von head, und more senden ist Ihr Logger.

Verwandte Themen