سؤال

أنا أعمل على برنامج نصي شل، وتريد التعامل مع رموز الخروج المختلفة التي قد صادفتها. لتجربة الأمور، أنا أستخدم هذا البرنامج النصي:

#!/bin/sh
echo "Starting"
trap "echo \"first one\"; echo \"second one\"; " 1
exit 1;

أفترض أنني في عداد المفقودين شيئا، لكن يبدو أنني لا أستطيع فخ "خروج 1" الخاص بي. إذا حاولت فخ 0 كل شيء يعمل خارج:

#!/bin/sh
echo "Starting"
trap "echo \"first one\"; echo \"second one\"; " 0
exit

هل هناك أي شيء يجب أن أعرفه حول رمز الخروج من HUP (1)؟

هل كانت مفيدة؟

المحلول

trap إفرازات على إشارات تستقبل العملية (على سبيل المثال، من kill)، وليس على رموز الخروج، مع فخ ... 0 يجري محفوظة للعملية النهائية. trap /blah/blah 0 سوف ترسل على أي exit 0 أو exit 1

نصائح أخرى

هذا مجرد رمز خروج، لا يعني HUP. بحيث trap ... 1 تبحث عن HUP، ولكن الخروج هو مجرد خروج.

بالإضافة إلى إشارات النظام التي يمكنك سردها عن طريق القيام به trap -l, ، يمكنك استخدام بعض Sigspecs Bash Spspecs: Err، والخروج والعودة والتصحيح. في جميع الحالات، يجب عليك استخدام اسم الإشارة بدلا من الرقم للقراءة.

يمكنك أيضا استخدام || المشغل، مع A || ب، يتم تنفيذ B عند فشل

#!/bin/sh

failed
{
    echo "Failed $*"
    exit 1
}

dosomething arg1 || failed "some comments"
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top