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

3934
Cherry

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

sbt clean test > log.log 

Dies bedeutet, dass alle Nachrichten, die das sbt-Tool an 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?

21

1 Antwort auf die Frage

35
rAlen

Sie haben keine Befehlsstandardausgabe (STDOUT), sondern eine Fehlerausgabe des Befehls (STDERR) eingefügt.

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

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

sbt clean test > log.log 2>&1 

Was "2> & 1" bedeutet, heißt, dass Fehler an derselben Stelle wie Standardausgabeergebnisse ausgegeben werden sollen.

Sie können auch so etwas tun:

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

Es gibt STDOUT in log.log und STDERR in die zweite Datei 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

Was ist der Unterschied zwischen "2> & 1" in Ihrer Antwort und "1 <& 2" in der Verknüpfung? Ich habe es immer auf Ihre Art gesehen, und der andere Weg macht auch Sinn (einfach "Eingabe" statt "Ausgabe" umleiten, aber ansonsten gleich aussehen), aber es ist interessant, die zweite Wahl zu sehen. Joe vor 10 Jahren 3
Semantik ... "2> & 1" besagt, dass die Ausgabe von STDERR auf dieselbe Ausgabe wie STDOUT umgeleitet werden soll. "1 <& 2" besagt, dass die Ausgabe von STDERR als Eingabe für STDOUT verwendet werden soll. Beide produzieren das gleiche Ergebnis und sind einfach eine Vorzugssache SeanC vor 10 Jahren 6
Beachten Sie, dass Sie "2> & 1" ** hinter ** des `> log.log 'setzen müssen. smwikipedia vor 6 Jahren 0