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

run и shell

Запустить внешнюю программу можно двумя способами. Функция run принимает команду и её аргументы как отдельные значения и запускает программу напрямую, без участия оболочки:

run 'echo', 'hello';

Здесь запускается программа echo с единственным аргументом hello, которая печатает hello. Поскольку аргументы передаются по отдельности, нет риска, что оболочка неверно истолкует пробелы или специальные символы: run — безопасный выбор по умолчанию.

Функция shell, наоборот, передаёт одну строку системной оболочке, которая её разбирает. Это позволяет пользоваться возможностями оболочки — конвейерами и перенаправлением:

shell 'echo hello | tr a-z A-Z';

Здесь оболочка запускает echo, пропускает его вывод через tr и печатает HELLO. За удобство приходится платить осторожностью: раз строку разбирает оболочка, собирать команду для shell из недоверенных данных опасно. Предпочитайте run, если вам не нужны именно возможности оболочки.

Обе функции возвращают объект Proc, описывающий, как завершилась программа. По умолчанию запущенная программа делит вывод с вашей программой, поэтому напечатанное ею появляется на экране. Чтобы вместо этого перехватить вывод, его надо запросить — этому посвящена следующая тема.

Практика

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

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

Запуск внешних программ 🆕   |   Тест — Запуск программ


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