JAVA_HOME nie jest ustawiony w skrypcie podczas uruchamiania za pomocą sudo

19

Próbuję uruchomić skrypt instalacyjny, który wymaga zainstalowania języka Java i ustawienia JAVA_HOMEzmiennej środowiskowej.

Mam ustawione JAVA_HOMEw /etc/profile, a także w pliku Zadzwoniłem java.shw /etc/profile.d. Mogę echo $JAVA_HOMEuzyskać prawidłową odpowiedź, a nawet mogę sudo echo $JAVA_HOMEuzyskać prawidłową odpowiedź.

W install.shpróbuję uruchomić, wstawiłem echo $JAVA_HOME. Kiedy uruchamiam ten skrypt, nie sudowidzę katalogu java; kiedy uruchamiam skrypt z sudonim jest pusty.

Wszelkie pomysły, dlaczego tak się dzieje?

Używam CentOS.

Josh
źródło
Wystąpił

Odpowiedzi:

28

Ze względów bezpieczeństwa sudomoże usuwać zmienne środowiskowe, dlatego prawdopodobnie nie odbiera $ JAVA_HOME. Poszukaj w swoim /etc/sudoerspliku env_reset.

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

Jeśli więc chcesz, aby zachował JAVA_HOME, dodaj go do env_keep:

Defaults   env_keep += "JAVA_HOME"

Alternatywnie , ustaw JAVA_HOMEw katalogu głównym ~/.bash_profile.

dogbane
źródło
2
Tak, to było to. Nie miałem pojęcia, że ​​można to zrobić. Dzięki!
Josh
20

Uruchom sudo z opcją -E (zachowaj środowisko) (zobacz plik man) lub umieść JAVA_HOME w skrypcie install.sh.

mazianni
źródło
Opcja -E nie jest dostępna w CentOS.
Zubin