[Mac OS X] Направляем вывод командной строки в GUI-приложение

3

pic_0

В предыдущей статье мы рассмотрели возможности команды open с ключом -a для запуска приложений с графическим интерфейсом. У этой команды есть еще один интересный ключ -f, с помощью которого open может принимать данные со стандартного ввода (standard input, он же stdin) и передавать его текстовому редактору, установленному по умолчанию.

А значит этим можно воспользоваться для получения вывода любых консольных команд, организовав конвейер (он же канал, он же pipe) с их стандартного вывода (standard output, он же stdout) в стандартный ввод (standard input), с которого команда open -f сможет его получить.

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

Для тех, кто не знаком с понятиями standard input, standard output и pipe, поясню сказанное более простым и понятным языком, а так же приведу примеры.

Стандартным вводом (standard input) в Unix-системах считается поток ввода, с которого поступают команды от пользователя, т.е. в нашем случае – ввод с клавиатуры.

Стандартным выводом (standard output) считается поток вывода данных, в который направляется то, что выводит выполняемая команда, т.е. в нашем случае – экран.

Другими словами, то, что написано в первом абзаце означает, что если выполнить команду open -f, ввести с клавиатуры любой текст, ввод которого завершить комбинацией Ctrl+D (это специальная комбинация — команда окончания ввода), то набранный текст откроется в текстовом редакторе по умолчанию – стандартно TextEdit (картинки кликабельны):

pic_1

Теперь о втором абзаце. В Unix-системах можно соединять стандартный вывод одной команды со стандартным вводом другой команды, путем организации конвейера (pipe) между ними. А значит, мы можем организовать проброс того, что выводит какая-нибудь консольная команда – в команду open, которая в свою очередь может все это передать приложению с графическим интерфейсом.

Практический пример. Команда ls -l показывает содержимое текущего каталога. Направим ее вывод в текстовый редактор:

ls -l | open -f

Вертикальная черта | и есть тот самый конвейер (pipe), который перенаправляет вывод команды ls -l на ввод команды open -f. Результат:

pic_2-1

Попробуйте выполнить команду:

man open | open -f

Она откроет страницу руководства (man) команды open в тестовом редакторе.

В этой статье я описывал, как открывать руководства (man) в приложении Просмотр. Теперь вы понимаете, как работает команда из той статьи:

man -t open | open -f -a Preview

Резюме

консольная_команда | open -f -a GUI-приложение

делает то, что написано в заголовке статьи. 🙂

Надеюсь, начинающим и этот небольшой урок по базовым понятиям Unix-систем не показался слишком сложным. 🙂

P.S.

Если все-таки что-то показалось непонятным, спрашивайте, постараюсь объяснить подробнее.

Удачи!

3 комментария

  1. 0
    Николай

    О, супер! Давно искал нечно подобное но безуспешно. Спасибо!

    • 0
      Николай

      Николай, Кстати, команда выводит результат в приложение только когда выполнение указанной команды полностью завершено, а есть ли способ выводить, например в textedit, output команды по мере ее выполнения? И заодно, как перенаправить вывод в приложение не только standard output, но и standard error?

Авторизуйтесь Чтобы оставить комментарий