منبع اصلی نوشتار زیر در این لینک قرار دارد

intractive and non-intractive Shell چیست

یک intractive shell دستورات را از کاربران بر روی یک tty دریافت و خروجی را نشان می دهد. یک شل اسکریپت توسط non-intractive shell اجرا می شود.بطور مشابه (با دستورات) یک شل اسکریپت توسط tty قابل دسترسی است، بطوریکه توسط فرمان read درون یک شل اسکریپت کاربر با شل اسکریپت در تعامل است ولی شل اسکریپت توسط یک non-intractive shell اجرا می شود. دستور read درون شل اسکریپت یک ورودی از کاربر می گیرد (بجای Standard Input) و در یک متغیر ذخیره می کند. مثال زیر عملکردی از دستور read را نشان می دهد.

پس از اجرای اسکریپت بالا، از کاربر درخواست ورود نام می شود و نام ورودی در متغیر NAME$ ذخیره و در خط سوم چاپ می شود. اینگونه اسکریپت ها را که کاربر ورودی اسکریپت را می دهد غالبا intractive script گویند که از دستور read استفاده می کنند. اسکریپت های آغازین و startup script ها توسط non-intractive shell اجرا می شوند چون به صورت روتین ها و دستوراتی هستند که از بالا به پایین اجرا می شوند و نیازی به تعامل با کاربر ندارند. اینگونه اسکریپت ها را non-intractive script گویند و در پس زمینه اجرا می شوند.

چگون تسخیص دهیم که شِل بصورت intractive است یا غیر intractive است؟

متغیر محیطی به نام PS1 وجود دارد که در شل های intractive رشته اعلان یا Prompt را نگه می دارد. این متغیر تنها برای intractive shell ها وجود دارد. در دستور زیر یا استفاده از z- بررسی می کند که آیا طول رشته درون متغیر صفر است یا نه. در صورتی طول رشته برای متغیر PS1 برابر صفر است که در non-intractive shell (درون یک اسکریپت) باشیم. دستور زیر را یکبار درون یک شل اسکریپ و یکبار درون خط فرمان اجرا کنید تا متوجه تفاوت خروجی ها شوید. (قطعن در خط فرمان چون دستورات از کاربر برروی یک tty گرفته می شود پیغام this shell is intractive چاپ خواهد شد.)

روش دیگر استفاده از خطوط زیر است. خطوط زیر را درون یک فایل (اسکریپت) ذخیره و اجرا کنید. قطعا پام this shell is not intractive shell را خواهید دید؟. متغیر محیطی -$ اطلاعاتی درباره شل می دهد. در خط خروجی آن حرف i به معنی intractive وجود دارد. دلیل اینکه نوشتن دستور های زیر درون یک شل و دریافت خروجی this shell is not intractive این است که این متغیر تنها درون خود خط فرمان قایل شناسایی است نه درون یک شل اسکریپت.

یا اینکه از دستور زیر درون خط فرمان و درون یک شل اسکریپت استفاده و اجرا کنید.(تفسیر مانند بالا)



برچسب ها : , , , , , ,