Pipe nimmt stdout nicht auf

Pipe nimmt stdout nicht auf

Ich führe ein Java-Programm von einem OS X 10.8Bash-Terminal aus und versuche, die von ihm erzeugte Ausgabe neu zu ordnen.

Wenn ich dies jedoch über eine Pipe ausführe oder in eine Datei umwandele, ist die Ausgabe leer, ich sehe die Ausgabe jedoch im Terminal.

Um dies zu veranschaulichen:

> 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
>

Kann das Java-Programm so eingerichtet werden, dass es in einen anderen Stream schreibt als stdout, der aber dennoch eine Ausgabe im Terminal erzeugt? Ist so etwas möglich?

Antwort1

Es gibtdreiFür jedes Programm werden Standarddateien geöffnet stdin(Standardeingabe), stdout(Standardausgabe) und stderr(Standardfehler). Schreibt in beide stdoutund stderrgibt standardmäßig im Terminal aus.

Es ist üblich, Fehler und Protokollmeldungen in stderrstatt in zu schreiben stdout, um Protokoll- oder Fehlermeldungen nicht mit der eigentlichen Programmausgabe zu vermischen. Sie können beispielsweise stderrmit umleiten:2>

command 2> log

verwandte Informationen