Библиотека сайта rus-linux.net
Изучаем команды Linux: export
Оригинал: Learning Linux Commands: exportАвтор: Lubos Rendek
Дата публикации: февраль 2013 года
Перевод: А. Кривошей
Дата перевода: апрель 2013 г.
1. Введение
Export - это одна из встроенных команд оболочки bash, поэтому она является неотъемлемой частью вашей командной строки. Она очень проста в использовании, так как синтаксис export допускает использование всего трех опций командной строки. В целом команда export отмечает переменную окружения для экспорта с любым новым дочерним процессом, и это позволяет дочернему процессу наследовать все отмеченные переменные. В данной статье этот процесс будет описан более подробно.
2. Часто используемые опции
-p
выводит список всех имен, экспортированных в текущей оболочке
-n
удаляет имена из списка экспорта
-f
имена экспортируются как функции
3. Основы export
Подумайте над следующим примером:
$ a=linuxcareer.com $ echo $a linuxcareer.com $ bash $ echo $a $
Строка 1: создается новая переменная с именем "a", содержащая строку "linuxcareer.com".
Строка 2: мы используем команду echo, чтобы вывести содержимое переменной "a".
Строка 3: мы создаем дочерний экземпляр оболочки bash.
Строка 4: переменная "a" теперь не определена.
Из приведенного выше примера можно видеть, что любой дочерний процесс, ответвляющийся от родительского процесса, по умолчанию не наследует переменные родителя. Для этого и нужна команда export. Что произойдет, если мы используем команду export в вышеприведенном примере?
$ a=linuxcareer.com $ echo $a linuxcareer.com $ export a $ bash $ echo $a linuxcareer.com $
Теперь в строке 3 мы использовали команду export, чтобы экспортировать переменную "a" в созданный новый дочерний процесс. В результате переменная "a" все еще содержит строку "linuxcareer.com", даже после создания нового экземпляра оболочки bash. Здесь важно отметить, что для успешного экспорта "a" необходимо, чтобы процесс, в который экспортируется переменная, ответвлялся от того родительского процесса, из которого экспортируется эта переменная. Связь между дочерним и родительским процессами описана ниже.
4. Дочерние и родительские процессы
В этом разделе мы коротко опишем взимосвязь между дочерним и родительским процессом. Все процессы могут быть родительскими и дочерними одновременно. Единственным исключением является процесс init, который всегда имеет PID (ID процесса) 1. Поэтому init является родительским для всех процессов, запущенных в системе Linux.
$ ps -p 1 PID TTY TIME CMD 1 ? 00:00:02 init
Любой создаваемый процесс имеет родительский процесс, из которого он создается, и может быть определен как потомок этого родительского процесса. Например:
$ echo $$ 27861 $ bash $ echo $$ 28034 $ ps --ppid 27861 PID TTY TIME CMD 28034 pts/3 00:00:00 bash
Строка 1: вывести PID текущей командной оболочки - 27861
Строка 2: создать новый дочерний процесс из процесса с ID 27861
Строка 3: вывести PID текущей командной оболочки - 28034
Строка 4: вывести список дочерних процессов для PID 27861 с помощью команды ps
При создании нового дочернего процесса команда export просто обеспечивает, что все экспортируемые переменные родительского процесса доступны в дочернем процессе.
5. Использование команды export
Теперь, изучив основы, мы можем продолжить детальное исследование команды export. При использовании команды безо всяких опций и аргументов она просто выводит имена всех переменных, отмеченных для экспорта в дочерние процессы. То же самое происходит при использовании опции -p:
$ export declare -x COLORFGBG="15;0" declare -x DEFAULTS_PATH="/usr/share/gconf/cinnamon.default.path" declare -x DESKTOP_SESSION="cinnamon" declare -x DISPLAY=":0".....
Как было показано выше, для экспорта переменной мы просто используем имя переменной в качестве аргумента команды export.
$ MYVAR=10 $ export | grep MYVAR $ export MYVAR $ export | grep MYVAR declare -x MYVAR="10"
Как вы можете видеть, после экспорта переменной MYVAR, она будет показываться в списке экспортируемых переменных (строка 4). Приведенный выше пример можно сократить, используя команду export сразу при присваивании значения переменной.
$ export MYVAR=10 $ export | grep MYVAR declare -x MYVAR="10"
Наиболее широко команда export применяется для объявления переменной оболочки PATH:
export PATH=$PATH:/usr/local/bin
В этом примере мы включаем дополнительный путь /usr/local/bin в существующее определение PATH.
6. Экспорт функций командной оболочки
Используя опцию -f, команда export может быть также использована для экспорта функций. В примере ниже мы создаем функцию оболочки под именем printname, которая просто выводит строку "Linuxcareer.com" с помощью команды echo.
$ printname () { echo "Linuxcareer.com"; } $ printname Linuxcareer.com $ export -f printname $ bash $ printname Linuxcareer.com
7. Удаление имен из списка экспорта
Выполнив один из вышеприведенных примеров, мы имеет переменную MYVAR, определенную в списке экспорта.
$ export | grep MYVAR declare -x MYVAR="10"
Чтобы удалить переменную из списка экспорта, необходимо использовать опцию -n.
$ export | grep MYVAR declare -x MYVAR="10" $ export -n MYVAR $ export | grep MYVAR $"
8. Заключение
В этой статье рассмотрены основы использования команды export. Чтобы узнать больше подробностей, используйте команду:
$ man export