read - bash variables concat
Salida del comando Bash script store en variable (2)
Tengo un problema con respecto al almacenamiento de la salida de un comando dentro de una variable dentro de un script bash.
Sé que en general hay dos formas de hacer esto
ya sea
foo=$(bar)
# or
foo=`bar`
pero para la consulta de la versión de Java, esto no parece funcionar.
Yo si:
version=$(java --version)
Esto no almacena el valor dentro de la var. Incluso lo imprime, lo que realmente no debería ser el caso.
También intenté redirigir la salida a un archivo, pero esto también falla.
Esto se debe a que java -version
escribe en stderr
y no en stdout
. Deberías usar:
version=$(java -version 2>&1)
Para redirigir stderr
a stdout
.
Puedes verlo ejecutando los siguientes 2 comandos:
java -version > /dev/null
java -version 2> /dev/null
version=$(java -version 2>&1)
El param de versión solo tiene un guion, y si redirige stderr, que es donde se escribe el mensaje, obtendrá el resultado deseado.
Como nota al margen, usar dos guiones es un estándar no oficial en sistemas como Unix, pero como Java trata de ser casi idéntico en diferentes plataformas, viola las expectativas de Unix / Linux y se comporta igual en este aspecto que en Windows, y como yo sospechoso, en Mac OS.