Как использовать программы пейджера Unix, такие как `less` от Ruby? - PullRequest
5 голосов
/ 09 марта 2012

Предположим, у меня есть строка с именем very_long_string, содержимое которой я хочу отправить на стандартный вывод.Но так как строка очень длинная, я хочу использовать less для отображения текста на терминале.Когда я использую

`less #{very_long_string}`

, я получаю File not found сообщение об ошибке, а если я использую:

`less <<< #{very_long_string}`

, я получаю unexpected redirection сообщение об ошибке.

Итак,как использовать less изнутри Ruby?

Ответы [ 3 ]

16 голосов
/ 09 марта 2012

Вы можете открыть канал и передать свою строку в less через ее стандартный ввод.

IO.popen("less", "w") { |f| f.puts very_long_string }

(Предполагая, что Very_long_string - переменная, содержащая вашу строку.)

См .: http://www.ruby -doc.org / ядро-1.8.7 / IO.html # способ-с-POPEN

1 голос
/ 09 марта 2012

Хотя less может читать текстовые файлы, его естественным соответствием является использование его в качестве последней команды в канале. Таким образом, естественная посадка будет:

shell-command-1 | shell-command-2 | shell-command-3 | less

В командной строке:

echo tanto va la gatta al lardo che ci lascia lo zampino|less

.. Так что вы можете попробовать это в irb:

`echo tanto va la gatta al lardo che ci lascia lo zampino|less`

но я предпочитаю использовать:

your_string = "tanto va la gatta al lardo che ci lascia lo zampino"
`echo "#{your_string}"|less`

Если у вас есть время, прочитайте этот ТАК вопрос.

Для полной демонстрации использования системных вызовов в ruby ​​смотрите эту суть: https://gist.github.com/4069

0 голосов
/ 09 марта 2012

Простой взломать:

require 'tempfile'
f = Tempfile.new('less')
f.write(long_string)

system("less #{f.path}")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...