Зробіть $ JAVA_HOME легко змінюваним в Ubuntu [закрито]


139

В Ubuntu я хотів би переключити змінну середовища JAVA_HOME вперед і назад між Java 5 і 6.

Я відкриваю термінал і набираю наступне для встановлення змінної середовища JAVA_HOME:

export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun

І в тому ж термінальному вікні я ввожу таке, щоб перевірити, чи змінена середовище змінена:

echo $JAVA_HOME

І я бачу /usr/lib/jvm/java-1.5.0-sun, що саме я очікую побачити. Крім того, я змінюю ~ / .profile і встановлюю змінну середовища JAVA_HOME на /usr/lib/jvm/java-1.5.0-sun.

А тепер про проблему - коли я відкриваю нове вікно терміналу і перевіряю мінливу середовища JAVA_HOME, ввівши ехо $ JAVA_HOME, я бачу, що мінлива середовище JAVA_HOME повернена назад до Java 6. Коли я перезавантажую машину (або журнал) гадаю, і назад, я вважаю, що змінна середовища JAVA_HOME встановлена ​​на Java 5 (імовірно, через модифікацію, яку я зробив у своєму ~ / .profile).

Чи є спосіб цього зробити так, щоб я міг змінити своє середовище JAVA_HOME, не виходячи з системи та повернутися назад (І зробити цю зміну змінної середовища дотримуватися у всіх нових вікнах терміналів)?


29
Який правильний сайт та дублююча відповідь?
Мартін Конічек

~/.profileФайл зчитується тільки при вході в Ubuntu, так що якщо ви вихід з системи / Логін потім JAVA_HOME встановлюються для всіх терміналів і будь-яких інших додатків , які ви запускаєте. Якщо ви встановите JAVA_HOME в ~/.bashrcньому, його побачать лише програми, запущені з терміналу.
jr0cket

Відповіді:


196

Помістіть змінні середовища у глобальний /etc/environmentфайл:

...
export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun
...

Виконайте "source / etc / environment" у кожній оболонці, де потрібно оновити змінні:

$ source /etc/environment

Перевірте, чи працює він:

$ echo $JAVA_HOME
$ /usr/lib/jvm/java-1.5.0-sun

Чудово, не потрібен вихід.

Якщо ви хочете встановити змінну середовища JAVA_HOME лише у терміналі, встановіть її у файлі ~ / .bashrc .


9
Ще потрібен перезапуск, щоб ці зміни вплинули на програми, запущені через інтерфейс Ubuntu (тобто двічі клацнувши додаток)
Ерік Ху

7
Чим це відрізняється від встановлення змінної в оболонці кожного friggin?
mlissner

1
Ще один спосіб не потрібно запускати це вручну кожен раз - це змінити ваш .bashrc файл, щоб включити команду "source / etc / environment"
nityan

1
@MartinKonicek ваш приклад неправильний. на цьому рядку не повинно бути жодного "експорту". / etc /
Environment

1
майте на увазі, що /etc/environmentце спеціальне і не допускає змінної підстановки, наприклад JRE_HOME=${JAVA_HOME}/jre, не буде працювати.
Абдул

31

Це, ймовірно, вирішить вашу проблему: https://help.ubuntu.com/community/EnvironmentVariables

Змінні середовища для всієї сесії

Щоб встановити змінні середовища таким чином, що впливає на певне середовище користувача, не слід розміщувати команди для встановлення їх значень у конкретних файлах скриптів оболонки в домашній каталог користувача, а використовувати:

~ / .pam_environment - Цей файл призначений спеціально для налаштування середовища користувача. Це не сценарій, а складається з виразів призначення, по одному на рядок.

Не рекомендовано:

~ / .profile - Це, мабуть, найкращий файл для розміщення завдань змінної середовища, оскільки він автоматично виконується DisplayManager під час сеансу робочого столу процесу запуску, а також оболонкою входу при вході в систему з текстової консолі.


За посиланням, яке ви надали: "Нижче не рекомендується, але попереднє рішення (?), Представлене на цій сторінці, не працювало з версією робочого столу 10.04. .Pam_environment, природно, не розповсюджується."
Кальмарій

14
~ / .pam_environment - це чудовий спосіб цементувати ваш логін, якщо ви припускаєте, що він обробляє змінні. Я спробував встановити PATH на $ {PATH}: $ {HOME} / bin, і не вдалося оцінити змінні. Чистий результат: не вдається увійти :( Виправлено, відвідавши Ctrl-Alt-1 та запустивши "/ bin / rm ~ / .pam_environment". Будьте винятково уважні або використовуйте вторинний обліковий запис для перевірки налаштувань тут.
Ален О'Деа,

6
Особисто я не знаю, чому вони заважали створювати файл середовища, а потім працювали зовсім іншим способом, ніж будь-який інший механізм встановлення змінних середовища, що колись працював раніше. Прості пари ключових значень, такі як файл середовища, - звичайний BS. Існує причина, що ми використовуємо змінні та посилання в оточенні, і це все ще має заслугу сьогодні. Це спрощує адміністрування. Той, хто є бозосом, хто вирішив, що найкращий спосіб PAM в цьому файлі є імбецилами в кращому випадку. Змінні НЕОБХІДНО тлумачити.
Білл Росмус

1
@ AlainO'Dea: У мене було точно таке ж питання. Шокований і стурбований, коли мені не вдалося пройти екран екрана входу. Після деякого копання я виявив, що можна використовувати змінні, але потрібно використовувати інший синтаксис. напр. PATH DEFAULT = $ {PATH}: $ {HOME} / bin Коли він не використовує змінну, просте завдання, здається, працює.
tim_wonil

Так, я згоден з @ AlainO'Dea. Якщо у вашому сценарії є якась помилка, ви не зможете увійти в систему. Піклуватися.
Еван Ху

13

Спробуйте виконати ці дії.

- Ми будемо редагувати "etc \ profile". Змінні середовища слід вводити внизу файлу. Оскільки Ubuntu не дає доступу до кореневої папки, нам доведеться використовувати декілька команд у терміналі

Крок1: Запуск терміналу. Введіть команду:gksudo gedit /etc/profile

Крок 2. Відкриється текстовий файл профілю. Введіть змінні середовища в нижній частині сторінки ........... Наприклад: export JAVA_HOME=/home/alex/jdk1.6.0_22/bin/java

export PATH=/home/alex/jdk1.6.0_22/bin:$PATH

step3: збережіть і закрийте файл. Перевірте, чи встановлені змінні середовища за допомогою команди echo ........ Напр echo $PATH


9

Вам потрібно помістити змінне визначення у ~/.bashrcфайл.

З сторінки bash man:

Коли запускається інтерактивна оболонка, яка не є оболонкою для входу, bash зчитує та виконує команди з /etc/bash.bashrc та ~ / .bashrc, якщо ці файли існують.


5

Традиційно, якщо ви хочете лише змінити змінну у вікнах свого терміналу, встановіть її у .bashrcфайл, який отримується щоразу, коли новий термінал відкривається. .profileфайл не отримується щоразу, коли ви відкриваєте новий термінал.

Дивіться різницю між .profile та .bashrc, про які йдеться: Яка різниця між .bashrc, .bash_profile та .en Environment

.bashrcмає вирішити вашу проблему. Однак це не правильне рішення, оскільки ви використовуєте Ubuntu. Див. Відповідну довідкову сторінку Ubuntu " Змінні середовища для всіх сесій ". Таким чином, недарма .profileце не працює для вас. Я використовую Ubuntu 12.04 та xfce. Я налаштував свої , .profileі він просто не вступає в силу , навіть якщо я вийти і в Росії . Подібний досвід тут . Тож вам, можливо, доведеться використовувати .pam_environmentфайл і зовсім забути про .profile, і .bashrc. І ПРИМІТКА, .pam_environmentце не файл сценарію.




1

Після внесення змін у .profile потрібно виконати файл, щоб зміни набрали чинності.

root@masternode# . ~/.profile

Як тільки це буде зроблено, команда echo запрацює.


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