JAVA_HOME не встановлений у сценарії під час запуску за допомогою sudo


19

Я намагаюся запустити сценарій встановлення, який вимагає встановлення Java та встановлення JAVA_HOMEзмінної середовища.

Я встановив JAVA_HOMEв , /etc/profileа також у файлі я назвав java.shв /etc/profile.d. Я можу echo $JAVA_HOMEотримати правильну відповідь, і навіть можу sudo echo $JAVA_HOMEотримати правильну відповідь.

У програмі " install.shЯ намагаюся запустити" я вставив echo $JAVA_HOME. Коли я запускаю цей сценарій, не sudoбачу каталогу java; коли я запускаю сценарій, sudoвін порожній.

Будь-які ідеї, чому це відбувається?

Я запускаю CentOS.


Я також випробував цю проблему під керуванням Ubuntu 14.04, обидва запропоновані відповіді працювали на мене
laconbass

Відповіді:


28

З міркувань безпеки sudoможе очистити змінні середовища, тому, ймовірно, він не збирає $ JAVA_HOME. Подивіться у свій /etc/sudoersфайл env_reset.

Від 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.

Отже, якщо ви хочете, щоб він зберігав JAVA_HOME, додайте його до env_keep:

Defaults   env_keep += "JAVA_HOME"

Як варіант , встановити JAVA_HOMEв root ~/.bash_profile.


2
Так, це було все. Як не уявляв, ніхто не міг цього зробити. Спасибі!
Джош

20

Запустіть sudo за допомогою параметра -E (збереження середовища) (див. Man-файл) або поставте JAVA_HOME у сценарій install.sh.


Параметр -E недоступний у CentOS.
Зубін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.