Alternative zu "Kopf", der nicht beendet wird?

13

Ich brauche ein Dienstprogramm, das die ersten n Zeilen druckt, dann aber weiterläuft und die restlichen Zeilen aufsaugt, sie aber nicht druckt. Ich benutze es, um das Terminal nicht mit der Ausgabe eines Prozesses zu überfordern, der weiter ausgeführt werden muss (es schreibt die Ergebnisse in eine Datei).

Ich dachte, ich kann process | {head -n 100; cat > /dev/null}, aber gibt es etwas eleganteres?

IttayD
quelle
2
Der Vorgang wird nach dem Druckvorgang fortgesetzt, es wird nur nicht mehr auf dem Terminal gedruckt.
123
7
Welches Problem versuchen Sie tatsächlich zu lösen?
Satō Katsura
2
Was meinst du damit, sie zu lutschen? Wenn Sie nur zum Kopf leiten, wird die verbleibende Ausgabe verworfen.
Julie Pelletier
7
@JuliePelletier und stdout werden geschlossen und gut geschriebene Programme (die sowieso nur nach stdout schreiben) werden dies bemerken und vorzeitig beenden.
cas
@castrap '' PIPE
Satō Katsura

Antworten:

22

So "saugen" Sie die Ausgabe weiter auf, processwährend Sie nur die ersten 100 (oder was auch immer) Zeilen drucken :

process | awk 'NR<=100'

Oder:

process | sed -n '1,100p'
John1024
quelle
13
Ich benutze normalerweise nur... | tee /dev/null | head ...
David Schwartz
2
@ DavidSchwartz yep - es ist, was ich tun würde. Weitaus bevorzugter, da Sie auch die gesamte Ausgabe in einer Datei sichern und zu einem späteren Zeitpunkt untersuchen können. Sie wissen nie, wann dies erforderlich sein wird - im schlimmsten Fall haben Sie eine Datei, die Sie gelegentlich überschreiben, bestenfalls können Sie sie als Protokoll verwenden, um zu analysieren, was / warum passiert ist.
VLAZ