Можно ли определить * какой * сигнал прерывания в 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 будет имя сигнала.

Другие вопросы по тегам