
Ich bin kürzlich auf ein seltsames Verhalten gestoßen. Trap wird nicht ausgeführt, wenn es sich innerhalb des Gruppierungsbefehls befindet:
$ 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
Ist es so wie es sein soll?
Antwort1
Das ist einInsektdas wurde irgendwo zwischen den Versionen >4.2.37
und behoben <=4.3.8
. Hier sind angeblich relevante Informationen vondas Changelog:
Dieses Dokument beschreibt die Änderungen zwischen dieser Version, bash-4.3-alpha, und der vorherigen Version, bash-4.2-release.
...
sss. Ein Fehler wurde behoben, der dazu führte, dass asynchrone Gruppenbefehle keine im Befehlstext definierten EXIT-Trap ausführten.
...
tttt. Ein Problem wurde behoben, das dazu führte, dass Subshells eine von ihnen gesetzte EXIT-Trap nicht ausführten.