Я установил JDK в /opt
и поместил скрипт оболочки в /etc/profile.d/
то место, где я использовал export
для изменения переменной PATH, чтобы я мог нормально запускать Java. Дело в том, что это сработало только для моей локальной учетной записи, а не для sudo
. Если я попробую sudo
команду, она скажет sudo: java: command not found
. Я пробовал помещать export
команды в конец .bashrc
и rc.local
, но ни один из вариантов, похоже, не меняет это поведение. Я хочу иметь возможность запускать sudo java
, так где я могу изменить PATH во время загрузки таким образом, чтобы sudo
она была видна?
Редактировать: Для справки, вот строки, которые я добавлял везде, где пытался:
export JAVA_HOME="/opt/jdk-16.0.2"
export PATH="$PATH:${JAVA_HOME}/bin"
решение1
Ваша проблема не у всех, и даже не у кого-то=root.Ваша проблема ТОЛЬКОsudo
потому что sudo
использует свой собственный PATH; он НЕ использует тот, который установлен в вашей (вызывающей) оболочке или любой другой оболочке или конфигурации оболочки (если только вы не используете , sudo -i
который запускает оболочку целевого пользователя, root по умолчанию, с его обычной конфигурацией «входа»), потому что использование контролируемого пользователем PATH может привести к нарушению безопасности, что противоречит всей причине существования sudo. Смотрите
Как задать путь для команд sudo
Почему `sudo env "PATH=$PATH"` вообще что-то делает?
Передача PATH через sudo
Проблемы с переменной PATH как у пользователя sudo
Наиболее прямое решение — использовать полный путь к программе, которую вы хотите запустить; вместо того, чтобы вводить его вручную, вы можете сделать следующее:
sudo $(which java) # or maybe $(type -p java) in bash
который ищет java втвойЗатем PATH оболочки вызывает sudo срезультат.