グループ化されたコマンドで信号をキャッチする

グループ化されたコマンドで信号をキャッチする

最近奇妙な行動を経験しました。グループ化されたコマンド内にはトラップは実行されません。

$ 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の間の変更について詳しく説明します。

...

春夏シーズン。非同期グループコマンドがコマンド本文で定義されているEXITトラップを実行できないバグを修正しました。

...

うーん。サブシェルが自分で設定したEXITトラップを実行できない問題を修正しました。

関連情報