Курс языка программирования Raku / Объекты, ввод-вывод и исключения / Ввод и вывод / Запуск внешних программ 🆕

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

Всякая программа запускается с набором переменных окружения — именованных значений вроде HOME, PATH или USER, которые предоставляет операционная система. В Raku они доступны в динамическом хеше %*ENV:

say %*ENV<HOME>; # домашний каталог, например /home/anna

Переменную окружения читают, обращаясь к %*ENV по её имени. Поскольку это обычный хеш, можно также проверить, задана ли переменная, или изменить её для программ, которые вы запускаете:

%*ENV<GREETING> = 'Hello';
say %*ENV<GREETING>; # Hello

Установка ключа в %*ENV добавляет его в окружение, которое унаследует любая программа, запущенная затем через run или shell, — так конфигурацию передают дочерней программе:

%*ENV<GREETING> = 'Hello';

my $proc = run 'sh', '-c', 'echo $GREETING', :out;
say $proc.out.slurp(:close).chomp; # Hello

Переменная устанавливается в окружении вашей программы до запуска потомка, поэтому оболочка, которую стартует run, уже имеет GREETING в собственном окружении и может его вывести. Любая установленная так переменная достаётся каждой программе, запущенной впоследствии.

Твигил * говорит о том, что %*ENV — динамическая переменная, как и $*OUT из части о вводе и выводе. Ещё несколько переменных со звёздочкой описывают мир работающей программы: @*ARGS содержит аргументы командной строки, а $*PROGRAM-NAME — имя самого скрипта. Вместе они позволяют программе понять, в каком контексте её запустили.

Практика

Пройдите 1 тест по содержанию этой темы.

Навигация по курсу

Тест — Объект Proc   |   Тест — Переменные окружения


💪 Или перейдите сразу к упражнениям этого раздела.