2017-03-23 14 views
2

ので、私は問題をすぐに見ることができ、私は完全なプログラム出力(stdoutとstderr)を格納するログファイルmerged.logを持つようにしたいので、私は非エラーログと一緒にエラーログを参照してください、だけでなく、唯一のエラー行のファイルerror.logを持つことができますプログラム。私はteeを使用しようとしましたが、この特定のタイプのリダイレクトを実行する方法を理解できません。例えばプログラムのstdoutとstderrを1つのファイルにリダイレクトし、同じstderrを別のファイルにリダイレクトする方法はありますか?

、私は次のJavaScriptのプログラム

// outputter.js 
console.log('this is stdout'); 
console.error('this is stderr'); 

を持っているならば、2つのログファイルは、bashで

# merged.log 
this is stdout 
this is stderr 

# error.log 
this is stderr 

答えて

2

である必要があり、これは私のために動作します:

((./a.out 2>&1 1>&3 | tee error.log) 3>&1 1>&2) > merged.log 2>&1 

this page.

+1

これは、 'stderr'と 'stdout'のメッセージの元の順序を保持しますか?例えば ​​'。/ a.out'を'(ls。nonexistent; ls。exists) 'に置き換えると、それはインタリーブする通常の出力とエラー出力を持つはずです。ご注文の制限について言えば、あなたの答えは受け入れられるかもしれません。 – janos

+0

@janosは、私はあなたの提案のコマンドを実行し、期待どおりに正確にstdoutとstderr出力し – almel

+0

@rogerあなたのコマンドの動作をインターリーブんが、いくつかのあいた後、私が発見した私は削除した場合、 '1>&2 '右の最後の括弧の前に、I 2つのログファイルに期待される出力が得られます。 fd 1を2にリダイレクトする必要があるのはなぜですか? – almel

関連する問題