whileループにエラーストリームを書き込む

whileループにエラーストリームを書き込む

おおよそ次のようなコードがあります。

cat infile | while read line; do
    echo 2> 'log ' $line
    echo $line
done > outfile

outfile正しく作成されました。ただし、STDERR出力は消えます。outfile上記の最後の行を置き換えると生成されますが空done > outfile 2> errfileですerrfile

ループ内でエラー出力をキャプチャできますか?親STDERRに直接ストリーミングすることをお勧めします(上記は、標準エラーストリームが他のプロセスでキャプチャされるより大きなスクリプトの一部です)。

答え1

構文が正しくありません。でなければ>&2なりません2>

答え2

ループ内でstderrをリダイレクトするため、例は機能しません2>。それからリダイレクトしようとすると再びループの外にはリダイレクトするストリームはありません。

これはあなたが本当にやりたいことのようです:

cat infile | while read line; do
    echo >&2 'log ' $line
    echo $line
done > outfile 2> errfile

これにより、whileループ内のすべてのエラーが期待どおりにリダイレクトされます。質問の例のように、ループ内でエラーをリダイレクトしない限り。

関連情報