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

时间:2012-03-09 15:13:44

标签: ruby unix

假设我有一个名为very_long_string的字符串,其内容我想发送到标准输出。但由于字符串很长,我想使用less来显示终端上的文本。当我使用

`less #{very_long_string}`

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

`less <<< #{very_long_string}`

我收到unexpected redirection错误消息。

那么,如何在Ruby内部使用less

3 个答案:

答案 0 :(得分:16)

你可以打开一个管道并通过它的标准输入将你的字符串送到更少的地方。

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

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

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

答案 1 :(得分:1)

尽管less可以读取文本文件,但它自然适合将它用作管道中的最后一个命令。所以自然适合:

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

在你的shell提示符下:

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`

如果您有时间阅读this那么问题。

有关在ruby中使用系统调用的详细演示,请参阅以下要点: https://gist.github.com/4069

答案 2 :(得分:0)

一个简单的黑客:

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

system("less #{f.path}")