おおよそ次のようなコードがあります。
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ループ内のすべてのエラーが期待どおりにリダイレクトされます。質問の例のように、ループ内でエラーをリダイレクトしない限り。