यह मूल रूप से एक नकारात्मक जवाब है। ऐसा प्रतीत होता है कि न तो dd
, और न ही mbuffer
, न ही pv
काम करता है सभी मामलों में विशेष रूप से है, निर्माता द्वारा उत्पन्न डेटा की दर एक बहुत अलग-अलग हो सकते हैं। मैं नीचे कुछ टेस्टकेस देता हूं। कमांड टाइप करने के बाद, लगभग 10 सेकंड तक प्रतीक्षा करें, फिर टाइप करें >
(डेटा के अंत तक जाने के लिए, यानी इनपुट के अंत तक प्रतीक्षा करें)।
zsh -c 'echo foo0; sleep 3; \
printf "Line %060d\n" {1..123456}; \
echo foo1; sleep 5; \
echo foo2' | dd bs=64K | less
यहां, टाइप करने के बाद >
, 5 सेकंड के लिए इंतजार करना पड़ता है, जिसका अर्थ है कि निर्माता (zsh स्क्रिप्ट) ने पहले ब्लॉक कर दिया है sleep 5
। bs
आकार में वृद्धि करने के लिए उदाहरण के लिए 32M व्यवहार में बदलाव नहीं करता है, हालांकि 32 एमबी बफर काफी बड़ा है। मुझे संदेह है कि यह dd
इनपुट के साथ जाने के बजाय आउटपुट पर ब्लॉक है। उपयोग करना oflag=nonblock
एक समाधान नहीं है क्योंकि यह डेटा को डिस्क्राइब करता है।
zsh -c 'echo foo0; sleep 3; \
printf "Line %060d\n" {1..123456}; \
echo foo1; sleep 5; \
echo foo2' | mbuffer -q | less
इसके साथ mbuffer
, समस्या यह है कि पहली पंक्ति (foo0) तुरंत दिखाई नहीं देती है। इनपुट पर लाइन-बफ़रिंग को सक्षम करने के लिए कोई विकल्प प्रतीत नहीं होता है।
zsh -c 'echo foo0; sleep 3; \
printf "Line %060d\n" {1..123456}; \
echo foo1; sleep 5; \
echo foo2' | pv -q -B 32m | less
के साथ pv
, व्यवहार के समान है dd
। इससे भी बदतर, मुझे संदेह है कि यह टर्मिनल के लिए गलत काम करता है क्योंकि कभी-कभी टर्मिनल से less
इनपुट प्राप्त नहीं किया जा सकता है; उदाहरण के लिए, कोई इसे छोड़ नहीं सकता है q
।