Ruby行编辑telnet服务器

wcm*_*sen 5 ruby sockets telnet libreadline

我在Ruby中实现了一个小的telnet服务器.我目前面临的问题是我想添加readline支持,以便我可以使用tab-completion和命令行历史记录支持.我查看了Readline库,但似乎它只能通过stdin工作.有没有办法在Ruby中这样做(我注意到Python的解决方案)?

Mar*_*ter 1

您可以通过将管道插入 readline 来完成此操作。while下面是一个使用ri 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
Run Code Online (Sandbox Code Playgroud)

输出:

["command 1"]
-> command 1
["command 1", "command 2"]
-> command 2
["command 1", "command 2", "command 3"]
-> command 3
Run Code Online (Sandbox Code Playgroud)