¿Por qué el comando ">" en una consola de Windows no redirige todos los mensajes a un archivo?

21

Estoy tratando de construir un proyecto Scala con sbt , así que ejecuto un comando:

sbt clean test > log.log

Lo que significa que cualquier mensaje que la herramienta sbt escriba en la consola de Windows debe escribirse en el archivo "log.log". Pero a veces obtengo stacktrace escrito en la consola y no en el archivo:

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

¿Por qué el comando ">" no redirige todos los mensajes a un archivo?

Cereza
fuente

Respuestas:

35

Lo que ha pegado no es la salida estándar del comando (STDOUT), sino la salida de error del comando (STDERR).

Cuando agrega "> archivo_salida" al comando, solo está redirigiendo STDOUT a ese archivo, no STDERR.

Si desea generar errores, debe usar el mismo archivo que la salida estándar.

sbt clean test > log.log 2>&1

lo que hace "2> & 1" es decir que muestra el error de salida en el mismo lugar que los resultados de salida estándar.

También puedes hacer algo como esto:

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

Producirá STDOUT en log.log y STDERR en el segundo archivo llamado error.log, si desea separarlos.

Vea esto sobre operadores de redireccionador de comandos

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

rAlen
fuente
3
¿Cuál es la diferencia entre 2>&1tu respuesta y 1<&2el enlace? Siempre lo he visto a tu manera, y la otra forma también tiene sentido (simplemente redirigiendo "entrada" en lugar de "salida" pero de lo contrario parece lo mismo), pero es interesante ver la segunda opción.
Joe
66
semántica ... 2>&1dice que la salida de STDERR debe redirigirse a la misma salida que STDOUT. 1<&2está diciendo que la salida de STDERR debería usarse como entrada para STDOUT. Ambos producen el mismo resultado y son simplemente una cuestión de preferencia
SeanC
Tenga en cuenta que, usted debe poner 2>&1 después de la > log.log.
smwikipedia