Курс языка программирования 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Комментарии
spurtсоздаётnotes.txtс тремя строками. Присваивание%*ENV<NOTES>его имени помещает имя файла в окружение, которое унаследует любая дочерняя программа.Команда
shellнаследует это окружение, подставляет вместо$NOTESзначениеnotes.txtи передаёт файл вwc -l, который считает его строки. Перенаправление< "$NOTES"оставляет в выводе только число3, которое мы перехватываем через:outи обрезаем.Наконец, уборка выполняется уже средствами Raku, через
unlink, — оболочка тут не нужна. Удаление файла — обычная операция файловой системы, так что запускать ради неё ещё один процесс незачем.