プロセスの stderr の新しい各行を一連のテキスト ファイルにリダイレクトしたいと考えています。bashでそれを行うにはどうすればよいですか?
私が試してみました:
myProcess 2>&1 >/dev/null | grep 'Parsed' > parsed.txt | tail -f parsed.txt > line.`date +%s`.txt
出力の各行を読み取り、明示的に新しいファイルにリダイレクトする必要があります。
myProcess 2>&1 >/dev/null | grep 'Parsed' | tee parsed.txt | while IFS= read -r line; do
echo "$line" >> line.$(date +%s).txt
done
から各行をファイルtee
に書き込むための使用と、各行を毎秒ファイルにリダイレクトするループの使用にも注意してください。grep
parsed.txt
while
#!/bin/bash
function splitter {
grep 'Parsed' |
while read L; do
echo "$L" >> `date +%s`
done
}
myProcess 2> >( splitter ) > /dev/null
2 つのコメント:
... | grep 'Parsed' > parsed.txt
grep
すべての出力をにリダイレクトするparsed.txt
ため、次のパイプに入力するものは何もありません。また、tail
同時に両方ではなく、パイプラインまたはファイルのいずれかから読み取ります。
同じ出力を複数のファイルに送信する場合は、次のものが必要ですtee
。
myProcess 2>&1 >/dev/null | grep 'Parsed' | tee f1.txt | tee f2.txt > f3.txt
別のバリアント:
myprocess 2> >(sed 's/.*/echo "&">>$(date +%s)/e;d')
gnu sed と bash がプロセスのリダイレクトをサポートする必要があります。