トラップで「stdin」が再割り当てされるのはなぜですか?

トラップで「stdin」が再割り当てされるのはなぜですか?

stdinトラップに再割り当てがあるのはなぜですか?例えば、

    my_trap() {
        lsof -a -p "$BASHPID" -d 0,1,2
    }
    lsof -a -p "$BASHPID" -d 0,1,2
    trap my_trap ERR
    echo hi | grep foo

出力

COMMAND   PID  USER   FD   TYPE DEVICE  SIZE/OFF NODE NAME
bash    63384 Setup    0u   CHR   16,2 0t1112831 3717 /dev/ttys002
bash    63384 Setup    1u   CHR   16,2 0t1112831 3717 /dev/ttys002
bash    63384 Setup    2u   CHR   16,2 0t1112831 3717 /dev/ttys002
COMMAND   PID  USER   FD   TYPE             DEVICE  SIZE/OFF NODE NAME
bash    63384 Setup    0   PIPE 0xde72f1c4316180fd     16384      
bash    63384 Setup    1u   CHR               16,2 0t1113091 3717 /dev/ttys002
bash    63384 Setup    2u   CHR               16,2 0t1113091 3717 /dev/ttys002

stdin私はそれがパイプに再割り当てされたのを見ました0xde72f1c4316180fd。どうしたの?そのパイプは何ですか?元のパイプラインのノードIDが何であるかを確認できますかstdin


stdin私がトラップのsumパイプに興味を持っているのは、stdoutトラップ内でスタックをダンプするときにsumノードIDもダンプできるからstdinですstdout。これにより、失敗したパイプラインがあり、各ステップでトラップを実行してスタックをダンプする場合は、それらを追跡して接続して、そのパイプラインが消費する他のスタックとはstdin異なるスタックを生成するスタックを追跡して把握できますstdoutstdinパイプが再割り当てされると、このチェーンを構築することはできません。

関連情報