Возможный дубликат:
Идентификация полученного сигнала называет в сценарии оболочки удараПри использовании чего-то как
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 будет именем сигнала.