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
異なるスタックを生成するスタックを追跡して把握できますstdout
。stdin
パイプが再割り当てされると、このチェーンを構築することはできません。