Wie leite ich nur stderr um?

12

Ich habe ein bisschen Probleme damit. Ich muss eine kompilierte Java-Datei ausführen und nur stderr in eine Datei namens error umleiten. Die Java-Datei heißt also javaProgram.java.

Folgendes habe ich versucht:

java javaProgram 2> error

Aber wenn ich

cat error

Es scheint, dass dort etwas drin ist, auch wenn ich sicher bin, dass die spezifische .java-Datei keine Fehler enthält. Mache ich etwas falsch? Alles, was ich möchte, dass diese Fehlerdatei angezeigt wird, sind Fehler, nichts anderes.

John
quelle

Antworten:

15

Ihr erster Versuch war richtig; 2>filenameSo leiten Sie stderr um. Es kann sein, dass Ihr Programm einige Fehler in stderr schreibt oder das Java-Programm andere Programme ausführt, die an stderr ausgeben.

Mark Plotnick
quelle
1

Die einfache Antwort ist, dass es nicht möglich ist. Standardfehler werden zum Schreiben der Diagnoseausgabe verwendet, und es liegt an den Anwendungen, zu definieren, was Diagnose- / Fehlerausgabe ist. Das entspricht dem POSIX-Standard .

Jeight
quelle
2
Wenn Sie die POSIX-Spezifikation zitieren möchten, zitieren Sie bitte einen bestimmten Abschnitt und nicht das gesamte Dokument. Es ist riesig.
Jordan
Seit wann ist es nicht möglich, stderr in eine Datei in POSIX umzuleiten? Sie müssen dafür ein aktuelles Angebot machen.
10b0
1
@ l0b0 das sagt Jeight nicht. Es liegt an den Anwendungen, zu entscheiden, was an STDOUT und was an STDERR geht. Es wäre beispielsweise durchaus möglich, alles in STDOUT zu verschieben, und eine Umleitung von STDERR hätte dann keine Auswirkung. Oder wie in diesem Fall ist es möglich (und in der Standardpraxis), einige Dinge, die keine strengen Fehler sind, in STDERR einzufügen. Der einzige Weg, die Fehler aus anderen Diagnosen zu analysieren, wäre, wenn die Fehler mit 'ERROR:' oder so markiert sind. Möglicherweise gibt es einen Ausführlichkeitsschalter, der helfen könnte, der jedoch programmspezifisch ist.
Evilsoup
OP warf zwei semantisch unterschiedliche Probleme auf: "Nur stderr in eine Datei namens error umleiten" und "Ich möchte, dass diese Fehlerdatei Fehler anzeigt, nichts anderes." Der erste Teil davon ist sicherlich nicht unmöglich, ist mein Punkt.
10b0
@ l0b0 Du hast es rückwärts. Das OP kann den stderr definitiv in eine Datei namens error umleiten. Er kann nicht auswählen, was Java als stderr ausgibt, da der Inhalt von stderr von der Anwendung und nicht vom Benutzer gesteuert wird. Was er tun kann, ist die Datei, an die stderr übergeben wurde, nach tatsächlichen Fehlermeldungen zu durchsuchen.
Jeight