Ripristina le trappole senza un file temp
-
09-12-2019 - |
Domanda
Senza argomenti trap
Stampa i comandi attualmente impostati per tutte le trappole.Tuttavia, un subshell non eredita le trappole, quindi l'esempio canonico per il salvataggio e il ripristino delle trappole fallisce in Bash:
save_traps=$(trap) ... eval "$save_traps".
La trappola sul RHS dell'assegnazione viene eseguita in un sott'assanta, quindi salve_traps è sempre la stringa vuota.Oltre a scrivere l'output di trap
in un file temporaneo, come può uno script trovare il comando corrente impostato per una trappola?
Soluzione
funziona per me.
Creare una trappola del campione:
$ trap
$ trap echo SIGIO
$ trap
trap -- 'echo' SIGIO
.
Conservare la trappola in save_traps
:
$ save_traps=$(trap)
.
Rimuovi:
$ trap SIGIO
$ trap | wc -l
0
.
Ripristina:
$ eval "$save_traps"
$ trap
trap -- 'echo' SIGIO
.
Testato con:
$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin12)
Copyright (C) 2007 Free Software Foundation, Inc.
. Altri suggerimenti
Sebbene la manpage di Bash sembra dire che le trappole vengono ripristinate in subshells e la sostituzione del comando viene eseguita in un subshell, eseguendo trap
all'interno di $()
funziona comunque (testato in Bash 3.2 e 4.2).È anche menzionato in POSIX che traps=$(trap)
dovrebbe funzionare.
Grazie a pgas
in #bash
su irc.freenode.net
.