فصل ‎33‎- گزینه‌ها

گزینه‌ها تنظیماتی هستند که رفتار پوسته و/یا اسکریپت را تغییر می‌دهند.

فرمان 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)‎، پارامترهای مکانی به شناسه‌ها تنظیم شوند.