Ini pada dasarnya adalah jawaban negatif. Tampaknya tidak ada dd
, atau mbuffer
bahkan tidak pv
berfungsi adalah semua kasus, khususnya jika tingkat data yang dihasilkan oleh produsen dapat sangat bervariasi. Saya memberikan beberapa testcases di bawah ini. Setelah mengetik perintah, tunggu sekitar 10 detik, lalu ketik >
(untuk pergi ke akhir data, yaitu menunggu akhir input).
zsh -c 'echo foo0; sleep 3; \
printf "Line %060d\n" {1..123456}; \
echo foo1; sleep 5; \
echo foo2' | dd bs=64K | less
Di sini, setelah mengetik >
, seseorang harus menunggu selama 5 detik, artinya produser (skrip zsh) telah memblokir sebelum sleep 5
. Menambah bs
ukuran menjadi misalnya 32M tidak mengubah perilaku, meskipun buffer 32MB cukup besar. Saya menduga bahwa ini karena dd
blok pada output bukannya melanjutkan input. Menggunakan oflag=nonblock
bukanlah solusi karena ini membuang data.
zsh -c 'echo foo0; sleep 3; \
printf "Line %060d\n" {1..123456}; \
echo foo1; sleep 5; \
echo foo2' | mbuffer -q | less
Dengan mbuffer
, masalahnya adalah baris pertama (foo0) tidak segera muncul. Tampaknya tidak ada opsi untuk mengaktifkan buffer-line pada input.
zsh -c 'echo foo0; sleep 3; \
printf "Line %060d\n" {1..123456}; \
echo foo1; sleep 5; \
echo foo2' | pv -q -B 32m | less
Dengan pv
, perilaku tersebut mirip dengan dd
. Lebih buruk lagi, saya curiga bahwa itu melakukan hal-hal yang salah ke terminal karena kadang less
- kadang tidak dapat lagi menerima input dari terminal; misalnya, seseorang tidak dapat berhenti dengannya q
.