Ich führe ein Java-Programm von einem OS X 10.8
Bash-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 stdout
und stderr
gibt standardmäßig im Terminal aus.
Es ist üblich, Fehler und Protokollmeldungen in stderr
statt in zu schreiben stdout
, um Protokoll- oder Fehlermeldungen nicht mit der eigentlichen Programmausgabe zu vermischen. Sie können beispielsweise stderr
mit umleiten:2>
command 2> log