web-dev-qa-db-ja.com

グループ化コマンド内の信号のトラップ

私は最近奇妙な行動に出くわしました。グループ化コマンド内の場合、トラップは実行されません。

$ 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
x-yuri

これは バグ であり、バージョン間のどこかで修正されています>4.2.37および<=4.3.8。これはおそらく 変更ログ からの関連情報です:

このドキュメントでは、このバージョンのbash-4.3-alphaと以前のバージョンのbash-4.2-releaseの間の変更点について詳しく説明します。

.。

sss。非同期グループコマンドがコマンドの本体で定義されたEXITトラップを実行しない原因となっていたバグを修正しました。

.。

tttt。サブシェルが設定したEXITトラップを実行しない問題を修正しました。

0
x-yuri