از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
Set –e در Bash چه می کند؟
سرفصلهای مطلب
افزونه های Bash را در لینوکس نصب کنید. اگر قبلاً نصب شده است، پس باید نسخه را ارتقا دهید زیرا نسخه باید بالای 4 باشد.
مثال 1
در اینجا، ما به یک فایل با کد Bash نیاز داریم. بنابراین، با استفاده از اوبونتو یک فایل با استفاده از دستور “touch” ایجاد کنید terminal. که به صورت زیر نوشته شده است:
ما در اینجا دو رویکرد را در پیش خواهیم گرفت. یکی استفاده از “set –e” در خارج از بدنه تابع در حالی که دیگری استفاده از آن در داخل تابع است. فایل “file1.sh” را در نظر بگیرید. زمانی که در حال نوشتن کد به زبان Bash هستیم، به فایلی با پسوند .sh نیاز داریم. این مثال با افزودن تابعی به نام “helo” سروکار دارد.
در این تابع، میخواهیم یک خط چاپ کنیم، بنابراین فقط از دستور echo برای نمایش پیام استفاده میکنیم. همانطور که یک تابع را در اینجا اعلام کرده ایم، فراخوانی تابع باید در اینجا مورد نیاز باشد. بنابراین در پایان از نام تابع به عنوان فراخوانی تابع استفاده کرده ایم. در اینجا “set-e” در ابتدای به معنای خارج از بدنه تابع استفاده می شود.
Set –e فقط مربوط به نوشتن یا تنظیم خطا در نمایش کد است.
ما از یک ویرایشگر متن ساده استفاده کرده ایم که به طور پیش فرض در سیستم اوبونتو وجود دارد.
حال، به سمت رویکرد دوم حرکت می کنیم که در آن باید از “set –e” در داخل تابع استفاده کنیم. ما تفاوت بین این رویکردها را خواهیم دید. کد داده شده را با جایگزین کردن “set –e” از خارج از بدنه تابع به داخل بدنه تابع “helo” ویرایش کنید، در حالی که کد باقی مانده مانند کد قبلی است. می توانید از تصویر درج شده بررسی کنید.
دوباره همان دستور را اجرا کنید روی را terminal برای گرفتن نتیجه
این بدان معنی است که “مجموعه -e” هنگامی که در داخل یا خارج از بدنه تابع استفاده می شود، هیچ تغییری ایجاد نمی کند.
مثال 2
این یک مثال کاملا آسان است که در آن پس از اعلامیه bash پسوند در یک فایل، از “set –e” در بدنه بیرونی تابع استفاده کرده ایم. “مجموعه -e” اجازه می دهد تا terminal برای پرتاب یک استثنا در جایی که خطا را پیدا می کند و سپس اجرای کد را متوقف می کند. سپس، تابع خطا در اینجا اعلام می شود. تنها هدف این تابع نمایش پیغام خطا به همراه شماره خطی است که حاوی خطا است.
نکته خاصی در این مثال وجود دارد که استفاده از کلمه کلیدی “trap” است. این کلمه کلیدی اجازه استفاده از یک تابع داخلی ERR را می دهد که شماره خط خطا را می گیرد و سپس آن را به تابع خطا ارسال می کند. برای این منظور از شناسایی و نمایش خطا، باید یک عبارت یا متغیری اضافه کنیم که در آن گنجانده نشده باشد. bash یا از برخی از خطوط معنی دار برای تغییر مقادیر نحو استفاده کنید.
طبق این کد، نتیجه باید خطای خط 10 را نشان دهد.
کد را اجرا کنید روی را terminal با استفاده از فایل میتوانید به این موضوع ربط دهید که نام فایل با شماره خط نشان داده میشود و استثنایی ایجاد میشود که نشان میدهد دستور یافت نشد. ثانیا، داشتن پیامی از تابع برای نشان دادن شماره خطی که در آن خطایی رخ داده است.
مثال 3
این مثال به استفاده از دو می پردازد bash فایل ها. یکی file1.sh و دیگری file2.sh. ابتدا file2.sh را در نظر بگیرید. در اینجا ما از “set –e” استفاده کرده ایم و در فایل دیگر استفاده نمی شود. به طور مشابه، در این فایل فقط ما از فراخوانی تابع استفاده کرده ایم، در حالی که کل بدنه تابع در فایل دیگر اعلام شده است. ما هر دو فایل را با استفاده از کلمه کلیدی “source” پیوند داده ایم تا تابعی که در اینجا انجام دادیم بتواند تابع را از فایل دیگر اجرا کند.
پس از آن، در فراخوانی تابع، یک کلمه نیز نمایش داده می شود.
“Helo” نام تابع است.
حالا فایل دیگر file1.sh را در نظر بگیرید. در این فایل تابع helo1() اعلام شده است. در بدنه تابع، فقط یک پیام نمایش داده ایم.
حرکت به سمت تابع دیگری که helo() است. این همان تابعی است که در اولین فایلی که در مورد آن صحبت کردیم با نام فراخوانی شد. در داخل این تابع، ما دوباره از فراخوانی تابع helo1() استفاده کرده ایم. این بالاتر از تابع فعلی در همان فایل اعلام شده است، بنابراین ما نیازی به پیوند هر دو فایل با استفاده از کلمه کلیدی “منبع” نداریم. با فراخوانی عملکرد، یک پیام نمایش داده می شود:
کل عملکرد به گونه ای انجام می شود که file2.sh را در قسمت اجرا می کنیم terminal. بنابراین، اولین فراخوانی تابع اجرا می شود و کنترل به سمت تابع helo() در file1.sh حرکت می کند. که این فراخوانی تابع را اجرا می کند و اکنون کنترل به سمت اولین تابع فایل حرکت می کند. بیایید ببینیم خروجی چگونه نمایش داده می شود.
اکنون می بینید که ابتدا کلمه از file2.sh نمایش داده می شود و سپس پیام تابع helo1() که عبارت است از “wait” و سپس پیام تابع helo(). همانطور که از “خروج 1” استفاده کرده ایم، کنترل به آن داده نمی شود، بنابراین هیچ نقشی از “set-e” وجود ندارد. اگر فراخوانی تابع مدیریت نشود، باید خطا وجود داشته باشد تا غالب شود.
مثال 4
این مثال حاوی درک کاملی از “مجموعه -e” است. در این مثال چهار تابع را در نظر بگیرید. همانطور که می دانیم از set –e داخلی برای خروج از کد زمانی که وضعیت غیر صفر دریافت می کند استفاده می شود. در این مثال، ما از “0” فقط برای یک تابع استفاده کرده ایم که تابع اول است. همه توابع دیگر 1 را برمیگردانند. این بدان معنی است که پس از نمایش اولین تابع، کد از اجرا خارج میشود. اما نمی شود. در اینجا از “set +e” استفاده کرده ایم که برعکس “set –e” است. هر زمان که “set –e” کد را مجبور به خاتمه اجرا کند، هر زمان که با مقدار غیر صفر مواجه شود، کد مقابل با آن مخالفت خواهد کرد. “set +e” قبل از فراخوانی تابع دو تابع اول و “set –e” قبل از فراخوانی تابع دو متد آخر اعلام می شود.
در حال حاضر، دو تابع اول اجرا خواهد شد. در تابع دوم، از آنجایی که یک مقدار غیر صفر است، کامپایلر مجبور می شود یک خطا ایجاد کند اما “set +e” مقدار را خنثی می کند. هنگامی که زمان عملکرد سوم فرا می رسد، هر دو پیام با اکو نمایش داده می شوند، اما زمانی که کنترل به مقدار “بازگشت 1” رفت، کد متوقف می شود. همانطور که در اینجا، ما از “set +e” استفاده نکردیم. به همین دلیل است که تابع 4 در اینجا اجرا نمی شود.
کد را در terminal به طوری که مقدار حاصل را خواهید دید.
نتیجه
این آموزش کارکرد “set –e” را نشان می دهد. در مثالها، برای خاتمه دادن به اجرا از این طریق استفاده میشود. با این حال، حریف “set +e” نیز در اینجا برای نشان دادن کار استفاده می شود.
لطفا در صورت وجود مشکل در متن یا مفهوم نبودن توضیحات، از طریق دکمه گزارش نوشتار یا درج نظر روی این مطلب ما را از جزییات مشکل مشاهده شده مطلع کنید تا به آن رسیدگی کنیم
زمان انتشار: 1402-12-30 15:02:03