Ответ 1
По умолчанию sudo
очистит среду созданных команд. Пропустите -E
, чтобы сохранить его:
sudo -E env
Сравнить с:
sudo env
У меня есть bash script в ящике Linux, в котором запущен файл Jar. При входе в систему как обычный пользователь у меня нет разрешения на запуск script, но он печатает следующий журнал:
*INFO * Using JVM found at /opt/jdk6/bin/java
Когда я пытаюсь использовать script с Sudo, он дает:
*ERROR* Unable to locate java, please make sure java is installed and JAVA_HOME set
Я установил JAVA_HOME
на тот же путь выше - можно увидеть его с помощью echo $JAVA_HOME
, а также установить в качестве опции в script. Я рад, что script не проблема - это элемент управления CQ5 по умолчанию script, и я использую его на десятках других ящиков без проблем. Просто не знаете, что я делаю неправильно выше, и предполагаю, что мне не хватает новой настройки Linux?
Когда я запускаю команду sudo
, имеет ли она доступ к JAVA_HOME
, который я настроил как сам?
По умолчанию sudo
очистит среду созданных команд. Пропустите -E
, чтобы сохранить его:
sudo -E env
Сравнить с:
sudo env
"sudo -E" не решила проблему, когда JAVA_HOME не был экспортирован. И когда он был экспортирован, "sudo" без -E работает одинаково.
Итак, вы можете добавить export JAVA_HOME=.../jdk<version>
в ваш .bash_profile и .bashrc файл.
В случае, если вы задались вопросом, какая разница в .bash_profile и .bashrc,.bash_profile выполняется при входе в систему (например, покажите какую-либо диагностическую/приветственную информацию)..bash_rc выполняется при открытии нового терминала (например, shift-ctrl-T).
Чтобы запустить некоторые команды для обоих случаев, вы можете поместить их в .bashrc файл и предоставить источник .bash_profile.bashrc:
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
Вы всегда можете просто передать его в java явно следующим образом:
sudo java -Djava.home=$JAVA_HOME Test