JAVA_HOME no está configurado en el script cuando se ejecuta usando sudo

19

Estoy tratando de ejecutar un script de instalación que requiere la instalación de Java y la JAVA_HOMEconfiguración de la variable de entorno.

Me he fijado JAVA_HOMEen /etc/profiley también en un archivo que he llamado java.shen /etc/profile.d. Puedo echo $JAVA_HOMEy obtengo la respuesta correcta y puedo igualar sudo echo $JAVA_HOMEy obtener la respuesta correcta.

En el install.shque estoy tratando de ejecutar, inserté un echo $JAVA_HOME. Cuando ejecuto este script sin sudover el directorio de Java; cuando ejecuto el script con sudoél está en blanco.

¿Alguna idea de por qué está sucediendo esto?

Estoy ejecutando CentOS.

Josh
fuente
También he experimentado este problema al ejecutar Ubuntu 14.04, ambas respuestas propuestas funcionaron para mí
laconbass

Respuestas:

28

Por razones de seguridad, sudopuede borrar las variables de entorno, por lo que probablemente no esté recogiendo $ JAVA_HOME. Busque en su /etc/sudoersarchivo env_reset.

De man sudoers:

env_reset   If set, sudo will reset the environment to only contain the following variables: HOME, LOGNAME, PATH, SHELL, TERM, and USER (in addi-
           tion to the SUDO_* variables).  Of these, only TERM is copied unaltered from the old environment.  The other variables are set to
           default values (possibly modified by the value of the set_logname option).  If sudo was compiled with the SECURE_PATH option, its value
           will be used for the PATH environment variable.  Other variables may be preserved with the env_keep option.

env_keep    Environment variables to be preserved in the user's environment when the env_reset option is in effect.  This allows fine-grained con-
           trol over the environment sudo-spawned processes will receive.  The argument may be a double-quoted, space-separated list or a single
           value without double-quotes.  The list can be replaced, added to, deleted from, or disabled by using the =, +=, -=, and ! operators
           respectively.  This list has no default members.

Entonces, si desea que mantenga JAVA_HOME, agréguelo a env_keep:

Defaults   env_keep += "JAVA_HOME"

Alternativamente , establecer JAVA_HOMEen la raíz ~/.bash_profile.

dogbane
fuente
2
Sí, eso fue todo. No tenía idea de que alguien pudiera hacer eso. ¡Gracias!
Josh
20

Ejecute sudo con la opción -E (preservar entorno) (vea el archivo man), o coloque JAVA_HOME en el script install.sh.

mazianni
fuente
La opción -E no está disponible en CentOS.
Zubin