type -p java no funciona en un script init.d

type -p java no funciona en un script init.d

Estoy intentando modificar /etc/init.d/jenkinsel script para agregar mi ruta Java personalizada. Mi solución es esta:

JAVAPATH=$(type -p java) 
PATH=/bin:/usr/bin:/sbin:/usr/sbin:$JAVAPATH

Sin embargo, cuando inicio el servicio y miro los registros, veo que la variable JAVAPATH está vacía. En cambio, si escribo, por ejemplo:

PYPATH=$(type -p python) 
PATH=/bin:/usr/bin:/sbin:/usr/sbin:$PYPATH

Entonces la variable PATH incluirá perfectamente el binario de Python.

Mi objetivo final es eliminar el nombre del archivo, simplemente guardar el nombre del directorio de modo que:

JAVAPATH=$(type -p java | xargs dirname)

En mis scripts y pruebas personalizados, todo funciona bien, así que supongo que hay algo con Java que no sé. Estoy ejecutando Debian 10 y mi ruta de Java es/usr/lib/jvm/jdk-11.0.9/bin/java

Gracias de antemano.

Saludos

Respuesta1

typees un shell integrado que busca un archivo en cada directorio especificado en su $PATHvariable.

En su ejemplo, no muestra nada porque no hay ningún javabinario en ninguno de los directorios especificados en su archivo $PATH.

Por el contrario, pythonse encuentra porque efectivamente está en uno de sus $PATHdirectorios (específicamente en /usr/bin).

No sé qué método de instalación de Java ha utilizado, pero podría intentar utilizarlo, /etc/alternatives/javaya que normalmente está configurado para apuntar al binario de Java predeterminado en su sistema.

Otra opción no tan limpia es usar dpkg -L <java package name>para enumerar todos los archivos proporcionados por su jdk y filtrarlos para encontrar el binario que desea usar:

$ JAVA_PATH=$(dpkg -L openjdk-11-jre-headless|fgrep bin/java)
$ echo $JAVA_PATH
/usr/lib/jvm/java-11-openjdk-amd64/bin/java

información relacionada