2008-11-25 10 views
10

Estoy tratando de redirigir la salida del compilador java a un archivo. pensé que se supone que es:tratando de capturar la salida javac en shell bash

javac file.java > log.txt 

o algo así. En cambio, veo toda la salida en el terminal y nada en log.txt.

Además, si quiero registrar los errores también, hacer Yo

javac file.java 2>&1 > log.txt 

?

Respuesta

13
javac file.java 2> log.txt 

La razón es que usted tiene dos descriptores de fichero de salida en lugar de uno. El habitual es stdout, que puede redireccionar con> y se supone que debe utilizarse para la salida resultante. El segundo, stderr, es para lectura legible por humanos, como advertencias, errores, estado actual, etc., este se redirige con 2>.

Su segunda línea, utilizando 2> & 1, redirige stderr a stdout y finalmente stdout a log.txt.

+0

Veo redireccionar stderr me da la salida que quiero. ¿Por qué todo está conectado en stderr y nada en stdout? Además, ¿podría decirme por qué javac file.java 2> & 1> log.txt no funciona? – jcee14

+0

Las redirecciones se manejan de izquierda a derecha. El 2> & 1 envía stderr al lugar donde stdout está actualmente en curso: el terminal. Luego el> log.txt envía stdout a log.txt, dejando stderr escribiendo en el stdout original. Si escribió> log.txt 2> & 1, entonces todos los resultados irían al archivo. –

+0

Usted obtiene puntos de bonificación si usted sabía que esto también funciona:> log.txt javac 2> & 1 file.java –

7

Ha intentado

javac -Xstdout log.txt file.java 

Esto enviará errores de compilación de un archivo de registro en lugar de stderr.

Cuestiones relacionadas