Perché il comando ">" in una console di Windows non reindirizza tutti i messaggi a un file?


21

Sto cercando di costruire un progetto Scala con sbt , quindi eseguo un comando:

sbt clean test > log.log

Ciò significa che tutti i messaggi che lo strumento sbt scrive sulla console di Windows devono essere scritti nel file "log.log". Ma a volte ricevo stacktrace scritto sulla console e non nel file:

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

Perché il comando ">" non reindirizza tutti i messaggi a un file?

Risposte:


35

Ciò che hai incollato non è l'output standard del comando (STDOUT), ma l'output dell'errore del comando (STDERR).

Quando aggiungi "> output_file" al comando, stai solo reindirizzando STDOUT a quel file, non STDERR.

Se si desidera generare errori, è necessario utilizzare lo stesso file dell'output standard

sbt clean test > log.log 2>&1

ciò che fa "2> & 1" è che dice di generare l'errore nello stesso posto dei risultati di output standard.

Puoi anche fare qualcosa del genere:

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

Verrà generato STDOUT su log.log e STDERR sul secondo file chiamato error.log, se si desidera separarli.

Vedi questo sugli operatori di redirector dei comandi

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


3
Qual è la differenza tra la 2>&1tua risposta e 1<&2il link? L'ho sempre visto a modo tuo, e anche l'altro senso ha senso (reindirizzare solo "input" anziché "output" ma apparire allo stesso modo), ma è interessante vedere la seconda scelta.
Joe,

6
semantics ... 2>&1sta dicendo che l'output di STDERR dovrebbe essere reindirizzato allo stesso output di STDOUT. 1<&2sta dicendo che l'output di STDERR dovrebbe essere usato come input per STDOUT. Entrambi producono lo stesso risultato e sono semplicemente una questione di preferenza
SeanC

Si noti che, 2>&1 dopo il > log.log.
smwikipedia,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.