Как изменить PATH при загрузке так, чтобы это повлияло на всех?

Как изменить PATH при загрузке так, чтобы это повлияло на всех?

Я установил 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 срезультат.

Связанный контент