هل من الممكن اكتشاف * أي إشارة فخ في باش؟ [مكرر

StackOverflow https://stackoverflow.com/questions/2175647

  •  24-09-2019
  •  | 
  •  

سؤال

تكرار ممكن:
تحديد اسم الإشارة المستلم في نص شل باش

عند استخدام شيء مثل trap func_trap INT TERM EXIT مع:

func_trap () {
    ...some commands...
}

هل هناك طريقة في كتلة الوظيفة للكشف أيّ لقد أطلق عليه الفخ؟

شيء مثل:

func_trap () {
    if signal = INT; then
        # do this
    else
        # do that
    fi
}

أو هل أحتاج إلى كتابة وظيفة منفصلة لكل نوع فخ يقوم بشيء مختلف؟ هل هناك متغير باش يحمل أحدث إشارة تم استلامها؟

شكرا لك مقدما!

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

المحلول

لا توجد تلميحات وثائق لأي وسيطة أو متغير يحمل الإشارة التي تم احتجازها ، لذلك يتعين عليك كتابة بيان وظيفة/فخ لكل فخ تريد أن تتصرف به بشكل مختلف.

نصائح أخرى

يمكنك تنفيذ وظيفة المصيدة الخاصة بك التي تمرر الإشارة تلقائيًا إلى الوظيفة:

trap_with_arg() {
    func="$1" ; shift
    for sig ; do
        trap "$func $sig" "$sig"
    done
}

$ trap_with_arg func_trap INT TERM EXIT

ستكون الوسيطة الأولى لـ FUNC_TRAP هي اسم الإشارة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top