Можно ли определить * какой * сигнал прерывания в bash?
Возможный дубликат:
Определение имени полученного сигнала в скрипте bash.
При использовании чего-то вроде trap func_trap INT TERM EXIT
с:
func_trap () {
...some commands...
}
Есть ли способ в функциональном блоке определить, какая ловушка вызвала его?
Что-то вроде:
func_trap () {
if signal = INT; then
# do this
else
# do that
fi
}
Или мне нужно написать отдельную функцию для каждого типа ловушек, которая делает что-то другое? Существует ли переменная bash, которая содержит последний полученный сигнал?
Заранее спасибо!
2 ответа
Нет документации, намекающей на какой-либо аргумент или переменную, содержащую сигнал, который был перехвачен, поэтому вам придется написать оператор функции / ловушки для каждой ловушки, которую вы хотите вести по-разному.
Вы можете реализовать свою собственную функцию прерывания, которая автоматически передает сигнал в функцию:
trap_with_arg() {
func="$1" ; shift
for sig ; do
trap "$func $sig" "$sig"
done
}
$ trap_with_arg func_trap INT TERM EXIT
Первым аргументом func_trap будет имя сигнала.