2008-11-25 5 views
10

Ich versuche, die Java-Compiler-Ausgabe in eine Datei umleiten. Ich dachte, es soll sein:versuchen, javac Ausgabe in Bash-Shell zu erfassen

javac file.java > log.txt 

oder so etwas. Stattdessen sehe ich alle Ausgaben auf dem Terminal und nichts in log.txt!

Auch, wenn ich Fehler will auch einzuloggen, mache ich

javac file.java 2>&1 > log.txt 

?

Antwort

13
javac file.java 2> log.txt 

Der Grund dafür ist, dass Sie zwei Ausgangs Filedeskriptoren anstelle eines haben. Das übliche ist stdout, das man mit> umleiten kann und es soll für die resultierende Ausgabe verwendet werden. Der zweite, stderr, ist für lesbare Ausgaben wie Warnungen, Fehler, den aktuellen Status usw. gedacht, dieser wird mit 2> umgeleitet.

Ihre zweite Zeile, mit 2> & 1, leitet stderr nach stdout und schließlich stdout in log.txt.

+0

Ich sehe Umleitung stderr gibt mir die Ausgabe, die ich will. Warum ist alles in stderr eingeloggt und nichts in stdout? Könnten Sie mir auch sagen, warum javac file.java 2> & 1> log.txt nicht funktioniert? – jcee14

+0

Die Umleitungen werden von links nach rechts behandelt. Die 2> & 1 sendet stderr an den Ort, an dem sich derzeit stdout befindet - das Terminal. Dann sendet die> log.txt stdout an log.txt, wobei stderr an das ursprüngliche stdout schreibt. Wenn Sie> log.txt 2> & 1 geschrieben haben, würde die gesamte Ausgabe in die Datei gehen. –

+0

Sie erhalten Bonuspunkte, wenn Sie wussten, dass dies auch funktioniert:> log.txt javac 2> & 1 file.java –

7

Haben Sie

versucht
javac -Xstdout log.txt file.java 

Dieser Compiler-Fehler in einer Protokolldatei statt stderr senden.

Verwandte Themen