menu

وضعیت آخرین کد اجرا شده در لینوکس

وضعیت آخرین کد اجرا شده در لینوکس

چهارشنبه 13 خرداد 1394

خیلی فکر کردم که اسم عنوان این پست را چی بزارم

اما واقعا چیزی به ذهنم نرسید

اگه شما عنوان بهتری به ذهنتون رسید، خوشحال میشم که به من هم بگید!

گاهی اوقات لازم میشه که شما چک کنید که آیا آخرین کدی که توی لینوکس اجرا کرده اید، به طور موفقیت آمیز اجرا شده یا خیر؟

برای مثال یه دستور پینگ نوشته اید، حالا میخواهید بدونید که این دستور پینگی که اجرا شده، به طور موفقیت آمیز اجرا شده است یا نه؟

که اگر به طور موفقیت آمیز اجرا نشده ، به این معنی هست که یا شما به اینترنت وصل نیستید و... یا آدرسی که پینگ کرده اید مشکل داره (که این مثال میتونه مثلا واسه یه سیستم مانیتورینگ باشه...)

یا خیلی مثال های دیگه

توی این پست میخوایم ببینیم چجوری این کار را بکنیم؟

این کار خیلی ساده است

کافیه از متغیر زیر کمک بگیرید:

echo $?

توی استاندارد های POSIX، برای کدهایی که با موفقیت اجرا شده اند عدد 0 و برای کدهایی که ناموفق بوده اند و دارای خطا بوده اند، عدد 1 در نظر گرفته میشه

بزارید با یه مثال بریم جلو

یه دستور ساده مثل echo را در نظر بگیرید

echo 'hello'

اگه بعد از اجرای این دستور، متغیر ? را اجرا کنیم، به ما عدد 0 را خروجی میده که به این معنی هست که کد قبلی که ما اجرا کرده ایم، به درستی اجرا شده است:

مثل همین تصویر بالا

حالا این مثال را میبریم روی یه دستور دیگه

یه دستور مثل ping

توی این مثال، خروجی ما باز هم عدد 0 بوده است که به معنای این هست که پینگ noisy.ir با موفقیت انجام شده

حالا میایم و یه کدی را اجرا میکنیم که میدونیم به ما خطا میده:

توی کد بالا، ما قصد رفتن به دایرکتوری abc را داریم، در حالی که چنین دایرکتوری وجود نداره

در این حالت به ما ارور روبرو را میده:

-bash: cd: abc: No such file or directory

که وقتی ما متغیر ? را فراخوانی کنیم به ما خروجی 1 را میده که به معنی این هست که کد قبلی با خطا روبرو شده است

echo $?
// return 1

البته، تنها خروجی های این متغیر عدد 0 و 1 نیستند و خروجی های متفاوت دیگه ای هم داره که فعلا در این مبحث نمیگنجه

مهم ترین کاربرد این دستور توی همین خروجی 0 هست که برای مطمئن شدن از درست اجرا شدن کد قبلی به کار گرفته میشه

این دستور را میشه با دستور if هم به شکل زیر ترکیب کرد:

touch /root/test 2> /dev/null

if [ $? -eq 0 ]
then
  echo "Successfully created file"
else
  echo "Could not create file" >&2
fi

که توی کد بالا(shell script) ما ابتدا قصد داریم که یه فایل توی دایرکتوری /root بسازیم و بعد با استفاده از redirection ها، همونطور که توی این پست توضیح داده شد، خطای استاندارد اون را توی dev/null میریزیم تا در صورتی که کد ما با خطا مواجه شد(مثلا خطای permission denied)، خطای اون نمایش داده نشه.

بعد از اون ما یه دستور شرطی داریم (if) که میاد و مقدار متغیر ? را مورد بررسی قرار میده و در صورتی که مقدار اون برابر 0 بود (کد به درستی اجرا شده بود) عبارت  Successfully created file را نمایش میده و در غیر این صورت ( اگر اجرای کد با خطا روبرو شد) عبارت Could not create file را نمایش میده

منتشر شده در:

    ارسال نظر
    خوانا نیست؟تعویض کد