Администрирование FreeBSD, Linux, ... Ubuntu: автоматическая установка переменных окружения Fri, December 06 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Ubuntu: автоматическая установка переменных окружения Печать
Добавил(а) microsin   

Переменные окружения (environment variables) - ключевая функция, помогающая организовать взаимодействие между пользователем, программным обеспечением и операционной системой. Переменные окружения дают возможность пользователям сохранять специфические для него данные или данные, специфические для системы и управлять ими, конфигурируя таким способом приложения и сервисы. В Ubuntu переменные окружения используются для настройки поведения командной строки (shell), определение путей (для запуска программ и поиска файлов), а также сохранения настроек для различного ПО. Например, в системе программирования ESP-IDF переменная переменная окружения $IDF_PATH содержит в себе полный путь до своего каталога. В этом руководстве (перевод статьи [1]) будет показано, как эффективно настраивать и управлять переменными окружения в Ubuntu.

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

• Файловые пути для системы и для пользователя.
• Ключи API и данные учетных записей.
• Конфигурации программного обеспечения.
• Настройки по умолчанию для шелла и команд.

Просмотр переменных окружения. Чтобы посмотреть текущий список переменных окружения, вы можете запустить команду printenv, после которой укажите имя интересующей переменной. Например:

$ printenv IDF_PATH

Запуск команды printenv без указания имени переменной выведет список всех переменных окружения. Также полный список переменных окружения можно вывести командой env:

$ env

$ env --help
Использование: env [ПАРАМЕТР]… [-] [ИМЯ=ЗНАЧЕНИЕ]… [КОМАНДА [АРГ]…]
Присваивает каждому ИМЕНИ соответствующее ЗНАЧЕНИЕ в окружении и запускает КОМАНДУ.
 
Аргументы, обязательные для длинных параметров, обязательны и для коротких.
  -i, --ignore-environment   начать с пустым окружением
  -0, --null                 завершать каждую выводимую строку NUL,
                             a не символом новой строки
  -u, --unset=ИМЯ            удалить переменную с ИМЕНЕМ из окружения
  -C, --chdir=КАТ            изменить рабочий каталог на КАТ
  -S, --split-string=S       обработать и разделить S на отдельные аргументы;
                             используется для указания нескольких аргументов
                             в строках с #!
  -v, --debug          выводить подробную информацию на каждом шаге обработки
      --help     показать эту справку и выйти
      --version  показать информацию о версии и выйти
 
Просто - будет синонимом для -i. Если не задана КОМАНДА, то печатает
получившееся (имеющееся в наличии) окружение. 

Страница справки по GNU coreutils: https://www.gnu.org/software/coreutils/. Об ошибках в переводе сообщений env пишите по адресу gnu@d07.ru. Полная документация: https://www.gnu.org/software/coreutils/env, или она доступна локально: info '(coreutils) env invocation'.

$ man env
 
ENV(1)
 
Commands
 
NAME
       env - запуск программы в модифицированном рабочем окружении
 
SYNOPSIS
       env [OPTION]... [-] [ИМЯ=ЗНАЧЕНИЕ]... [COMMAND [ARG]...]
 
ОПИСАНИЕ
       Установит каждое ИМЯ в ЗНАЧЕНИЕ (ИМЯ это переменная окружения)
       и запустит команду COMMAND.
 
       Обязательные аргументы для длинных опций также обязательны
       и для коротких опций.
 
       -i, --ignore-environment
              старт с пустым окружением
 
       -0, --null
              заканчивает каждую выводимую строку символом NUL вместо
              символа новой строки.
 
       -u, --unset=NAME
              удалит переменную из окружения
 
       -C, --chdir=DIR
              поменяет рабочую директорию на DIR
 
       -S, --split-string=S
              обработает и разделит S на отдельные аргументы; используется
              для передачи нескольких аргументов в одиночных строках
 
       -v, --debug
              напечатает подробную информацию по каждому шагу обработки
 
       --help отобразит этот текст подсказки и завершит работу
 
       --version
              выведет информацию о версии и завершит работу
 
       Простой - подразумевает -i. Если не указана COMMAND, то будет выведено
       результирующее окружение.
 
ОПЦИИ
   -S/--split-string используется в скриптах
       Опция -S позволяет указать несколько параметров в скрипте. Если запустить
       скрипт с именем 1.pl, которое содержится первая строка:
 
              #!/usr/bin/env -S perl -w -T
 
       .. то будет выполнена команда perl -w -T 1.pl .
 
       Без параметра '-S' скрипт завершится с ошибкой:
 
              /usr/bin/env: 'perl -w -T': No such file or directory
 
       Подробности см. в полной документации.
 
АВТОРЫ
       Richard Mlynarik, David MacKenzie и Assaf Gordon.

Для просмотра переменной окружения можно также использовать команду echo, для неё имя интересующей переменной окружения нужно указать через символ $, например:

$ echo $PATH
/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/имядомена/
  пользователь/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

[Временная настройка переменных окружения]

С помощью команды export, выполненной в терминале или скрипте, вы можете временно установить значение для текущего терминала командной строки (шелла). Эта переменная будет доступна только для текущей сессии, и будет потеряна после закрытия окна терминала.

Например, для установки переменной окружения $IDF_PATH запустите следующую команду:

$ export IDF_PATH=~/esp/v441

Для проверки, что переменная окружения была установлена, выполните команду:

$ printenv IDF_PATH
/home/имядомена/пользователь/esp/v441

Обратите внимание, что путь, указанный до домашнего каталога пользователя с помощью спецсимвола '~', система автоматически развернула до полного абсолютного пути от корневого каталога /. Чтобы установить переменную окружения буквально, нужно указать её значение в двойных кавычках:

$ export IDF_PATH="~/esp/v441"
$ printenv IDF_PATH
~/esp/v441

[Постоянная настройка переменных окружения]

Для переменных окружения, распространяющихся на систему, отредактируйте файл /etc/environment. В этом файле находится список пар ключ-значение, по одной паре на строку:

$ sudo mcedit /etc/environment

etc environment edit

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

Примечание: PATH это список путей, устанавливаемых для пользователя. Сама система также добавляет в эту переменную окружения еще и свой список.

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

IDF_PATH="~/esp/v441"

Сохраните изменения файла и выйдите из редактора. Настройка вступит в силу после перезагрузки.

[Настройка переменной окружения для определенного пользователя]

Для настройки переменных окружения, относящихся только к определенному пользователю, вы можете отредактировать его файлы ~/.profile или ~/.bashrc.

Замечание: в руководстве [1] для примера использовался файл ~/.profile. Однако на моей системе Ubuntu 20.04 файл ~/.profile не запускался автоматически при логине пользователя в систему. Файл ~/.bashrc для постоянных изменений работал нормально, поэтому здесь будем использовать его:

$ gedit ~/.bashrc

Добавьте команды для установки переменных окружения в конец файла:

export IDF_PATH=~/esp/esp-idf
export IDF_TOOLS_PATH=~/.espressif

Сохраните файл и выйдите из редактора текста. Настройки применятся автоматически в новом открытом окне терминала. Чтобы немедленно применить изменения в текущем окне, запустите команду:

$ source ~/.bashrc

Примечание: файл ~/.bashrc можно использовать не только для автоматической настройки переменных окружения, но и для любых действий, которые запустятся при открытии окна терминала x-terminal-emulator.

Команда unset. Чтобы отменить установку переменной окружения, используйте команду unset:

$ unset IDF_PATH

Файлы ~/.bashrc и ~/.profile широко используются для управления переменными окружения и конфигурациями, относящимися к конкретному пользователю. Вот отличия этих файлов по своему назначению, и когда они запускаются:

~/.bashrc выполняется для интерактивного терминала командой строки, такого как новое открытое вами окно терминала (для Ubuntu это программа x-terminal-emulator, запускаемая горячими клавишами Ctrl+Alt+T).

~/.profile выполняется для шеллов логина, таких как логин через SSH или TTY.

В большинстве случаев рекомендуется добавлять переменные окружения в ~/.profile, поскольку это дает гарантию, что переменные будут доступны как для шеллов логина, так и для шеллов, не относящихся к логину (non-login shells). Однако если вам нужно установить переменную только для интерактивному шеллу, то используйте ~/.bashrc.

[Настройка переменных окружения файлами /etc/profile.d/*.sh]

Для автоматической настройки переменных вы также можете создать свой shell-скрипт (файл с расширением .sh) в каталоге /etc/profile.d, он запустится при логине пользователя.

Давайте для примера создадим shell-скрипт /etc/profile.d/custom-env.sh, и установим в нем переменные с помощью команды export.

$ sudo nano /etc/profile.d/custom-env.sh

Вставьте в файл строки:

export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export JRE_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export MY_ENV="value1"

В следующий раз, когда пользователь залогинится, у него автоматически будут установлены переменные окружения JAVA_HOME, JRE_HOME и MY_ENV.

$ echo $MY_ENV
value1

[Ссылки]

1. Setting Up Environment Variables on Ubuntu site:tecadmin.net.
2. How do I set environment variables? site:askubuntu.com.

 

Добавить комментарий


Защитный код
Обновить

Top of Page