JAVA_HOME not set in script when run using sudo
For security reasons, sudo
may clear environment variables which is why it is probably not picking up $JAVA_HOME. Look in your /etc/sudoers
file for env_reset
.
From 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.
So, if you want it to keep JAVA_HOME, add it to env_keep:
Defaults env_keep += "JAVA_HOME"
Alternatively, set JAVA_HOME
in root's ~/.bash_profile
.
Run sudo with the -E (preserve environment) option (see the man file), or put JAVA_HOME in the install.sh script.