এটি মূলত একটি নেতিবাচক উত্তর। এটি প্রদর্শিত হয় যে না 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
32MB বাফার যথেষ্ট পরিমাণে বড় হওয়া সত্ত্বেও 32M আকারে আকার বৃদ্ধি করা আচরণটি পরিবর্তন করে না। আমি সন্দেহ করি যে 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
।