Pergunta

Sem argumentos trap imprime os comandos atualmente definidos para todas as armadilhas.No entanto, um subshell não herda traps, então o exemplo canônico para salvar e restaurar traps falha no bash:

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

A armadilha no RHS da atribuição é executada em um subshell, portanto save_traps é sempre a string vazia.Além de escrever a saída de trap para um arquivo temporário, como um script pode encontrar o conjunto de comandos atual para uma armadilha?

Foi útil?

Solução

Funciona para mim.

Crie uma armadilha de amostra:

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

Armazene a armadilha em save_traps:

$ save_traps=$(trap)

Remover:

$ trap SIGIO
$ trap | wc -l
   0

Restaurar:

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

Testado com:

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

Outras dicas

Embora a página de manual do Bash pareça dizer que as armadilhas são redefinidas em subshells e a substituição de comandos é executada em um subshell, executando trap dentro $() funciona de qualquer maneira (testado no Bash 3.2 e 4.2).Também é mencionado no POSIX que traps=$(trap) Deveria trabalhar.

Graças a pgas em #bash no irc.freenode.net.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top