¿Cómo se detecta si Java está instalado sin activar un aviso visual?

2

En la mayoría de los sistemas, uno simplemente se ejecutaría java -versiony un código de retorno distinto de cero indicaría que Java no está instalado.

Uno podría hacer esto en OS X, pero aparece un mensaje molesto para preguntarle al usuario si desea instalar Java.

Esto es irritante en los scripts automatizados.

¿Cómo se puede detectar si Java está instalado en una Mac, sin obtener la ventana emergente?

Brian M. Hunt
fuente
No hay ventanas emergentes en absoluto. $ java -version java version "1.6.0_65" Java(TM) SE Runtime Environment (build 1.6.0_65-b14-466.1-11M4716) Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-466.1, mixed mode)
jherran
1
@jherran no obtuvo una ventana emergente porque Java está instalado. Si Java aún no está instalado en una máquina (y no lo está de manera predeterminada en las nuevas instalaciones de OS X), aparecerá una ventana emergente solicitando instalarlo a pedido desde los servidores de Apple.
Ian C.

Respuestas:

1

Toda la instalación de Java más reciente /usr/libexec/java_homeque se utiliza para seleccionar entre múltiples instalaciones de Java en una máquina. La prueba de su existencia y la salida del comando son buenas maneras de ver si Java está instalado sin activar la ventana emergente.

if [[ -e /usr/libexec/java_home ]]; then
    JAVA_HOME=$(/usr/libexec/java_home)
else
    echo "Java not installed"
fi

También puede usarlo para buscar una versión específica de Java. Por ejemplo:

|ruby-2.1.1| cortana in ~
  /usr/libexec/java_home -v 1.6
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

|ruby-2.1.1| cortana in ~
  /usr/libexec/java_home -v 1.7
/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home

|ruby-2.1.1| cortana in ~
  /usr/libexec/java_home -v 1.8
/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home
Ian C.
fuente
1
Agregaría que /usr/libexec/java_homeexiste al menos en Mavericks, pero que al ejecutarlo proporciona un código de retorno distinto de cero, que luego se puede probar (ya que presumiblemente el código de retorno es 0 cuando se encuentra un Java)
Brian M. Hunt
1

rtrouton tiene algunos excelentes ejemplos en su sitio web derflounder . Los ejemplos se usan como atributos de extensión en una suite mdm, simplemente elimine las etiquetas de resultados de ellos. A continuación se muestra un script que busca la carpeta de instalación de Java, si existe echo la versión, si no echo, no está instalada. Esto, a cambio, nunca activa el comando java que mantiene alejada la ventana emergente.

if [[ -e /Library/Java/Home ]]; then
    echo "$(java -version 2>&1 | awk '/version/{print $3}' | sed 's/"//g')"
        else
    echo "Java not installed"
fi
tron_jones
fuente