假设我有一个名为very_long_string
的字符串,其内容我想发送到标准输出。但由于字符串很长,我想使用less
来显示终端上的文本。当我使用
`less #{very_long_string}`
我收到File not found
错误消息,如果我使用:
`less <<< #{very_long_string}`
我收到unexpected redirection
错误消息。
那么,如何在Ruby内部使用less
?
答案 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}")