
Недавно я столкнулся со странным поведением. Ловушка не выполняется, если находится внутри команды группировки:
$ 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
Так ли это, как должно быть?
решение1
Этоошибкачто было исправлено где-то между версиями >4.2.37
и <=4.3.8
. Вот предположительно соответствующая информация изжурнал изменений:
В этом документе подробно описаны изменения между этой версией, bash-4.3-alpha, и предыдущей версией, bash-4.2-release.
...
sss. Исправлена ошибка, из-за которой асинхронные групповые команды не запускали ни одну ловушку EXIT, определенную в теле команды.
...
tttt. Исправлена проблема, из-за которой подоболочки не запускали установленную ими ловушку EXIT.