我正在Golang中编写SSH服务器。目前我有一个可以从/向客户端读写的服务器。当客户端按下删除键时,服务器接收unicode字符13(删除)。我可以通过将除已删除的字符之外的所有字符发送到客户端来重写当前行。但是,它只会重写我发送的字符数。这意味着在输入新字符之前,不会重写最后一个字符。有没有人知道服务器需要发送什么才能从客户端删除字符。
操作系统:Ubuntu 16.04
Ssh版本:1.2.12
Bash版本:4.3
答案 0 :(得分:1)
答案是发送空格" "
。
但我怀疑你是以错误的方式解决这个问题。 SSH只是让用户访问终端的一种方式。它不是命令行处理器。这是Bash或用户选择的任何其他命令行的工作。 Bash应该能够处理这种类型的逻辑,因为它设计用于与终端通信。在go-lang中重新实施bash是一项艰巨的任务,如果这就是你想做的事情那么祝你好运!
为了避免这些问题(并为自己减少工作量),你应该使用Pseudo Terminal与bash交谈而不是管道。如果你这样做,那么我相信bash应该为你正确处理退格。
您可能还想查看“Using Pseudo Terminals to Control Interactive Programs”