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

Решение: Передайте переменную дочернему процессу

Вот один из возможных вариантов решения задачи.

Код

my $file = 'notes.txt';
spurt $file, "one\ntwo\nthree\n";

%*ENV<NOTES> = $file;

my $proc = shell 'wc -l < "$NOTES"', :out;
say $proc.out.slurp(:close).trim;

unlink $file;

🦋 Исходный код можно найти в файле read-env.raku.

Вывод

3

Комментарии

  1. spurt создаёт notes.txt с тремя строками. Присваивание %*ENV<NOTES> его имени помещает имя файла в окружение, которое унаследует любая дочерняя программа.

  2. Команда shell наследует это окружение, подставляет вместо $NOTES значение notes.txt и передаёт файл в wc -l, который считает его строки. Перенаправление < "$NOTES" оставляет в выводе только число 3, которое мы перехватываем через :out и обрезаем.

  3. Наконец, уборка выполняется уже средствами Raku, через unlink, — оболочка тут не нужна. Удаление файла — обычная операция файловой системы, так что запускать ради неё ещё один процесс незачем.

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

Передайте переменную дочернему процессу   |   Исключения