
Recentemente, tive um comportamento estranho. A armadilha não é executada se estiver dentro do comando de agrupamento:
$ cat ./1.sh
#!/usr/bin/env bash
set -eu
trap 'echo exit' EXIT
$ ./1.sh
exit
$ cat ./2.sh
#!/usr/bin/env bash
set -eu
echo test | { trap 'echo exit' EXIT; }
$ ./2.sh
É como deveria ser?
Responder1
Isto é umerroisso foi corrigido em algum lugar entre as versões >4.2.37
e <=4.3.8
. Aqui estão informações supostamente relevantes deo registro de alterações:
Este documento detalha as alterações entre esta versão, bash-4.3-alpha, e a versão anterior, bash-4.2-release.
...
sss. Corrigido um bug que fazia com que comandos de grupo assíncronos não executassem nenhuma interceptação EXIT definida no corpo do comando.
...
tttt. Corrigido um problema que fazia com que os subshells não executassem uma interceptação EXIT definida por eles.