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.