Bu temelde olumsuz bir cevaptır. Özellikle üretici tarafından üretilen veri oranı çok değişebiliyorsa dd
, ne olduğu mbuffer
, ne de pv
işe yaradığı görülmektedir. Aşağıda bazı test senaryoları veriyorum. Komutu yazdıktan sonra, yaklaşık 10 saniye bekleyin, sonra yazın >
(verinin sonuna gitmek, yani girişin bitmesini bekleyin).
zsh -c 'echo foo0; sleep 3; \
printf "Line %060d\n" {1..123456}; \
echo foo1; sleep 5; \
echo foo2' | dd bs=64K | less
Burada, yazdıktan sonra >
, 5 saniye beklemek zorunda, yani üreticinin (zsh script) önce bloke olduğu anlamına gelir sleep 5
. Artan bs
32MB tampon yeterince büyük olsa mesela 32M boyutu, davranışı değiştirmez. Bunun dd
girişle devam etmek yerine çıkıştaki bloklardan kaynaklandığından şüpheleniyorum . oflag=nonblock
Verileri attığı için kullanmak bir çözüm değildir.
zsh -c 'echo foo0; sleep 3; \
printf "Line %060d\n" {1..123456}; \
echo foo1; sleep 5; \
echo foo2' | mbuffer -q | less
İle mbuffer
, sorun ilk satırı (foo0) hemen görünmez olmasıdır. Girişte satır arabelleğe almayı etkinleştirmek için herhangi bir seçenek yok gibi görünüyor.
zsh -c 'echo foo0; sleep 3; \
printf "Line %060d\n" {1..123456}; \
echo foo1; sleep 5; \
echo foo2' | pv -q -B 32m | less
İle pv
, davranış benzer dd
. Daha da kötüsü, bazen terminalden less
girdi alamadığı için terminalde yanlış şeyler yaptığından şüpheleniyorum ; örneğin, biriyle çıkamazsınız q
.