Обновляется с момента понижения голоса, поэтому, пожалуйста, если это исправит проблему, как это выглядит, когда я использовал виртуальную машину и арку, пожалуйста, проголосуйте, чтобы я удалил -1, пожалуйста.
Если ваша система использует SUDO, см. Вторую половину ниже ...
Для систем, которые используют ТОЛЬКО SU:
В некоторых системах он может быть псевдонимом, поэтому даже если вы используете su, он автоматически использует su - что заставляет использовать переменные нового пользователя, найденные в их bashrc
Посмотрите на своего персонального пользователя bash.rc для упомянутого псевдонима ниже и удалите его. Это должно остановить его от попыток использовать переменные пользователя root.
страница: https://wiki.archlinux.org/index.php/su
Соответствующий бит:
Таким образом, администраторы обычно должны использовать su следующим образом:
$ su -
Аналогичный результат получается при добавлении имени пользователя root:
$ su - root
Аналогично, то же самое можно сделать для любого другого пользователя (например, для пользователя с именем archie):
# su - archie
Вы можете добавить псевдоним в ~/.bashrc для этого:
alias su="su -"
Для систем SUDO
Это из-за конфигурации sudo. Я использовал следующий вопрос / ответ, чтобы начать работу: https://askubuntu.com/questions/128413/setting-the-path-so-it-applies-to-all-users-inclusive-root-sudo
В принципе:
Страница руководства для sudoers
гласит:
env_reset If set, sudo will reset the environment to only contain
the LOGNAME, MAIL, SHELL, USER, USERNAME and the SUDO_*
variables. Any variables in the caller's environment
that match the env_keep and env_check lists are then
added. The default contents of the env_keep and
env_check lists are displayed when sudo is run by root
with the -V option. If the secure_path option is set,
its value will be used for the PATH environment
variable. This flag is on by default.
и вот как это решить:
Таким образом, вы можете сделать следующее для поддержки переменных при использовании sudo
sudo visudo
это откроет настройки sudo для вас. Затем за то, что я сделал, вы добавили следующее ниже
Defaults secure_path="blah"
Defaults env_keep +="VARIABLE VARIABLE VARIABLE"
(ИСКЛЮЧАЯ ПУТЬ, как он установлен secure_path), и это просто одинарные пробелы между каждой переменной, если вы хотите, чтобы поддерживалось более 1.
и это говорит sudo, какие переменные env оставить, а не игнорировать.
Когда закончите, нажмите Ctrl и нажмите o, чтобы записать, нажмите ввод и скажите «да», чтобы сохранить [даже если он указывает на файл tmp, все в порядке, он будет записан обратно в основную конфигурацию, просто скажите «да», когда вас спросят, хотите ли вы перезаписать].
Это должно позволить вам поддерживать любые переменные, которые вы пожелаете (большой является JAVA_HOME, а также http_proxy, если вы используете прокси).
Так что это должно выглядеть примерно так, как указано ниже, включая указанную вами переменную:
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin/bin"
Defaults env_keep +="GRAILS_HOME"
и чтобы проверить, нужно ли закрыть все открытые окна терминала, открыть заново и запустить
echo $GRAILS_HOME
Должно быть то, что вы установили, теперь выдайте
sudo echo $GRAILS_HOME
и теперь оно должно остаться без изменений.
Ссылка Grails_home от меня помогает другому пользователю в сообществах Ubuntu, поэтому просто добавьте это имя вашей переменной.