Abfangen von Signalen innerhalb von Gruppierungsbefehlen

Abfangen von Signalen innerhalb von Gruppierungsbefehlen

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.37und 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.

verwandte Informationen