5

我正在用 Ruby 实现一个小型 telnet 服务器。我目前面临的问题是我想添加 readline 支持,以便我可以支持制表符完成和命令行历史记录。我查看了Readline库,但似乎它只能通过标准输入工作。有没有办法在 Ruby 中做到这一点(我注意到Python的解决方案)?

4

1 回答 1

1

您可以通过将管道连接到 readline 来做到这一点。这是一个使用whileri readline 文档中的循环的示例,该循环仅将command 1, command2,发送command 3到 readline。

require 'readline'

rd, wr = IO.pipe

(1..3).each do |i|
  wr.puts "command #{i}"
end
wr.close

Readline.input = rd
while buf = Readline.readline('', true)
  p Readline::HISTORY.to_a
  print("-> ", buf, "\n")
end

输出:

["command 1"]
-> command 1
["command 1", "command 2"]
-> command 2
["command 1", "command 2", "command 3"]
-> command 3
于 2011-06-23T12:10:20.317 回答