bash コマンドの動作について質問があります。stdout から 2 つの異なるファイルに同じフラックスを 2 回 grep したい。そのために、次のことを行いました。
./prog | tee >(grep -i 'grep1' > file1) | grep -i 'grep2' > file2
しかし、私のfile2は空です。私grep -i 'grep2'
は何も捕まえなかったと思ったが、単に入力すると:
./prog | tee >(grep -i 'grep1' > file1) | grep -i 'grep2'
私は注意を払った結果を持っています:
[grep2] mylog...
[grep2] mylog...
[grep2] mylog...
次のコマンドを使用して、2 つのファイルに書き込むことができました。
./prog | tee >(grep -i 'grep1' > file1) >(grep -i 'grep2' > file2)
> /dev/null
しかし、標準出力に出力がないように、最後に追加する必要があります。
私の質問は、2 番目の grep の後のリダイレクトがリダイレクトによってキャッチされないのはfile2
なぜですか?また、そのために別の名前付きパイプを追加する必要があるのはなぜですか?