JAVA_HOME n'est pas défini dans le script lorsqu'il est exécuté en utilisant sudo

J'essaie d'exécuter un script d'installation qui nécessite l'installation de java et la définition de la variable d'environnement JAVA_HOME.

J'ai placé JAVA_HOME dans /etc/profile et aussi dans un file que j'ai appelé java.sh dans /etc/profile.d . Je peux echo $JAVA_HOME et get la bonne réponse et je peux même sudo echo $JAVA_HOME et get la bonne réponse.

Dans le install.sh j'essaie de courir j'ai inséré un echo $JAVA_HOME . Quand j'exécute ce script comme moi-même, je vois le directory java, mais quand j'exécute le script avec sudo, il est vide.

Des idées pourquoi cela se passe-t-il?

Je cours CentOS

Pour des raisons de security, sudo peut effacer les variables d'environnement, c'est pourquoi il ne récupère probablement pas $ JAVA_HOME. Regardez dans votre file /etc/sudoers pour env_reset .

De l' 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 copyd 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 comstackd 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. 

Donc, si vous voulez garder JAVA_HOME, ajoutez-le à env_keep:

 Defaults env_keep += "JAVA_HOME" 

Vous pouvez également définir JAVA_HOME dans le ~/.bash_profile la racine.

Exécutez sudo avec l'option -E (preserve environment) (voir le file man), ou placez JAVA_HOME dans le script install.sh.