گزینهها تنظیماتی هستند که رفتار پوسته و/یا اسکریپت را تغییر میدهند.
فرمان set گزینهها را در داخل اسکریپت فعال میکند. در نقطهای از اسکریپت، جایی که میخواهید گزینهها اثر کنند از set -o option_name یا، از شکل کوتاه set -option_abbrev استفاده کنید. این دو شکل معادل هم هستند.
#!/bin/bash set -o verbose #تمام فرمانها قبل از اجرا نمایش داده میشوند.
#!/bin/bash set -v #دقیقاً همان نتیجه بالا.
برای از کار انداختن یک گزینه در داخل اسکریپت، set +o option_name یا set +option_abbrev را به کار ببرید. |
#!/bin/bash set -o verbose #نمایش فرمان روشن. command ... command set +o verbose #نمایش فرمان خاموش. command #منعکس نمیشود. set -v #نمایش فرمان روشن. command ... command set +v #نمایش فرمان خاموش. command exit 0
یک شیوه جایگزین برای فعال کردن گزینهها در یک اسکریپت، ذکر کردن آنها بلافاصله بعد از سرآیند اسکریپت #! است.
#!/bin/bash -x # #بدنه اسکریپت ادامه مییابد.
فعال کردن گزینهها، از خط فرمان نیز امکانپذیر است. برخی گزینهها که با set کار نمیکنند، در این روش قابل استفاده هستند. از جمله اینها، -i، اجبار اسکریپت به اجرا شدن به صورت محاورهای، است.
bash -v script_name
bash -o verbose script_name
در ادامه لیست برخی گزینههای سودمند آمده است. اینها میتوانند با استفاده از شکل مختصر شده (با قرار دادن خط تیره جلوی آنها) یا به وسیله نام کامل (با قرار دادن خط تیره دوتایی جلوی آنها یا به وسیله -o) مشخص بشوند.
جدول 33-1. گزینههای Bash
مخفف | نام | نتیجه |
---|---|---|
-B | brace expansion | فعال کردن بسط ابرو (تنظیم پیشفرض = on) |
+B | brace expansion | غیر فعال کردن بسط ابرو |
-C | noclobber | از رونویسی فایلها به وسیله تغییر مسیر پیشگیری میکند (توسط >| میتواند پایمال بشود) |
-D | (none) | رشتههای نقلقولی دوگانه را که به وسیله $ پیشوند شدهاند، نمایش میدهد، اما فرمانها را در اسکریپت اجرا نمیکند |
-a | allexport | تمام متغیرهای تعریف شده را export میکند |
-b | notify | وقتی jobهای در حال اجرا در پسزمینه خاتمه مییابند اعلام میکند (در اسکریپت مورد استفادهای ندارد) |
-c ... | (none) | خواندن فرمانها از ... |
checkjobs | به مجرد خروج پوسته، کاربر را از هر job باز مطلع میسازد. در Bash نگارش 4 معرفی شده است، و هنوز آزمایشی است. نحوه کاربرد: shopt -s checkjobs (احتیاط: ممکن است هنگ کند!) | |
-e | errexit | لغو اسکریپت در اولین خطا، موقعی که یک فرمان با وضعیت غیر صفر خارج شود (به جز در حلقههای until یا while، تستهای if، ساختارهای لیست) |
-f | noglob | بسط نامفایل (globbing) غیر فعال میشود |
globstar | globbing star-match | عملگر ** در globbing را فعال میکند (از Bash نگارش 4+). نحوه کاربرد: shopt -s globstar |
-i | interactive | اسکریپت در حالت محاورهای اجرا میگردد |
-n | noexec | فرمانهای اسکریپت را میخواند، اما آنها را اجرا نمیکند (بازرسی گرامری) |
-o Option_Name | (none) | فراخوانی گزینه Option_Name |
-o posix | POSIX | تغییر رفتار Bash، یا اسکریپت فراخوانی شده برای مطابقت کردن با استاندارد POSIX. |
-o pipefail | pipe failure | باعث میشود یک خط لوله وضعیت خروج آخرین فرمان در لوله را که یک مقدار برگشتی غیر صفر برگشت داده است به ما برگرداند. |
-p | privileged | اسکریپت را به صورت «suid» اجرا میکند (احتیاط!) |
-r | restricted | اسکریپت در حالت محدود شده اجرا میگردد (فصل 22 را ببینید). |
-s | stdin | فرمانها را از stdin میخواند |
-t | (none) | خروج بعد از اولین فرمان |
-u | nounset | تلاش برای استفاده از متغیر تعریف نشده پیغام خطایی بیرون میدهد، و اسکریپت را وادار به خروج میکند |
-v | verbose | هر فرمان را قبل از اجرای آن در stdout چاپ میکند |
-x | xtrace | مشابه با -v، اما فرمانها را بسط میدهد |
- | (none) | پایان نشانه گزینهها. تمام شناسههای دیگر پارامترهای مکانی هستند. |
-- | (none) | Unset کردن پارامترهای مکانی. اگر شناسههای داده شده (-- arg1 arg2)، پارامترهای مکانی به شناسهها تنظیم شوند. |