Действительно ли возможно обнаружить *, о котором* прерывание сигнализирует в ударе? [дубликат]

Возможный дубликат:
Идентификация полученного сигнала называет в сценарии оболочки удара

При использовании чего-то как trap func_trap INT TERM EXIT с:

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

Существует ли путь в функциональном блоке для обнаружения, какое прерывание назвало его?

Что-то как:

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

Или я должен записать отдельную функцию для каждого типа прерывания, который делает что-то другое? Существует ли переменная удара, которая содержит последний полученный сигнал?

Заранее спасибо!

23
задан Community 23 May 2017 в 12:02
поделиться

2 ответа

Никакой документации не содержит подсказок о том, какой аргумент или переменная содержит сигнал, который был пойман в ловушку, поэтому вам придется написать оператор функция/ловушка для каждой ловушки, которую вы хотите вести по-другому.

7
ответ дан 29 November 2019 в 00:44
поделиться

Вы можете реализовать собственную функцию ловушки, которая автоматически передает сигнал на функцию:

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

$ trap_with_arg func_trap INT TERM EXIT

Первый аргумент для func_trap будет именем сигнала.

77
ответ дан 29 November 2019 в 00:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: