在分组命令中捕获信号

在分组命令中捕获信号

我最近遇到了一种奇怪的行为。如果在分组命令内,陷阱不会被执行:

$ 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 之间的更改。

...

SS。修复了导致异步组命令不运行命令正文中定义的任何 EXIT 陷阱的错误。

...

tttt。修复了导致子 shell 不运行它们设置的 EXIT 陷阱的问题。

相关内容