リダイレクトがないように、端末でコマンド出力を見たいです。また、stderrはerr.logにリダイレクトする必要があり、stdoutはstdout.logにリダイレクトする必要があります。
端末に表示される内容(つまり、エラーが発生したときに印刷されるエラー)の正確なコピーを別のstdouter.logファイルに保存することをお勧めします。
答え1
tee
次のようにコマンドを使用します。
(cmd | tee stdout.log) 3>&1 1>&2 2>&3 | tee stderr.log
3>&1 1>&2 2>&3
teeはstdoutのみを受け入れるので、stderrとstdoutを置き換える方法です。
見てUnixティーコマンド高度なリダイレクトに使用しますtee
。
答え2
私はstdoutとstderrを2つの異なるファイルに書き込むのが良い考えだと思います。ログを非同期化しませんか?だから、次のことを試しました。
- stdoutを「stdout.log」に(dogbaneが提案したように)
- "stderr.log"のstderror(dogbaneが提案したように)
- すべての出力は「all.log」として出力されます
- それでもディスプレイから出力を見ることができます(ただし、別の端末にあります!)
((cmd | tee stdout.log) 3>&1 1>&2 2>&3 | tee stderr.log) &> all.log
他の端末で
tail -f --sleep-interval=2 all.log
答え3
@dogbaneさん、ありがとう。
また、リダイレクトなしで印刷されるため、2つのストリームをおおよその順序で保存する別の方法も見つかりました。
command 2> >(tee errlog | tee -a bothLog > /dev/tty ) | tee outlog | tee -a bothLog
ただし、これはプロセス置換をサポートするシェルでのみ機能します。