Восстановление ловушек без временного файла - PullRequest
4 голосов
/ 08 марта 2012

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

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

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

Ответы [ 2 ]

4 голосов
/ 05 октября 2012

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

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

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

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

$ save_traps=$(trap)

Remove:

$ 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.
1 голос
/ 15 марта 2012

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

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

...