UNBUFFER(1) General Commands Manual UNBUFFER(1)

unbuffer - غیرفعال‌سازی بافربندی خروجی

unbuffer برنامه [ آرگومان‌ها ]

unbuffer بافربندی خروجی را که هنگام تغییر مسیر خروجی برنامه‌های غیرتعاملی رخ می‌دهد، غیرفعال می‌کند. برای مثال، فرض کنید در حال مشاهده خروجی یک fifo با هدایت آن از طریق od و سپس more هستید.

od -c /tmp/fifo | more

تا زمانی که یک صفحه کامل از خروجی تولید نشود، چیزی مشاهده نخواهید کرد.

می‌توانید این بافربندی خودکار را به صورت زیر غیرفعال کنید:

unbuffer od -c /tmp/fifo | more
به‌طور معمول، unbuffer از ورودی استاندارد (stdin) نمی‌خواند. این ویژگی استفاده از unbuffer را در برخی شرایط ساده‌تر می‌کند. برای استفاده از unbuffer در یک خط لوله (pipeline)، از گزینه -p استفاده کنید. مثال:
process1 | unbuffer -p process2 | process3

در صورتی که فرآیند ارسال‌کننده ورودی به unbuffer پایان یابد، ممکن است به نظر برسد که unbuffer -p به‌درستی کار نمی‌کند. این حالت را در نظر بگیرید:

process1 | unbuffer -p process2 | process3

اگر process1 پایان یابد، ممکن است کار process2 هنوز تمام نشده باشد. برای unbuffer غیرممکن است بداند چه مدت باید منتظر process2 بماند و حتی ممکن است process2 هرگز پایان نیابد؛ برای نمونه هنگامی که یک فیلتر باشد. به‌دلیل سهولت و مصلحت، unbuffer به محض مواجهه با EOF (پایان فایل) از سمت ورودی خود یا از سمت process2، به‌سادگی خارج می‌شود.

برای داشتن نسخه‌ای از unbuffer که در تمامی شرایط کار کند، به یک پیشگو (oracle) نیاز خواهد بود. اگر راه‌حلی ویژه برای برنامه‌ای خاص می‌خواهید، روش‌های جایگزین یا اسکریپت‌نویسی دستی با Expect شاید مناسب‌تر باشند. برای مثال، نمونه زیر نشان می‌دهد که چگونه می‌توان به grep اجازه داد پردازش خود را تکمیل کند در حالی که دستور cat پیش از آن زودتر پایان می‌یابد. استفاده از cat برای ارسال ورودی به grep در واقعیت هیچ‌گاه به unbuffer نیازی ندارد؛ این تنها یک جایگزین فرضی برای فرآیندی است که ممکن است پایان یابد یا نیابد. به همین ترتیب، دستور cat پایانی در انتهای خط لوله نیز جایگزینی فرضی برای فرآیندی دیگر است.

$ cat /tmp/abcdef.log | grep abc | cat
abcdef
xxxabc defxxx
$ cat /tmp/abcdef.log | unbuffer grep abc | cat
$ (cat /tmp/abcdef.log ; sleep 1) | unbuffer grep abc | cat
abcdef
xxxabc defxxx
$

این صفحه راهنما از خود برنامه طولانی‌تر است.

"Exploring Expect: A Tcl-Based Toolkit for Automating Interactive Programs" نوشته Don Libes، انتشارات O'Reilly and Associates، ژانویه ۱۹۹۵.

Don Libes، مؤسسه ملی استانداردها و فناوری (NIST)

1 June 1994