
Recientemente me encontré con un comportamiento extraño. La trampa no se ejecuta si está dentro del comando de agrupación:
$ 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
¿Es como se supone que debe ser?
Respuesta1
Esto es unbichoeso se ha solucionado en algún lugar entre las versiones >4.2.37
y <=4.3.8
. Aquí hay información supuestamente relevante deel registro de cambios:
Este documento detalla los cambios entre esta versión, bash-4.3-alpha, y la versión anterior, bash-4.2-release.
...
ss. Se corrigió un error que causaba que los comandos de grupo asincrónicos no ejecutaran ninguna captura de SALIDA definida en el cuerpo del comando.
...
tttt. Se solucionó un problema que causaba que los subshells no ejecutaran una trampa de SALIDA que establecían.