JAVA_HOME non impostato nello script quando eseguito utilizzando sudo


19

Sto cercando di eseguire uno script di installazione che richiede l'installazione di Java e l' JAVA_HOMEimpostazione della variabile di ambiente.

Ho impostato JAVA_HOMEin /etc/profileed anche in un file che ho chiamato java.shin /etc/profile.d. Posso echo $JAVA_HOMEe ottenere la risposta corretta e posso anche sudo echo $JAVA_HOMEe ottenere la risposta corretta.

Nel install.shtentativo di esecuzione, ho inserito un echo $JAVA_HOME. Quando eseguo questo script senza sudovedo la directory java; quando eseguo lo script con sudoesso è vuoto.

Qualche idea sul perché questo stia accadendo?

Sto gestendo CentOS.


Ho riscontrato anche questo problema con Ubuntu 14.04, entrambe le risposte proposte hanno funzionato per me
laconbass

Risposte:


28

Per motivi di sicurezza, sudopuò cancellare le variabili di ambiente, motivo per cui probabilmente non sta raccogliendo $ JAVA_HOME. Cerca nel tuo /etc/sudoersfile env_reset.

Da 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.

Quindi, se vuoi che mantenga JAVA_HOME, aggiungilo a env_keep:

Defaults   env_keep += "JAVA_HOME"

In alternativa , imposta JAVA_HOMEin root ~/.bash_profile.


2
Sì, era quello. Non avevo idea che uno potesse farlo. Grazie!
Josh,

20

Esegui sudo con l'opzione -E (preserva l'ambiente) (vedi il file man) o inserisci JAVA_HOME nello script install.sh.


L'opzione -E non è disponibile in CentOS.
Zubin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.