JAVA_HOME wurde bei der Ausführung mit sudo nicht im Skript festgelegt

19

Ich versuche, ein Installationsskript auszuführen, für das Java installiert und die JAVA_HOMEUmgebungsvariable festgelegt werden muss.

Ich habe festgelegt JAVA_HOMEin /etc/profileund auch in einer Datei habe ich genannt java.shin /etc/profile.d. Ich kann echo $JAVA_HOMEund bekomme die richtige Antwort und ich kann sogar sudo echo $JAVA_HOMEund bekomme die richtige Antwort.

In den install.shich versuche zu rennen habe ich ein eingefügt echo $JAVA_HOME. Wenn ich dieses Skript ohne sudoJava ausführe, wird das Java-Verzeichnis angezeigt. Wenn ich das Skript mit sudoihm starte, ist es leer.

Irgendwelche Ideen, warum das passiert?

Ich lasse CentOS laufen.

Josh
quelle
Ich habe auch dieses Problem mit Ubuntu 14.04 erlebt. Beide vorgeschlagenen Antworten funktionierten für mich
laconbass

Antworten:

28

sudoMöglicherweise werden aus Sicherheitsgründen Umgebungsvariablen gelöscht, weshalb $ JAVA_HOME wahrscheinlich nicht abgerufen wird. Suchen Sie in Ihrer /etc/sudoersDatei nach env_reset.

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

Wenn Sie möchten, dass JAVA_HOME beibehalten wird, fügen Sie es zu env_keep hinzu:

Defaults   env_keep += "JAVA_HOME"

Alternativ setzen Sie JAVA_HOMEin root's ~/.bash_profile.

Dogbane
quelle
2
Ja, das war es. Hätte keine Ahnung, dass man das machen könnte. Vielen Dank!
Josh
20

Führen Sie sudo mit der Option -E (Umgebung beibehalten) aus (siehe man-Datei) oder fügen Sie JAVA_HOME in das Skript install.sh ein.

Mazianni
quelle
Die Option -E ist in CentOS nicht verfügbar.
Zubin