在分組命令中捕獲訊號

在分組命令中捕獲訊號

我最近遇到了一種奇怪的行為。如果在分組命令內,陷阱不會被執行:

$ 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 陷阱的問題。

相關內容