
tee command
سلام
بیشک هرکسی که یه مدت با یکی از توزیعهای سیستم عامل گنو/لینوکس سر و کله بزنه و راهش به ترمینال بیوفته یا کارش به یه اسکریپت بش گیر کنه حتماً با بحث «Redirecting Input and Output» آشنایی داره. خلاصهوار عرض کنم که در این مبحث برای تحقق یکی از فلسفههای یونیکس مبنی بر «انجام کارهای پیچیده با ترکیب ابزارهای ساده» یاد میگیریم که چطور ورودی/خروجی برنامههای مختلف رو به هم انتقال بدیم. برای این کار از راهنمایی زیر استفاده میکنیم:
< انتقال خروجی استاندارد به فایل.
&< انتقال خروجی استاندارد و خروجی خطا به فایل.
<< اضافه کردن خروجی استاندارد به انتهای فایل.
&<< اضافه کردن خروجی استاندارد و خروجی خطا به فایل.
> انتقال ورودی استاندارد به دستور.
| انتقال خروجی استاندارد به دستور.
برخی اوقات لازمه که خروجی دستوری را علاوه بر انتقال به فایل مشاهده هم بکنیم، برای این کار مجبوری دستور را دوباره اجرا کرده و در یکی از آنها خروجی را به فایل انتقال دهیم. یک راهحل سادهی دیگر استفاده از دستور tee است. طبق فایل منوآل دستور، کار این دستور گرفتن خروجی استاندارد و انتقال همزمان آن به خروجی استاندارد و فایل مورد نظر است. نحوهی استفاده از این دستور به این شکل است که خروجی دستور مورد نظر را با استفاده از pipe (|) به دستور tee که اسم فایل به عنوان آرگومان برای آن مشخص شده است منتقل میشود. برای مثال:
$ ls | tee tmp.txt
حال اگر لازم باشد خروجی دستور دیگری را به انتهای فایل موجود اضافه کرده و ضمن این کار خروجی را در خروجی استاندارد نیز مشاهده کرد، باز میتوان از دستور tee استفاده کرد. برای این کار دستور را به همراه آپشن a به کار میگیریم. برای مثال اگر فایل tmp.txt حاوی خروجی دستور ls باشد با اجرای دستور زیر خروجی آن به انتهای فایل اضافه شده و به محتویات قبلی آن آسیبی نمیرسد.
ls | grep -i *.pdf | tee -a tmp.txt
نکته: میتوان خروجی را با استفاده از فرم زیر همزمان به چند فایل انتقال داد:
ls | tee file1 file2 file3
منابع:
- http://en.wikipedia.org/wiki/Tee_%28command%29
- man tee
- http://linux.101hacks.com/unix/tee-command-examples/