パイプが標準出力を取得していません

パイプが標準出力を取得していません

私は bash ターミナルから Java プログラムを実行しておりOS X 10.8、生成される出力をリダイレクトしようとしています。

ただし、これをパイプ経由で実行するか、ファイルにリダイレクトすると、出力は空白になりますが、ターミナルには出力が表示されます。

これを例に挙げると次のようになります。

> java program.java
13/10/02 14:18:30 WARN some
13/10/02 14:18:30 INFO log
13/10/02 14:18:30 INFO messages
...

> java program.java > log
> cat log
>

Java プログラムを、 とは別のストリームに書き込むように設定しstdout、そのストリームがターミナルに出力を生成するようにすることはできますか。そのようなことは可能ですか?

答え1

がある三つ各プログラムで開かれる標準ファイルstdin(標準入力)、stdout(標準出力)、stderr(標準エラー)。デフォルトでは両方に書き込まれstdoutstderr端末に出力されます。

ログやエラー メッセージを実際のプログラム出力と混同しないように、エラー メッセージやログ メッセージをstderrではなくに書き込むのが一般的な慣例です。を使用してリダイレクトできます。たとえば、次のようになります。stdoutstderr2>

command 2> log

関連情報