linux
shell-builtin
export
Объявить переменную окружения — сделать её доступной дочерним процессам
Описание
Встроенная команда оболочки export помечает переменную как переменную окружения. Это означает, что переменная будет унаследована всеми дочерними процессами — программами, скриптами, командами, запущенными из этой сессии.
Без export переменная существует только в текущей оболочке и не передаётся дочерним процессам. С export — копия переменной попадает в окружение каждого запускаемого процесса.
Переменные принято называть БОЛЬШИМИ БУКВАМИ — это соглашение, не обязательное требование. Системные переменные окружения (PATH, HOME, LANG) всегда в верхнем регистре.
Синтаксис
# Объявить и сразу экспортировать
export MY_VAR=hello
# Экспортировать уже объявленную переменную
MY_VAR=hello
export MY_VAR
# Добавить каталог в PATH
export PATH=/opt/mybin:$PATH
# Объявить несколько переменных за раз
export MY_VAR=hello VAR2=world
Флаги и опции
| Флаг | Описание | Пример |
|---|---|---|
-p |
Вывести список всех экспортированных переменных в текущей сессии (в формате declare -x) |
export -p |
-n |
Снять признак экспорта с переменной — она останется в оболочке, но перестанет передаваться дочерним процессам | export -n MY_VAR |
-f |
Экспортировать функцию оболочки (а не переменную) — передать функцию дочерним bash-процессам | export -f my_function |
Паттерны использования
Объявить и прочитать переменную
# Источник: Linux_LfS6.txt (урок 10) export MY_VAR=hello export var=world echo $MY_VAR $var # hello world # ВСЕГДА используйте $ для чтения значения # echo MY_VAR -> выведет текст "MY_VAR", не значение!
Добавить каталог в PATH
# Добавить /opt/mybin в начало PATH export PATH=/opt/mybin:$PATH # Проверить результат echo $PATH # /opt/mybin:/usr/local/bin:/usr/bin:/bin # Теперь программы из /opt/mybin доступны по имени myprogram # найдётся в /opt/mybin/
Локальная vs экспортированная переменная
# Локальная — только в текущей оболочке local_var=local_value bash -c 'echo $local_var' # пусто — дочерний bash не видит # Экспортированная — передаётся дочерним процессам export global_var=global_value bash -c 'echo $global_var' # global_value
Постоянная переменная через ~/.bashrc
# Добавить в ~/.bashrc для постоянного сохранения: # ~/.bashrc export MY_PROJECT=/home/user/project export PATH=$MY_PROJECT/bin:$PATH # Применить изменения без перезапуска: source ~/.bashrc # или . ~/.bashrc
Советы и предупреждения
Частая ошибка: echo PATH вместо echo $PATH
Без знака
Без знака
$ команда echo PATH выведет текст «PATH», а не значение переменной. Чтобы прочитать значение, всегда используйте $: echo $PATH, echo $MY_VAR. Эта ошибка встречается постоянно и хорошо видна в выводе env | grep PATH.
Совет: постоянное добавление через ~/.bashrc
Переменные, заданные через
Переменные, заданные через
export в терминале, живут только до конца сессии. Чтобы переменная сохранялась между перезапусками, добавьте строку export MY_VAR=value в файл ~/.bashrc (для интерактивных сессий) или ~/.bash_profile (для login-сессий). После изменения файла выполните source ~/.bashrc.
Совет: export без пробелов вокруг =
В bash присвоение переменной НЕ терпит пробелов вокруг знака равенства:
В bash присвоение переменной НЕ терпит пробелов вокруг знака равенства:
export MY_VAR=hello — правильно; export MY_VAR = hello — ошибка синтаксиса. Это обязательное правило для всех присвоений переменных в bash.