غیر فعال کردن Ctrl+D در پوسته Bash

فشردن کلید های Ctrl+D در پوسته های لینوکسی (مانند Bash) یک سگینال را به فرایند در حال اجرا وارد می کند. EOF یا End Of File تعیین کننده پایان یک فایل است و نشان دهنده اینکه دیگر داده ای از منبع داده نمی تواند خوانده شود. دستور زیر توسط cat از Standard Input کاراکتر هایی را خوانده و بعد از فشردن کلید Ctrl+D پروسه خواندن از ورودی استاندارد به پایان می رسد و در فایل ذخیره می شوند.

cat > filename

خواندن و ذخیره در فایل تا زمانی که کلید های Ctrl+D کلیک شوند ادامه می یابد و سپس عملیات هواندن از منبع وروی تمام شده و خط اعلان نشان داده می شود. در دستور بالا منبع وردی همان Standard Input یا stdin است. در مطلب “stty چیست” می توانید بیشتر با کلید های ترکیبی Ctrl+KEY آشنا شوید که هر کدام عملکردی در در خط فرمان دارند.

در صورتی که به یک سیستم لاگین کرده باشید و سپس کلید های Ctrl+D را کلیک کنید باعث Logout شدن می شود و این یعنی دیگر لازم نیست که از منبع ورودی، داده ای خوانده شود که در اینجا منبع ورودی نیز STDIN است. برای کنترل بر روی این کلید و جلوگیری از Logout می توان متغیر محیطی IGNOREEOF را تعیین کرد و یا اینکه از دستور set -0 ignoreeof استفاده کرد.

دستور زیر متغیر لازم ( که تمام حروف بزرگ هستند) را تعریف می کند.به جای مقدار 2 می نوان هر عدد دیگری را انتساب داد. البته عدد پیشفرض و منتسب به متغیر عدد ده است. به طور مثال عدد 2 یعنی پوسته تا دو بار اثر کلید های Ctrl+D را خنثی کرده و بار سوم Ctrl+D اثر خواد کرد.

export IGNOREEOF=2

در صورتی که کاربری کلید Ctrl+D را فشار دهد خطای زیر نشان داده می شود.

Use “exit” to leave the shell

برای از میان بردن متغیر باید آنرا با دستور زیر UNSET کنید.

unset IGNOREEOF

روش دیگر استفاده از دستور زیر است که هم می نوان در پوسته Bash و هم در پوسته ksh  استفاده کرد.

set -o ignoreeof

دستور بالا باعث می شود تا 11 مرنبه اثر کلید های Ctrl+D خنثی شود. برای از میان بردن اثر دستور بالا، باید از دستور زیر استفاده کرد

set +o ignoreeof