Dies ist im Grunde eine negative Antwort. Es scheint, dass weder dd
noch mbuffer
noch gar nichts pv
funktioniert, insbesondere wenn die vom Hersteller generierte Datenrate sehr unterschiedlich sein kann. Ich gebe einige Testfälle unten. Warten Sie nach der Eingabe des Befehls etwa 10 Sekunden und geben Sie dann Folgendes ein >
(um zum Ende der Daten zu gelangen, dh bis zum Ende der Eingabe zu warten).
zsh -c 'echo foo0; sleep 3; \
printf "Line %060d\n" {1..123456}; \
echo foo1; sleep 5; \
echo foo2' | dd bs=64K | less
Hier muss man nach dem Tippen >
5 Sekunden warten, was bedeutet, dass der Produzent (zsh script) vor dem blockiert hat sleep 5
. Das Erhöhen der bs
Größe auf z. B. 32 MB ändert nichts am Verhalten, obwohl der 32-MB-Puffer groß genug ist. Ich vermute, das liegt daran, dass die dd
Ausgabe blockiert wird, anstatt mit der Eingabe fortzufahren. Verwenden oflag=nonblock
ist keine Lösung, da hierdurch Daten verworfen werden.
zsh -c 'echo foo0; sleep 3; \
printf "Line %060d\n" {1..123456}; \
echo foo1; sleep 5; \
echo foo2' | mbuffer -q | less
Mit mbuffer
ist das Problem , dass die erste Zeile (foo0) nicht sofort angezeigt. Es scheint keine Option zu geben, um die Zeilenpufferung bei der Eingabe zu aktivieren.
zsh -c 'echo foo0; sleep 3; \
printf "Line %060d\n" {1..123456}; \
echo foo1; sleep 5; \
echo foo2' | pv -q -B 32m | less
Mit pv
ist das Verhalten ähnlich dd
. Schlimmer noch, ich vermute, dass es falsche Dinge mit dem Terminal tut, da manchmal less
keine Eingaben mehr vom Terminal empfangen werden können. zum Beispiel kann man es nicht mit beenden q
.