Здравствуйте, уважаемые подписчики! Этот выпуск рассылки открывает новую тему "Программное окружение". Я долго думал и решил разбить материал на две части. Сегодня, вопреки традиции, мы отдохнем от программирования и займемся командными оболочками.
Рад сообщить вам, что на сайте Lindevel.Ru появилась возможность создания коллективных проектов по разработке программного обеспечения для Linux. Если у вас есть идеи и желание программировать - присоединяйтесь. И помните: лучший способ научиться программировать - это программировать. Подробности на сайте в разделе "Проекты".
Если возникнут вопросы, задавайте их в форуме. Справочная информация и электронные учебники доступны в файловом архиве на Lindevel.Ru. Сайт постоянно пополняется новыми материалами и программным обеспечением.
2. Теория
2.1. Программное окружение.
Большинство программ в Linux запускаются с аргументами. Таким образом мы настраиваем поведение приложения для конкретных нужд. Однако существует целый ряд специфичных параметров, характерных для конкретного пользователя или для конкретной системы, которые необходимы подавляющему большинству приложений. К таким параметрам относятся: текущий каталог, домашний каталог пользователя, имя пользователя, тип терминала и многое другое. Весь набор таких параметров называют программным окружением или средой выполнения
(environment).
Окружение представляет собой набор пар ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ. Такие переменные называют переменными окружения или переменными среды (environment variables). Чтобы вывести на экран все окружение, используют команду printenv. Переменная USER, например, содержит регистрационное имя пользователя; в переменной HOME хранится путь к домашнему каталогу пользователя, а в переменной PWD находится текущий каталог. Значениями переменных окружения являются строковые константы.
Каждый новый процесс в системе наследует от своего родителя среду выполнения и может модифицировать ее по мере необходимости при помощи специальных функций. Но с командными оболочками дело обстоит сложнее. Рассмотрим три самые популярные оболочки: Bourne (bsh, bash), C-shell (csh, tcsh) и Korn (ksh). Каждая из них, являясь интерпретатором собственного командного языка, поддерживает использование локальных переменных. И здесь их сходства заканчиваются. Оболочки Bourne и Korn поддерживают команду export, которая
экспортирует в программную среду какую-нибудь свою локальную переменную. В оболочках языка C (C-shell) локальные переменные и переменные окружения почти никак не связаны. Для создания первых используется команда set, а для работы с переменными окружения вызывают команду setenv.
Рассмотрим для наглядности маленький пример того, как наиболее популярная в Linux оболочка bash (Bourne-Again SHell) работает с переменными.
В приведенном примере хорошо видно, что для извлечения значения локальной переменной оболочки bash используется знак "доллар". Для получения дополнительной информации, читайте документацию к своей оболочке.
Вообще говоря, для переменных окружения действуют свои правила.
Переменные окружения принято обозначать заглавными буквами латинского алфавита.
Имя переменной окружения может содержать символы подчеркивания и цифры, но цифра не может быть первой.
Значением переменной окружения является строковая константа.
Строки, являющиеся значениями переменных окружения интерпретируются по-разному. Ярким примером тому является переменная PATH, предназначенная для объявления каталогов с программами для быстрого вызова (без указания абсолютного пути к исполняемому файлу). Если бы в переменной PATH отсутствовал каталог /bin, то команду ls приходилось бы вызвать командой /bin/ls. Имена каталогов отделяются друг от друга в переменной PATH двоеточием. Используя переменные окружения в своих программах, необходимо точно знать, как
интерпретируются их значения.
Во всех известных оболочках для смены текущего каталога используется внутренняя команда cd. Подумайте, какой еще командой можно сменить текущий каталог.
В следующем выпуске рассылки мы научимся читать и модифицировать окружение в своих программах, а также узнаем нечто новое о функциях семейства exec().
До новых встреч.
Николай.
mailto: nnivanov@mail.ru