Как постоянно экспортировать переменную в Linux?

156

Я использую RHEL6, и я экспортировал переменную среды, как это:

export DISPLAY=:0

Эта переменная теряется при закрытии терминала. Как я могу добавить это навсегда, чтобы это значение переменной всегда существовало для конкретного пользователя?

user1340582
источник

Ответы:

172

Вы можете добавить его в свой файл конфигурации оболочки, например, $HOME/.bashrcили более глобально в /etc/environment. После добавления этих строк изменения не будут мгновенно отражаться в системе, основанной на графическом интерфейсе, вам необходимо выйти из терминала или создать новый, а на сервере выйти из сеанса и войти в систему, чтобы отразить эти изменения.

Antoine
источник
3
Спасибо, это полезно. Как сделать изменения вступившими в силу без перезапуска? (Я новичок в Linux)
Bitterblue
6
@ mini-me - ~ / bashrc тянется каждый раз, когда вы открываете оболочку. Чтобы загрузить его явно, используйте, sourceнапример, - > source ~/.bashrc.
Костя
@kostja Для всех новых оболочек? Если у меня запущено eclipse до того, как я изменю эти переменные env, и я хочу, чтобы eclipse изменила переменные, нужно ли перезапускать eclipse?
Bitterblue
1
@ mini-me: среда процесса обычно устанавливается вызывающей стороной и изменяется внутри процесса. Изменение env извне запущенного процесса необычно и не выполнимо export, но попробуйте с отладчиком
Antoine
1
@ Mr.Hyde: Обычно это не имеет значения. Файлы анализируются сверху вниз, поэтому, если определение var зависит от другого, их следует упорядочить соответствующим образом. Так что да, конец файла в порядке.
Антуан
120

Вы должны отредактировать три файла, чтобы установить постоянную переменную среды следующим образом:

  • ~ / .Bashrc

    При открытии любого окна терминала этот файл будет запущен. Поэтому, если вы хотите иметь постоянную переменную среды во всех окнах вашего терминала, вы должны добавить следующую строку в конце этого файла:
    export DISPLAY = 0

  • ~ / .Profile

  • Как и в случае с bashrc, вы должны поместить упомянутую командную строку в конец этого файла, чтобы переменная окружения была при каждом входе в систему вашей ОС.

  • / И т.д. / окружающая среда

  • Если вы хотите, чтобы ваша переменная окружения была в каждом окне или приложении (не только в окне терминала), вам нужно отредактировать этот файл. Добавьте следующую команду в конец этого файла:
    DISPLAY = 0
    Обратите внимание, что в этом файле вам не нужно писать команду экспорта

Обычно вы должны перезагрузить компьютер, чтобы применить эти изменения. Но вы можете применить изменения в bashrc и профиле с помощью этих команд:

$ source ~/.bashrc
$ source ~/.profile

Но для / etc / environment у вас нет выбора, кроме перезапуска (насколько я знаю)

  • Простое решение

  • Я написал простой сценарий для этой процедуры, чтобы выполнить всю эту работу. Вам просто нужно установить имя и значение вашей переменной среды.

    #!/bin/bash
    echo "Enter variable name: "
    read variable_name
    echo "Enter variable value: "
    read variable_value
    echo "adding " $variable_name " to environment variables: " $variable_value
    echo "export "$variable_name"="$variable_value>>~/.bashrc
    echo $variable_name"="$variable_value>>~/.profile
    echo $variable_name"="$variable_value>>/etc/environment
    source ~/.bashrc
    source ~/.profile
    echo "do you want to restart your computer to apply changes in /etc/environment file? yes(y)no(n)"
    read restart
    case $restart in
        y) sudo shutdown -r 0;;
        n) echo "don't forget to restart your computer manually";;
    esac
    exit
    

    Сохраните эти строки в shfile, затем сделайте его исполняемым и просто запустите его!

    e_soroush
    источник
    1
    Сценарий работал очень хорошо. У меня установлена ​​Ubuntu 14.04. Я просто вставил содержимое выше в пустой файл, назвав его insert_var.sh , затем chmod -x insert_var.sh, затем bash insert_var.sh. Спасибо.
    Брунно Водола Мартинс
    Я открыл окно терминала в Ubuntu и ввел экспорт MY_VAR = 1. Где будет храниться эта переменная MY_VAR?
    vgokul129
    29

    добавьте строку в ваш .bashrcили .profile. Установленные переменные $HOME/.profileактивны для текущего пользователя, а /etc/profileглобальные. .bashrcВытягиваются при каждом запуске Баша сессии.

    Kostja
    источник
    27

    В системах Ubuntu используйте следующие места:

    1. Общесистемные постоянные переменные в формате JAVA_PATH=/usr/local/javastore in

      /etc/environment
      
    2. Общесистемные постоянные переменные, которые ссылаются на такие переменные, как
      export PATH="$JAVA_PATH:$PATH"хранилище в

      /etc/.bashrc
      
    3. Пользовательские постоянные переменные в формате PATH DEFAULT=/usr/bin:usr/local/binмагазина в

      ~/.pam_environment
      

    Для получения более подробной информации о # 2, проверьте этот ответ Ask Ubuntu . ПРИМЕЧАНИЕ: № 3 является рекомендацией Ubuntu, но может иметь проблемы с безопасностью в реальном мире.

    ЦСИ
    источник
    2

    Конкретный пример: у меня установлены Java 7 и Java 6, мне нужно запустить некоторые сборки с 6, другие с 7. Поэтому мне нужно динамически изменять, JAVA_HOMEчтобы maven выбирал то, что я хочу для каждой сборки. Я сделал следующее:

    • создал j6.shскрипт, который просто экспортирует JAVA_HOME=...путь в j6 ...
    • затем, как предлагается в одном из комментариев выше, всякий раз, когда мне нужна J6 для сборки, я запускаю исходный код j6.shв соответствующем командном терминале. По умолчанию для my JAVA_HOMEустановлено значение J7.

    Надеюсь это поможет.

    Кристиан Ботиза
    источник
    1

    Если это кому-то подходит, вот несколько кратких рекомендаций по постоянному добавлению переменных среды.

    vi ~/.bash_profile
    

    Добавьте переменные в файл:

    export DISPLAY=:0
    export JAVA_HOME=~/opt/openjdk11
    

    Немедленно примените все изменения:

    source ~/.bash_profile
    

    Источник: https://www.serverlab.ca/tutorials/linux/administration-linux/how-to-set-environment-variables-in-linux/

    dasilvadaniel
    источник