هل من الممكن اكتشاف * أي إشارة فخ في باش؟ [مكرر
سؤال
تكرار ممكن:
تحديد اسم الإشارة المستلم في نص شل باش
عند استخدام شيء مثل 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 هي اسم الإشارة.
لا تنتمي إلى StackOverflow