如何在Ruby中使用像`less`这样的Unix寻呼机程序?

Ank*_*kit 5 ruby unix

假设我有一个字符串very_long_string,我想将其内容发送到标准输出.但由于字符串很长,我想用来less在终端上显示文本.我用的时候

`less #{very_long_string}`
Run Code Online (Sandbox Code Playgroud)

我收到File not found错误消息,如果我使用:

`less <<< #{very_long_string}`
Run Code Online (Sandbox Code Playgroud)

我收到unexpected redirection错误消息.

那么,如何less从Ruby内部使用?

use*_*434 17

你可以打开一个管道,通过它的stdin将你的字符串输入到less.

IO.popen("less", "w") { |f| f.puts very_long_string }
Run Code Online (Sandbox Code Playgroud)

(假设very_long_string是保存字符串的变量.)

请参阅:http://www.ruby-doc.org/core-1.8.7/IO.html#method-c-popen

  • 这不仅是吸引眼球。我有两个问题:1)点击“ q”以减少退出次数会产生EPIPE错误,从而导致令人讨厌的堆栈被丢弃。这很容易引起救援。2)在将所有输出发送到less之前,先按^ C。基本上,只是吃^ C。红宝石代码确实得到了一个中断,但我不知道如何正常退出,仍然很少退出并且将TTY设置回其原始设置。 (2认同)