Warum leitet der Befehl ">" in einer Windows-Konsole nicht alle Nachrichten in eine Datei um?


21

Ich versuche, ein Scala- Projekt mit sbt zu erstellen , daher führe ich einen Befehl aus:

sbt clean test > log.log

Das bedeutet, dass alle Nachrichten, die das sbt-Tool in die Windows-Konsole schreibt, in die Datei "log.log" geschrieben werden sollten. Aber manchmal bekomme ich Stacktrace auf die Konsole geschrieben und nicht in die Datei:

C:\path>sbt clean test > log.log
java.lang.ExceptionInInitializerError
        at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
        at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
        at scala.concurrent.impl.ExecutionContextImpl$AdaptedForkJoinTask.exec(ExecutionContextImpl.scala:121)
        at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
        at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
        at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: java.lang.ClassCastException: Class org.infinispan.configuration.parsing.Parser60 does not implement org.infinispan.configuration.parsing.ConfigurationParser

Warum leitet der Befehl ">" nicht alle Nachrichten in eine Datei um?

Antworten:


35

Was Sie eingefügt haben, ist nicht die Befehlsstandardausgabe (STDOUT), sondern die Fehlerausgabe des Befehls (STDERR).

Wenn Sie dem Befehl "> output_file" hinzufügen, leiten Sie STDOUT nur in diese Datei um, nicht in STDERR.

Wenn Sie Fehler ausgeben möchten, müssen Sie dieselbe Datei wie die Standardausgabe verwenden

sbt clean test > log.log 2>&1

"2> & 1" bewirkt, dass der Fehler an derselben Stelle ausgegeben wird wie die Standardausgabeergebnisse.

Sie können auch Folgendes tun:

sbt clean test > log.log 2>error.log

Es gibt STDOUT in log.log und STDERR in die zweite Datei mit dem Namen error.log aus, wenn Sie sie trennen möchten.

Informationen zu Befehlsumleitungsoperatoren finden Sie hier

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/redirection.mspx?mfr=true


3
Was ist der Unterschied zwischen 2>&1Ihrer Antwort und 1<&2dem Link? Ich habe es immer so gesehen, und der andere Weg macht auch Sinn (nur "Eingabe" statt "Ausgabe" umleiten, aber ansonsten gleich aussehen), aber es ist interessant, die zweite Wahl zu sehen.
Joe

6
Semantik ... 2>&1besagt, dass die Ausgabe von STDERR an dieselbe Ausgabe wie STDOUT umgeleitet werden soll. 1<&2bedeutet, dass die Ausgabe von STDERR als Eingabe für STDOUT verwendet werden sollte. Beide produzieren das gleiche Ergebnis und sind einfach eine Frage der Präferenz
SeanC

Beachten Sie, dass Sie 2>&1 nach dem setzen müssen > log.log.
smwikipedia
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.