Переменные среды окружения

Любая программа, работающая в Linux, имеет так называемое окружение — специальную область памяти, в которой хранятся строки вида:

ИМЯ=ЗНАЧЕНИЕ 

Эти строки называются переменные среды окружения.

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

У переменных есть имена. В имени можно использовать только английские буквы, символы – и _, цифры (но не в начале имени). Большие и маленькие буквы отличаются. Имена переменных среды окружения принято писать, используя большие буквы, но Вы можете не следовать этому правилу.

Переменные среды окружения — это еще один способ управления программами. Программы имеют доступ к переменным и могут использовать значения переменных в своей работе. Например, программам, работающим в графической оболочке в Linux, можно указать X сервер, с помощью которого они будут выводить свои данные. Это можно сделать двумя способами:

  • передать программе при запуске специальный параметр;
  • определить переменную среды окружения DISPLAY.

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

То, какие переменные среды окружения использует программа зависит от ее автора.

Вы как пользователь системы можете определять, изменять и удалять переменные среды окружения.

Давайте рассмотрим пример работы с переменными. Что бы добавить новую переменную в окружение программы надо написать ее имя, затем без пробелов символ = и значение переменной.

$ CAR=запорожец
$

Переменные среды окружения не имеют типа и считается, что они содержат строку. Если в строке встречаются пробелы, значение переменной берут в двойные кавычки.

$ CAR="запорожец - это машина?"
$

Для того, что бы получить значение переменной, перед ее именем необходимо поставить символ $. Вместо $CAR, шелл подставит значение переменной CAR.

Используйте программу echo если вы хотите увидеть значение переменной. Echo выводит на стандартный вывод все, что вы передадите ей в командной строке. Например, что бы посмотреть содержимое переменной CAR следует выполнить следующую команду:

$ echo $CAR
запорожец - это машина?
$

Содержимое переменной было выведено на экран в следующей строке.

В то же время:

$ echo CAR
CAR
$

Предположим, что мы присвоили переменной CAR значение bmw. И запустили еще одну оболочку — sh.

$ CAR=bmw
$ sh
$

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

$ echo $CAR
$

В UNIX есть возможность заранее определить переменные, которые будут помещены в окружение программы при ее запуске. Ниже приведен пример того, что необходимо сделать, что бы переменная CAR была доступна программе sh.

$ CAR=bmw
$ export CAR
$ sh
$ echo $CAR
bmw
$

Переменную нужно экспортировать при помощи оператора export. Только экспортированные переменные будут видны в программах-потомках. То есть во всех программах, которые будут запущены из программы, где переменная была определена. Эта переменная будет автоматически определяться только у программ потомков и только у них. На остальные программы, работающие в системе, операция экспорта не повлияет.

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

Существует набор файлов, которые выполняются при входе пользователя в систему (обычно в Linux — это файлы, находящиеся в директории /etc/profile.d. Но могут применяться и другие файлы, это зависит от используемой программы оболочки.). Именно в этих файлах можно осуществить добавление или переопределение переменных среды окружения. Если говорить о конкретном пользователе, то используют файл ~/.bash_profile или ~/.profile (символ тильда обозначает домашнюю директорию текущего пользователя).

Для изменения содержимого переменной следует просто присвоить ей новое значение. Например, необходимо в переменную PATH добавить директорию ~/bin. Для этого можно отредактировать файл .bash_profile и добавить в него следующую строку:

export PATH=$PATH:~/bin

Для удаления переменной используется команда unset. Например:

$ unset CAR
$ echo $CAR
$