JAVA_HOME não definido no script quando executado usando sudo

19

Estou tentando executar um script de instalação que requer que o java seja instalado e a JAVA_HOMEvariável de ambiente seja definida.

Eu configurei JAVA_HOMEem /etc/profilee também em um arquivo que eu chamei java.shem /etc/profile.d. Eu posso echo $JAVA_HOMEe recebo a resposta correta e posso equilibrar sudo echo $JAVA_HOMEe obter a resposta correta.

No install.shque estou tentando executar, inseri um echo $JAVA_HOME. Quando executo esse script sem sudover o diretório java; quando executo o script, sudoele fica em branco.

Alguma idéia de por que isso está acontecendo?

Estou executando o CentOS.

Josh
fonte
Eu também tenho experimentado este problema rodando Ubuntu 14.04, ambas as respostas propostas funcionou para mim
laconbass

Respostas:

28

Por motivos de segurança, sudopode limpar as variáveis ​​de ambiente e é por isso que provavelmente não está recebendo $ JAVA_HOME. Procure no seu /etc/sudoersarquivo 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.

Portanto, se você quiser manter JAVA_HOME, adicione-o ao env_keep:

Defaults   env_keep += "JAVA_HOME"

Como alternativa , defina JAVA_HOMEna raiz ~/.bash_profile.

dogbane
fonte
2
Sim, era isso. Não tinha idéia de que alguém pudesse fazer isso. Obrigado!
Josh
20

Execute o sudo com a opção -E (preserve environment) (consulte o arquivo man) ou coloque JAVA_HOME no script install.sh.

mazianni
fonte
A opção -E não está disponível no CentOS.
Zubin