Как безоговорочно перехватить EXIT (, даже если он прерван ), в Zsh?

Используя сайт пакетов Fedora , можно скачать RPM для fc29, даже если он был удален из дистрибутива.

Я подозреваю, что было бы лучше перенести ваше текущее приложение на более новый ABI, предоставляемый libicu.

2
18.10.2020, 08:59
1 ответ

Это похоже на ловушку EXIT вне функций. Уйти и быть убитым - разные вещи.

Таким образом, как и вне функций, вам нужно обрабатывать их отдельно:

test_trap() {
  set -o localoptions -o localtraps
  trap 'echo "I am exiting."' EXIT
  trap 'echo "I have been interrupted, so"; return 1' INT

  echo start
  sleep 10
  echo end
}

test_trap
echo "returned with: $?"

Что дает:

$ zsh./that-script
start
^CI have been interrupted, so
I am exiting.
returned with: 1

Если вы хотите, чтобы оболочка (не только функции )завершала работу при обработке сигнала SIGINT при получении во время выполнения функции, замените return 1наexit(или убейте себя с помощью SIGINT после восстановив обработчик по умолчанию (trap - INT; kill -s INT "$$"), если вы хотите сообщить о своей смерти сигналом своему родителю ).

2
18.03.2021, 22:56

Теги

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