Вопрос

Без аргументов trap печатает текущие установленные команды для всех ловушек.Однако подоболочка не наследует ловушки, поэтому канонический пример сохранения и восстановления ловушек в bash не работает:

save_traps=$(trap)
...
eval "$save_traps"

Ловушка в правой части присваивания выполняется в подоболочке, поэтому save_traps всегда является пустой строкой.Помимо записи вывода trap во временный файл, как сценарий может найти текущий набор команд для ловушки?

Это было полезно?

Решение

Работает для меня.

Создайте образец ловушки:

$ trap
$ trap echo SIGIO
$ trap
trap -- 'echo' SIGIO

Храните ловушку в save_traps:

$ save_traps=$(trap)

Удалять:

$ trap SIGIO
$ trap | wc -l
   0

Восстановить:

$ eval "$save_traps"
$ trap
trap -- 'echo' SIGIO

Протестировано с:

$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin12)
Copyright (C) 2007 Free Software Foundation, Inc.

Другие советы

Хотя на странице руководства Bash, кажется, говорится, что ловушки сбрасываются в подоболочках, а подстановка команд выполняется в подоболочке, выполняя trap внутри $() работает в любом случае (протестировано в Bash 3.2 и 4.2).В POSIX также упоминается, что traps=$(trap) должно сработать.

Благодаря pgas в #bash в irc.freenode.net.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top