Як назавжди експортувати змінну в Linux?


156

У мене працює RHEL6, і я експортував змінну середовища на зразок цієї:

export DISPLAY=:0

Ця змінна втрачається, коли термінал закритий. Як я постійно додаю це, щоб це значення змінної завжди існувало у конкретного користувача?

Відповіді:


172

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


3
Дякую, це корисно. Як я можу зробити зміни, які набирають чинності без перезавантаження? (Я новачок у Linux)
Bitterblue

6
@ mini-me - ~ / bashrc витягується кожного разу, коли ви відкриваєте оболонку. Щоб завантажити його явно, використовуйте, sourceнаприклад, - > source ~/.bashrc.
костя

@kostja Для всіх нових снарядів? Якщо у мене запущене затемнення до того, як я зміню ці змінні env, і я хочу, щоб eclipse змінив vars, чи потрібно перезапускати затемнення?
Bitterblue

1
@ mini-me: середовище процесу, як правило, встановлюється абонентом і змінюється всередині процесу. Змінювати навколишнє середовище з боку запущеного процесу незвично і не під силу export, але спробуйте з налагоджувачем
Antoine

1
@ Mr.Hyde: Зазвичай це не має значення. Файли аналізуються зверху вниз, тому, якщо визначення var залежить від іншого, їх слід упорядкувати відповідно. Так що так кінець файлу добре.
Антуан

120

Вам потрібно відредагувати три файли, щоб встановити постійну змінну середовища таким чином:

  • ~ / .bashrc

    Коли ви відкриєте будь-яке вікно терміналу, цей файл буде запущений. Тому, якщо ви хочете мати постійну змінну середовища у всіх вікнах своїх терміналів, вам потрібно додати наступний рядок в кінці цього файлу:
    експортувати DISPLAY = 0

  • ~ / .профіль

  • Так само, як 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, потім зробіть його виконуваним і просто запустіть його!


    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Витягуються при кожному запуску Баша сесії.


    27

    У системах Ubuntu використовуйте такі місця:

    1. Загальносистемні стійкі змінні у форматі JAVA_PATH=/usr/local/javaзберігання в

      /etc/environment
      
    2. Стійкі загальносистемні змінні, на які посилаються змінні, такі як
      export PATH="$JAVA_PATH:$PATH"зберігати в

      /etc/.bashrc
      
    3. Постійні змінні специфічні змінні у форматі PATH DEFAULT=/usr/bin:usr/local/binзберігання в

      ~/.pam_environment
      

    Для отримання більш детальної інформації про номер 2, перевірте цю відповідь на запитання Ubuntu . ПРИМІТКА: №3 - рекомендація Ubuntu, але може мати проблеми з безпекою в реальному світі.


    2

    Конкретний приклад: у мене встановлені Java 7 і Java 6, мені потрібно запустити деякі збірки з 6, інші - з 7. Тому мені потрібно динамічно змінювати, JAVA_HOMEщоб Maven підбирав те, що я хочу для кожної збірки. Я зробив наступне:

    • створений j6.shсценарій, який просто робить JAVA_HOME=...шлях експорту до встановлення j6 ...
    • тоді, як запропоновано одним із коментарів вище, коли мені потрібен J6 для складання, я запускаю джерело j6.shу відповідному командному терміналі. За замовчуванням моє 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/

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