کدهای خروج با معانی خاص

پیوست ‎E‎- کدهای خروج با معانی خاص

جدول ‎E-1‎. کدهای خروج ذخیره شده Exit Codes

کد خروجمعنیمثالتوضیحات
1 کدی برای خطاهای عمومی let "var1 = 1/0" خطاهای مختلف، از قبیل «تقسیم بر صفر» و سایر عملیات غیر مجاز
2 استفاده نادرست از دستورات داخلی پوسته (بر طبق مستندات Bash) empty_function() {} غیبت کلید واژه یا فرمان، یا مشکل مجوز (و کد برگشتی diff در یک مقایسه ناموفق فایل باینری).
126 فرمان احضار شده نمی‌تواند اجرا گردد /dev/null مشکل مجوز یا فرمان یک فایل اجرایی نیست
127 «فرمان پیدا نشد» illegal_command مشکل احتمالی با ‎$PATH‎ یا یک اشتباه تایپی
128 شناسه نامعتبر برای exit exit 3.14159 exit فقط شناسه‌های صحیح در محدوده ‎0‎ تا ‎255‎ قبول می کند (زیرنویس اول را ببینید)
128+n خطای مهلک سیگنال «n» kill -9 $PPID of script ‎$?‎ کد ‎137‎ ‏(‎128 + 9‎) را برگشت می‌دهد
130 اسکریپت به وسیله ‎Control-C‎ خاتمه داده شد Ctl-C ‎Control-C‎ یک سیگنال خطای مهلک ‎2‎ است، (‎130 = 128 + 2‎، بالا را ببینید)
255* وضعیت خروجِ خارج از حدود مجاز exit -1 exit فقط شناسه‌های عدد صحیح در محدوده ‎0‎ تا ‎255‎ می‌گیرد

مطابق جدول فوق، کدهای خروجِ ‎1 - 2‎،‏ ‎126 - 165‎، و ‎255‎ ‏‎[1]‎ دارای معانی خاصی هستند، و بنابراین کاربر باید از مشخص نمودن آنها به عنوان پارامتر exit پرهیز نماید. خاتمه یک اسکریپت با ‎exit 127‎ به طور حتم موقع عیب‌یابی باعث سر در گمی می‌شود (آیا کد یک خطای «‎command not found‎» است یا یک خطای تعیین شده کاربر؟). به هر حال بسیاری از اسکریپت‌ها یک ‎exit 1‎ را به عنوان یک خطای کلی خروج به محض خطا، به کار می‌برند. چون کد خروج ‎1‎ دلالت بر بسیاری از خطاهای محتمل می‌نماید، این مخصوصاً در اشکالزدایی مفید نیست.

کوششی برای با قاعده نمودن شماره‌های وضعیت خروج به عمل آمده است (‎/usr/include/sysexits.h‎ را ببینید)، اما این استاندارد برای برنامه‌‌نویسان ‎C‎ و ‎C++‎ طراحی گردیده است. یک استاندارد مشابه برای اسکریپت‌نویسی می‌تواند مناسب باشد. نویسنده این سند منحصر نمودن کدهای خروج تعریف شده کاربر به محدوده ‎64‎ تا ‎113‎ ‏(به اضافه ‎0‎ برای موفقیت) را، برای همنوایی با استاندارد ‎C/C++‎ پیشنهاد می‌کند. این پیشنهاد ‎50‎ کد معتبر را تخصیص خواهد داد، و عیب‌یابی اسکریپت‌ها را آسان‌تر می‌سازد. ‎[2]‎ تمام کدهای خروج تعریف شده کاربر در مثال‌های همراه این سند از این استاندارد پیروی می کنند، به جز در جایی که شرایط موجود آن را باطل می‌کند، همچون در مثال ‎9-2‎.

پس از خروج اسکریپت پوسته، صادر نمودن یک ‎$?‎ از خط فرمان، فقط از اعلان Bash یا sh نتایج سازگار با جدول فوق را ارایه می‌دهد. اجرای ‎C-shell‎ یا tcsh ممکن است در برخی موارد مقادیر متفاوتی ارایه کند.

یادداشت‌ها

[1]

مقادیر خروج بیرون از محدوده می‌تواند منجر به کدهای خروج غیر منتظره بشود. یک مقدار خروج بزرگتر از ‎255‎ یک کد خروج برابر با (modulo) باقیمانده تقسیم بر ‎256‎ را نتیجه می‌دهد. برای مثال، ‎‎exit 3809‎ یک کد خروج ‎225‎ ‏(‎3809 % 256 = 225‎) ارایه می‌دهد.

[2]

یک به روزآوری از ‎/usr/include/sysexits.h‎ کدهای خروج استفاده نشده قبلی ‎64 - 78‎ را واگذار می‌کند. شاید پیش‌بینی شده باشد که محدوده کدهای خروج اختصاص نیافته در آینده بیشتر محدود خواهد شد. نویسنده این سند برای همنوایی با تغییر استاندارد، اصلاحاتی روی مثال‌های اسکریپت‌نویسی انجام نخواهد داد. این نباید باعث مشکلی بشود، چون هیچ همپوشانی یا تصادمی در کاربرد کدهای خروج بین باینری‌های کامپایل شده ‎C/C++‎ و اسکریپت‌های پوسته وجود ندارد.