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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top