Як назавжди експортувати змінну в 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.