Pregunta

Sin argumentos trap imprime la actualidad el conjunto de comandos para todas las trampas.Sin embargo, una subshell no hereda las trampas, por lo que el ejemplo canónico para guardar y restaurar las trampas de la falla en bash:

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

La trampa en el lado derecho de la asignación se ejecuta en un subshell, así save_traps siempre es la cadena vacía.Aparte de la escritura de la salida de trap en un archivo temporal, ¿cómo puede una secuencia de comandos de encontrar el actual conjunto de comandos para que una trampa?

¿Fue útil?

Solución

A mí me funciona.

Crear un ejemplo de trampa:

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

La tienda de la trampa en la save_traps:

$ save_traps=$(trap)

Quitar:

$ trap SIGIO
$ trap | wc -l
   0

Restaurar:

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

Probado con:

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

Otros consejos

Aunque la página del manual de Bash parece decir que las trampas se restablecen en subshells, y la sustitución de comandos se ejecuta en un subshell, la ejecución de trap dentro de $() de todas formas funciona (probado en Bash 3.2 y 4.2).También se menciona en POSIX que traps=$(trap) debería funcionar.

Gracias a pgas en #bash en irc.freenode.net.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top