وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

دستور Bash trap

0 7
زمان لازم برای مطالعه: 4 دقیقه


یک توکار bash دستوری که برای اجرای یک فرمان زمانی که پوسته هر سیگنالی را دریافت می کند استفاده می شود «trap» نامیده می شود. زمانی که هر اتفاقی رخ می دهد bash اعلان را با هر سیگنالی ارسال می کند. بسیاری از سیگنال ها در دسترس هستند bash. رایج ترین سیگنال از bash SIGINT (وقفه سیگنال) است. زمانی که کاربر CTRL+C را فشار می دهد تا هر کدام را قطع کند process از terminal سپس این سیگنال برای اطلاع رسانی به سیستم ارسال می شود. روش استفاده از دستور trap برای مدیریت انواع سیگنال ها در این آموزش توضیح داده شده است.

نحو:

تله [-lp] [[arg] سیگنال_مشخصات …]

یا

تله [action] [signal]
کلید شرح
برای نمایش لیست تمام نام سیگنال ها با شماره مربوطه استفاده می شود.
برای نمایش فرمان سیگنال یا فرمان تله برای 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 سیگنال را با اعداد نشان می دهد.

پیشنهاد می‌کنیم بخوانید:  چگونه از حالت موس Tmux استفاده کنیم؟

دستور Bash trap

دستور trap را برای ERR و EXIT تنظیم کنید

اولین دستور زیر یک دستور “trap” را تنظیم می کند که در صورت بروز هرگونه خطای پوسته یا خروج پوسته اجرا می شود. این دستور «trap» حذف خواهد شد temp.txt فایل از محل فعلی دستور ls برای بررسی استفاده می شود temp.txt فایل در مکان فعلی وجود دارد یا نه. در آخر خروج از دستور برای بستن استفاده می شود terminal و دستور “trap” را که قبلا تنظیم شده است اجرا کنید.

$ تله “rm temp.txt” اشتباه کن خروج

$ ls

$ خروج

پس از اجرای دستورات بالا خروجی زیر ظاهر می شود.

دستور Bash trapدستور Bash trap

حال اگر کاربر در را باز کند terminal دوباره بعد از خروج و سپس دستور ls را اجرا می کند temp.txt فایل وجود نخواهد داشت

دستور تله را با شماره سیگنال SIGUP، SIGQUIT و SIGKILL تنظیم کنید

شماره سیگنال از SIGUP، SIGQUIT و SIGKILL 1، 3 و 9 هستند. دستور اول زیر یک تله برای این سه سیگنال تنظیم می کند. هنگامی که هر یک از این سیگنال ها رخ می دهد، پیام “دستور Trap اجرا می شود” اراده print. دستور زیر را از terminal.

$ تله ‘echo دستور Trap اجرا شد 1 3 9

زمانی که کاربر فشار خواهد داد Ctrl+C برای تولید سیگنال تخصیص توسط دستور ‘trap’ سپس `echo` دستور trap اجرا می شود و خروجی زیر ظاهر می شود.

دستور Bash trapدستور Bash trap

دستور “trap” را برای SIGTERM در یک اسکریپت تنظیم کنید

SIGTERM سیگنال برای خاتمه استفاده می شود process بلافاصله با آزاد کردن منابع خود. ایجاد یک bash فایل با نام ‘trapscript.sh‘ با کد زیر یک حلقه for نامتناهی در اسکریپت اعلام شده است print یک متن به طور مداوم تا SIGTERM سیگنال رخ می دهد. کاربر باید فشار دهد Ctrl+Z برای تولید SIGTERM علامت.

trapscript.sh

#!/صندوقچه/bash

# یک تله برای سیگنال های SIGINT و SIGTERM تنظیم کنید
تله “echo برنامه خاتمه یافته است.” SIGTERM SIGINT

#نمایش پیام برای تولید SIGTERM
echo “Ctrl+Z را فشار دهید تا متوقف شود process”

#Initialize متغیر شمارنده، i
من=1

#reclare infinite for loop
برای(;;)
انجام دادن

پیشنهاد می‌کنیم بخوانید:  جمع و تفریق ساده اعداد در Bash

#چاپ پیام با شمارنده i

echo «اجرای حلقه برای $i بار
# شمارنده را یک برابر افزایش دهید

((i++))
انجام شده

اسکریپت را با اجرای دستور زیر اجرا کنید و Ctrl+Z را فشار دهید تا تولید شود SIGTERM علامت. خروجی مشابه زیر ظاهر می شود.

$ bash trapscript.sh

دستور Bash trapدستور Bash trap

یک دستور «trap» را برای اجرای یک تابع بر اساس تنظیم کنید روی سیگنال خاص

شما می توانید یک فرمان «trap» را با هر تابع تعریف شده توسط کاربر مرتبط کنید. ایجاد یک bash تحت عنوان trapfunc.sh و اسکریپت زیر را اضافه کنید. در اینجا، یک تابع سفارشی به نام func() اعلام شده است print یک پیام ساده “کار تکمیل شد”. یک حلقه for-in برای خواندن و تعریف شده است print لیست تمام فایل ها و پوشه های دایرکتوری فعلی. “تله”. دستوری که در ابتدای لیست تعریف شده است، تابع را فراخوانی می کند. func() زمانی که برنامه خاتمه می یابد.

trapfunc.sh

#!/صندوقچه/bash
# تابع تابع تماس روی خروج
تله تابع خروج
# تابع را اعلام کنید
تابع تابع() {

echo “کار تکمیل شد”
}
# فایل‌ها و پوشه‌های فهرست فهرست فعلی را با استفاده از حلقه for بخوانید
برای من که در *
انجام دادن

echo $i
انجام شده

اسکریپت را از قسمت اجرا کنید terminal.

اسکریپت را اجرا کنید.

$ bash trapfunc.sh

خروجی زیر نشان می دهد که “کار تکمیل شد” متن پس از چاپ تمام فایل ها و پوشه های دایرکتوری فعلی چاپ می شود.

دستور Bash trapدستور Bash trap

نتیجه

این آموزش نشان می‌دهد که چگونه می‌توان از دستور «trap» در لینوکس برای انجام هر کار خودکاری استفاده کرد روی سیگنال تولید شده این به کاربران کمک می کند تا انواع مختلف خطاها را ردیابی کنند و با استفاده از این دستور اقدامات مناسبی را انجام دهند که می تواند قبلاً تعیین شود. بسیاری از برنامه ها یا اسکریپت ها منابع خاصی را هنگام اجرا در سیستم اختصاص می دهند. اگر هر برنامه یا اسکریپت در حال اجرا به طور غیر عادی خارج شود یا خاتمه یابد، منابع مورد استفاده آن برنامه مسدود می شوند. برای حل این مشکل می توان از دستور “trap” استفاده کرد. کار پاکسازی منابع را می توان به راحتی با استفاده از این دستور انجام داد. امیدواریم پس از مطالعه این آموزش، خواننده ایده روشنی از کاربردهای این دستور پیدا کند.

برای نگارش بخشهایی از این متن ممکن است از ترجمه ماشینی یا هوش مصنوعی GPT استفاده شده باشد
لطفا در صورت وجود مشکل در متن یا مفهوم نبودن توضیحات، از طریق دکمه گزارش نوشتار یا درج نظر روی این مطلب ما را از جزییات مشکل مشاهده شده مطلع کنید تا به آن رسیدگی کنیم

زمان انتشار: 1402-12-31 18:25:06

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید