java -version no escribe en stdout?

2

O estoy haciendo algo tonto o Sun lo está haciendo. ¿Cómo es que algo como:

java -version > version.txt

¿Todavía se imprime en stdout y deja version.txt vacía? Estoy revisando el código de salida, y todavía es 0, por lo que no es eso escribir a stderr.

Necesito esto porque estoy construyendo una herramienta de entorno de prueba y quiero verificar si la versión de Java es adecuada, estaba planeando capturar la salida de esa versión, pero ahora estoy atascado.

Estoy en OS X Leopard, Java versión 1.6.0_20.

¿Algunas ideas?

Juan delgado
fuente

Respuestas:

9
java -version &> version.txt

El código de salida no tiene nada que ver con dónde sale.

Ignacio Vazquez-Abrams
fuente
¿Podría por favor explicarme &o al menos decir cómo se llama? Es realmente difícil de buscar en Google.
Dan Rosenstark
Buena, funciona. ¿Le gustaría explicar la diferencia entre lo que estaba haciendo y agregando &? Gracias:)
Juan Delgado
>por sí solo solo redirige stdout. &>redirige tanto stdout como stderr en la mayoría de los shells.
Ignacio Vazquez-Abrams
2
@Ash: 2>&1es el mismo en conchas compatible con POSIX ( bash, zsh, ash). La sintaxis es x>&ydónde xy yson descriptores de archivo ( 1para stdout, 2para stderr). Solo >&y &>son bashextensiones específicas (que ambas significan 1>somefile 2>&1)
Grawity
1
@Yar, &>es una extensión no estándar. Sin embargo, bash y zsh lo saben. Desnudo >&(sin números) tampoco es estándar, pero también bash y zsh lo saben. Todos los shells tipo Bourne (incluidos los shells conformes con POSIX) lo saben x>&y.
Chris Johnsen
9

Es una especie de característica hoy en día. ;-)

De un informe de error antiguo :

Deberíamos pensar muy, muy cuidadosamente antes de solucionar este error. Obviamente, es incorrecto imprimir información de versión en stderr, pero como lo hemos estado haciendo desde el principio de los tiempos, parece probable que rompamos los sistemas existentes creados sobre Java si lo cambiamos ahora. Si decidimos cambiar esto, entonces debe esperar hasta el lanzamiento de Tiger para que se puedan realizar las pruebas adecuadas.

Arjan
fuente
¡DECIR AH! ¿Qué pasa con eso?) Gracias por el enlace al error, me hace sentir mejor.
Juan Delgado
1

Solo como una adición a la respuesta de Ignacio:

Analizar la salida de java -versiones bastante complejo y propenso a errores (y no se garantiza que la salida tenga siempre el mismo formato, especialmente con JVM que no sean Sun).

Para verificar la versión de Java, puede ejecutar un pequeño programa de Java que verifique las propiedades apropiadas del sistema: vea Javadocs para getProperties () . Esta es la forma oficial y documentada de obtener información sobre el entorno Java. Probablemente quieras comprobar:

  • java.version (número de versión exacto de la instalación de Java, p. ej. 1.6.0_15)
  • java.specification.version (la versión de la plataforma Java, p. ej. 1.5 o 1.6)
sleske
fuente