قدرت و کارایی عالی خط فرمان در گنو/لینوکس (12)

حتما همه دیدید که چطور بعضی برنامه های متنی مثل انواعی از ادیتورهای محیط متنی یا همون ترمینال لینوکس، متن رو بصورت رنگی نمایش میدن (اعم از زمینه و پیش زمینه)، بحالت چشمک زن، بحالت معکوس (رنگ زمینه و پیش زمینه جابجا میشه)، حتی زیرخط دار و حالتهای دیگهء موجود و ترکیبی از هرکدوم از اینها. شاید نمیدونستید که این قابلیتها در دسترس کاربر عادی سیستم هم هست و فقط از طریق برنامه نویسی، مثلا به زبان سی، بدست نمیاد. درواقع در اون برنامه ها و زبانهای برنامه نویسی هم کار اصلی (نمایش متن با خصوصیات مورد نظر) رو خود ترمینال هست که انجام میده؛ فقط کافیه یکسری رشته های کنترلی رو که برای ترمینال معنای خاصی دارن قبل از هر خروجی، مثل خروجیهای دیگه ارسال کنیم تا خروجی ارسال شدهء بعد از اون با اون ویژگیهای مورد نظر که توسط توالی کنترلی ارسال شده تعیین شدن نمایش داده بشه. البته تغییر حالت نمایشی کاراکترها، تنها قابلیت و کاربردش نیست و قابلیتهای دیگه ای داره که شاید بعضی جاها بهشون نیاز باشه و تقریبا به هیچ روش دیگه ای نشه حلشون کرد یا از راههای دیگه خیلی سختتر و پیچیده تر و حجیمتر ممکن باشه. بطور مثال فکر کنید شاید یک شمارنده، درصد و هرچیز متحرک یا مستلزم تغییر مثل اینها رو بخواید در میان یک متنی نمایش بدید در شل اسکریپت خودتون؛ با ترفندهای عادی کاری مشکل و وابسته به مکان اون قسمت در میان متن هست، حال اینکه با رشته های کنترلی میتونین مکان شروع کاراکترهای مورد نظر رو ذخیره و موقع لازم بازیابی کنید که این کار رو بسیار ساده و شدنی میکنه؛ فرقی نمیکنه که بقیهء متن رو تغییر بدید و جای شمارنده در صفحه تغییر بکنه. البته این یک مثال بالبداهه بود که گفتم و مطمئن نیستم کاملا مناسب و دقیق و معقول بوده باشه.

برای اطلاعات کامل راجع به توالیهای کنترلی موجود به این منبع مراجعه کنید:

http://en.wikipedia.org/wiki/ANSI_escape_code

اینهم یک مثال سادهء قابل اجرا برای درک سریع چگونگی بکار گیری (تست شده در BASH در Konsole):

echo -e "\n \0033[0mA\0033[7mB\0033[5mC\0033[32mD\0033[0m\0033[34mE\0033[47m\0033[4mDFG\0033[0m \0033[35mHIJ\0033[4mK\0033[0m\n";

قابل توجه هست که این قابلیت در داس و محیط متنی ویندوز هم بطور محدودتر و ناقصی وجود داره؛ به شکل لینوکس و بطور پیشفرض و Built in نیست و توسط درایوری بنام ansi.sys و لود کردنش توسط فایلهای پیکربندی مربوطه قابل دستیابی هست (بنده قدیم باهاش کار کرده بودم، ولی فکر میکردم امکاناتی از خود داس و جزو اون هست).
محیط لینوکس بنظر من در مجموع خیلی بهتر و مناسبتر و کاملتر این پشتیبانی رو ارایه داده که بصورت Built in و مطمئن و همیشگی درش وجود داره؛ بنابراین برنامه های تهیه شده، اعم از باینری اجرایی و شل اسکریپت و فرمان، با اطمینان و گستردگی خیلی بهتری در محیطهای مختلف کار میکنن و میتونیم این رو ویژگی ای عمومی فرض کنیم؛ حال اینکه در داس (مرحوم) و محیط متنی ویندوز عملا این قابلیت قابل تکیه نیست و بنابراین متروک و فراموش گشته.

البته همیشه به این توجه داشته باشید که پیاده سازیها روی سیستمهای مختلف باهم تفاوتهایی داره و اغلب همهء گزینه ها پشتیبانی نمیشن؛ برای اطمینان باید تست کنید.

توجه داشته باشید که خود این قابلیت، صرفنظر از شل و فرامینی که ازشون برای ارسال این توالیهای کنترلی استفاده میکنید، ویژگی ترمینال (یا در محیطهای گرافیکی، ترمینال امولیتور) هست و ارتباط مستقیمی با شل مورد استفادهء شما نداره. مثلا اگر بجای BASH از شل دیگری استفاده بشه قاعدتا نباید تفاوتی در اصل این قضایا پیدا بشه.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>