Переменные среды

При запуске другого процесса (любым из описанных способов) может возникнуть необходимость в подготовке среды выполнения. Как упоминалось ранее, процесс можно запустить с определенным рабочим каталогом, который наследуется от текущего процесса. Другой стандартный аспект конфигурации – переменные среды. Из всех переменных среды наибольшей известностью пользуется PATH. (Если вы никогда не слышали о ней, вероятно, в вашей системе переменные среды не поддерживаются.) В UNIX и других аналогичных системах PATH содержит разделенный двоеточиями список каталогов, в которых могут храниться программы. Когда вы вводите команду (например, rm fred), система последовательно ищет файл rm во всех перечисленных каталогах. Perl (или ваша система) использует PATH всегда, когда потребуется найти запускаемую программу. Если программа в свою очередь запускает другие программы, они тоже ищутся среди каталогов PATH. (Конечно, если команда запускается по полному имени, например /bin/echo, поиск в PATH оказывается лишним, но обычно запуск по полному имени слишком неудобен.)

В Perl для работы с переменными среды используется специальный хеш %ENV; каждый ключ хеша соответствует одной переменной.


В начале выполнения программы %ENV содержит значения, унаследованные от родительского процесса (чаще всего командного процессора). Модификация хеша изменяет переменные среды, которые наследуются новыми процессами и могут использоваться самим Perl. Допустим, вы хотите запустить системную утилиту make (которая обычно запускает другие программы) так, чтобы поиск команд (включая саму команду make) начинался с приватного каталога. Также будем считать, что при запуске команды переменная среды IFS не должна устанавливаться, потому что это может нарушить работу make или другой подкоманды. Вот как это делается:

$ENV{'PATH'} = "/home/rootbeer/bin:$ENV{'PATH'}";
delete $ENV{'IFS'};
my $make_result = system "make";

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

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Perl на эту тему:
Ветвление
Выполнение команд в обход командного процессора
Обратные апострофы в списочном контексте
Обратные апострофы и сохранение вывода
Отправка и прием сигналов

Вернуться в раздел: Perl / 15. Управление процессами