Команда export является встроенной командной командной оболочки bash, позволяющей устанавливать значения переменных окружения. Для ознакомления с полным списком переменных окружения и их значений может использоваться команда env.
Базовый синтаксис команды выглядит следующим образом:
$ export [параметры] ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ
В том случае, если нужно объявить переменную без установки ее значения, в качестве аргумента может использоваться лишь имя переменной. Команда принимает несколько параметров, которые используются крайне редко. В частности, параметр -p позволяет вывести список всех переменных окружения. Параметр -n позволяет убрать из списка переменных окружения переменную с заданным именем. Наконец, параметр -f позволяет экспортировать функции командной оболочки по аналогии с переменными.
На первый взгляд может показаться, что команда export является бесполезной, так как вы можете объявлять переменные без нее:
$ export a=b
$ echo $a
b
$ x=y
$ echo $x
y
Так какая разница между следующими объявлениями:
$ export first="hello"
$ first="hello"
Ну, разница заключается в том, что команда export устанавливает значение переменной окружения, доступной для всех программ, запускаемых с помощью данной командной оболочки. Например, вы можете создать файл test.sh сценария командной оболочки со следующим содержимым:
$ echo $first
$ echo $second
Теперь присвойте переменным различные значения и запустите сценарий с помощью командной оболочки:
$ chmod +x test.sh
$ first=hello
$ export second=world
$ ./test.sh
В результате будет выведено лишь значение второй переменной, а именно:
world
Очевидно, что значение первой переменной не доступно сценарию test.sh, в отличие от значения второй переменной, объявленной с помощью команды export.
Для того, чтобы система искала исполняемые файлы в нестандартной директории достаточно добавить путь к этой директории в список директорий, являющийся значением переменной $PATH. Для этой цели может использоваться команда export. Например, для добавления в список директорий путь к текущей директории достаточно выполнить следующую команду:
$ export PATH=$PATH:.
В данном случае создается локальная переменная окружения PATH, значение которой равно значению глобальной переменной PATH с добавленными к нему символами двоеточия (разделитель путей к директориям) и точки (обозначение текущей директории). Таким же образом могут создаваться локальные варианты всех глобальных переменных окружения.
Для того, чтобы экспортировать функцию из одного сценария в другой следует использовать команду export с параметром -f. Это код первого сценария script.sh, из которого экспортируется функция say_hello(), после чего вызывается второй сценарий script2.sh:
#!/bin/bash
say_hello() {
echo "Hello!"
}
export -f say_hello
./script2
А это — код второго сценария script2.sh, в котором не делается ничего кроме вызова этой экспортированной функции:
#!/bin/bash
say_hello
Теперь при исполнении первого сценария script1.sh будет исполняться второй сценарий script2.sh, вызывающий экспортированную функцию say_hello(). Несложно убедиться в том, что механизм экспорта функций отлично работает:
$ ./script1.sh
Hello!