¿Cómo redirecciono solo stderr?

13

Tengo algunos problemas para hacer esto. Estoy obligado a ejecutar un archivo compilado .java y redirigir solo stderr a un archivo llamado error. Entonces el archivo .java se llama javaProgram.java.

Esto es lo que he intentado:

java javaProgram 2> error

Sin embargo cuando yo

cat error

parece que hay cosas allí, incluso cuando sé con certeza que el archivo .java específico no tiene errores. ¿Estoy haciendo algo mal? Todo lo que quiero que muestre este archivo de error es errores, no otra cosa.

John
fuente

Respuestas:

16

Tu primer intento fue correcto; 2>filenamees cómo redirige stderr. Puede darse el caso de que su programa esté escribiendo algunos no errores en stderr, o el programa java esté ejecutando otros programas que salgan a stderr.

Mark Plotnick
fuente
1

La respuesta simple es que no es posible. El error estándar se usa para escribir la salida de diagnóstico y depende de las aplicaciones definir qué es la salida de diagnóstico / error. Eso está de acuerdo con el estándar POSIX .

Jeight
fuente
2
Si va a citar la especificación POSIX, cite una sección específica y no el documento completo. Es enorme.
jordanm el
¿Desde cuándo no es posible redirigir stderr al archivo en POSIX? Tendrá que proporcionar una cotización real para eso.
l0b0
1
@ l0b0 eso no es lo que dice Jeight. Depende de las aplicaciones decidir qué va a STDOUT y qué va a STDERR; sería completamente posible meter todo en STDOUT, por ejemplo, y luego redirigir STDERR no tendría ningún efecto. O, como en este caso, es posible (y práctica estándar) poner algunas cosas que no son estrictamente errores en STDERR. La única forma en que sería posible analizar los errores de otros diagnósticos sería si los errores están marcados con 'ERROR:' o algo así. Puede haber un cambio de verbosidad que podría ayudar, pero eso es específico del programa.
evilsoup
OP planteó dos problemas semánticamente diferentes: "redirigir solo stderr a un archivo llamado error" y "Quiero que este archivo de error muestre los errores, no otra cosa". La primera parte de eso ciertamente no es imposible, es mi punto.
l0b0
@ l0b0 Lo tienes al revés. El OP definitivamente puede redirigir el stderr a un archivo llamado error. No puede elegir qué salidas de Java como stderr porque el contenido de stderr es controlado por la aplicación y no por el usuario. Lo que puede hacer es grep el archivo al que se pasó stderr para mensajes de error reales.
Jeight