از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
دستور Bash trap
سرفصلهای مطلب
یک توکار bash دستوری که برای اجرای یک فرمان زمانی که پوسته هر سیگنالی را دریافت می کند استفاده می شود «trap» نامیده می شود. زمانی که هر اتفاقی رخ می دهد bash اعلان را با هر سیگنالی ارسال می کند. بسیاری از سیگنال ها در دسترس هستند bash. رایج ترین سیگنال از bash SIGINT (وقفه سیگنال) است. زمانی که کاربر CTRL+C را فشار می دهد تا هر کدام را قطع کند process از terminal سپس این سیگنال برای اطلاع رسانی به سیستم ارسال می شود. روش استفاده از دستور trap برای مدیریت انواع سیگنال ها در این آموزش توضیح داده شده است.
نحو:
یا
کلید | شرح |
-ل | برای نمایش لیست تمام نام سیگنال ها با شماره مربوطه استفاده می شود. |
-پ | برای نمایش فرمان سیگنال یا فرمان تله برای signal_spec استفاده می شود. |
ارگ | زمانی که پوسته سیگنال(ها) را دریافت می کند، برای اجرای دستور استفاده می شود. |
signal_spec | این شامل نام سیگنال یا شماره سیگنال است. |
- دستور Trap بدون مقدار arg یا با مقدار arg ‘-‘ سیگنال مشخص شده را به مقدار اولیه خود بازنشانی می کند.
- دستور Trap با مقدار arg ‘null’ سیگنال مشخص شده ارسال شده توسط پوسته یا فرمان را نادیده می گیرد.
- یک signal_spec با مقدار، خروج (0) پس از خروج از پوسته، arg را اجرا می کند.
- یک signal_spec با مقدار اشکال زدایی arg را قبل از هر فرمان اجرا می کند.
- یک signal_spec با مقدار برگشت هنگامی که یک تابع پوسته اجرا می شود یا یک اسکریپت توسط “.” اجرا می شود، arg را اجرا می کند.
- یک signal_spec با مقدار اشتباه کن هر بار arg را اجرا خواهد کرد روی شکست فرمان
دستور Trap بدون هیچ گزینه و arg
دستور زیر را از terminal برای نمایش لیستی از تمام دستورات مرتبط با هر شرط. اگر دستور “trap” قبلا تنظیم نشده باشد، دستور زیر هیچ اطلاعاتی را نمایش نخواهد داد.
دستور Trap با گزینه -l
دستور زیر را از terminal برای نمایش لیست نام همه سیگنال ها با شماره.
خروجی دستور بالا لیستی از 64 سیگنال را با اعداد نشان می دهد.
دستور trap را برای ERR و EXIT تنظیم کنید
اولین دستور زیر یک دستور “trap” را تنظیم می کند که در صورت بروز هرگونه خطای پوسته یا خروج پوسته اجرا می شود. این دستور «trap» حذف خواهد شد temp.txt فایل از محل فعلی دستور ls برای بررسی استفاده می شود temp.txt فایل در مکان فعلی وجود دارد یا نه. در آخر خروج از دستور برای بستن استفاده می شود terminal و دستور “trap” را که قبلا تنظیم شده است اجرا کنید.
$ ls
$ خروج
پس از اجرای دستورات بالا خروجی زیر ظاهر می شود.
حال اگر کاربر در را باز کند terminal دوباره بعد از خروج و سپس دستور ls را اجرا می کند temp.txt فایل وجود نخواهد داشت
دستور تله را با شماره سیگنال SIGUP، SIGQUIT و SIGKILL تنظیم کنید
شماره سیگنال از SIGUP، SIGQUIT و SIGKILL 1، 3 و 9 هستند. دستور اول زیر یک تله برای این سه سیگنال تنظیم می کند. هنگامی که هر یک از این سیگنال ها رخ می دهد، پیام “دستور Trap اجرا می شود” اراده print. دستور زیر را از terminal.
زمانی که کاربر فشار خواهد داد Ctrl+C برای تولید سیگنال تخصیص توسط دستور ‘trap’ سپس `echo` دستور trap اجرا می شود و خروجی زیر ظاهر می شود.
دستور “trap” را برای SIGTERM در یک اسکریپت تنظیم کنید
SIGTERM سیگنال برای خاتمه استفاده می شود process بلافاصله با آزاد کردن منابع خود. ایجاد یک bash فایل با نام ‘trapscript.sh‘ با کد زیر یک حلقه for نامتناهی در اسکریپت اعلام شده است print یک متن به طور مداوم تا SIGTERM سیگنال رخ می دهد. کاربر باید فشار دهد Ctrl+Z برای تولید SIGTERM علامت.
trapscript.sh
# یک تله برای سیگنال های SIGINT و SIGTERM تنظیم کنید
تله “echo برنامه خاتمه یافته است.” SIGTERM SIGINT
#نمایش پیام برای تولید SIGTERM
echo “Ctrl+Z را فشار دهید تا متوقف شود process”
#Initialize متغیر شمارنده، i
من=1
#reclare infinite for loop
برای(;;)
انجام دادن
#چاپ پیام با شمارنده i
echo «اجرای حلقه برای $i بار”
# شمارنده را یک برابر افزایش دهید
((i++))
انجام شده
اسکریپت را با اجرای دستور زیر اجرا کنید و Ctrl+Z را فشار دهید تا تولید شود SIGTERM علامت. خروجی مشابه زیر ظاهر می شود.
یک دستور «trap» را برای اجرای یک تابع بر اساس تنظیم کنید روی سیگنال خاص
شما می توانید یک فرمان «trap» را با هر تابع تعریف شده توسط کاربر مرتبط کنید. ایجاد یک bash تحت عنوان trapfunc.sh و اسکریپت زیر را اضافه کنید. در اینجا، یک تابع سفارشی به نام func() اعلام شده است print یک پیام ساده “کار تکمیل شد”. یک حلقه for-in برای خواندن و تعریف شده است print لیست تمام فایل ها و پوشه های دایرکتوری فعلی. “تله”. دستوری که در ابتدای لیست تعریف شده است، تابع را فراخوانی می کند. func() زمانی که برنامه خاتمه می یابد.
trapfunc.sh
# تابع تابع تماس روی خروج
تله تابع خروج
# تابع را اعلام کنید
تابع تابع() {
echo “کار تکمیل شد”
}
# فایلها و پوشههای فهرست فهرست فعلی را با استفاده از حلقه for بخوانید
برای من که در *
انجام دادن
echo “$i“
انجام شده
اسکریپت را از قسمت اجرا کنید terminal.
اسکریپت را اجرا کنید.
خروجی زیر نشان می دهد که “کار تکمیل شد” متن پس از چاپ تمام فایل ها و پوشه های دایرکتوری فعلی چاپ می شود.
نتیجه
این آموزش نشان میدهد که چگونه میتوان از دستور «trap» در لینوکس برای انجام هر کار خودکاری استفاده کرد روی سیگنال تولید شده این به کاربران کمک می کند تا انواع مختلف خطاها را ردیابی کنند و با استفاده از این دستور اقدامات مناسبی را انجام دهند که می تواند قبلاً تعیین شود. بسیاری از برنامه ها یا اسکریپت ها منابع خاصی را هنگام اجرا در سیستم اختصاص می دهند. اگر هر برنامه یا اسکریپت در حال اجرا به طور غیر عادی خارج شود یا خاتمه یابد، منابع مورد استفاده آن برنامه مسدود می شوند. برای حل این مشکل می توان از دستور “trap” استفاده کرد. کار پاکسازی منابع را می توان به راحتی با استفاده از این دستور انجام داد. امیدواریم پس از مطالعه این آموزش، خواننده ایده روشنی از کاربردهای این دستور پیدا کند.
لطفا در صورت وجود مشکل در متن یا مفهوم نبودن توضیحات، از طریق دکمه گزارش نوشتار یا درج نظر روی این مطلب ما را از جزییات مشکل مشاهده شده مطلع کنید تا به آن رسیدگی کنیم
زمان انتشار: 1402-12-31 18:25:06