首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将backspace写到stdin

将backspace写到stdin
EN

Stack Overflow用户
提问于 2022-06-23 10:09:26
回答 1查看 177关注 0票数 1

我正在编写ssh客户端来解析交换机的配置。这不是一个交互式客户端。在某些情况下,我需要删除前面键入的命令的一部分。如果我使用的是PuTTY,我会按下backspace按钮或Ctrl键盘快捷键。

如何向服务器发送Ctrl或Backspace命令?我已经尝试过发送\b和0x08,在本例中,它不像预期的那样工作。

下面的示例代码没有错误处理等..。

拨号和书写:

代码语言:javascript
复制
 c,_ := ssh.Dial( <dial ,_parameters> )
 session, _= c.NewSession()
 
 modes := ssh.TerminalModes{
        ssh.ECHO:          0,     // disable echoing
        ssh.TTY_OP_ISPEED: 38400, // input speed = 14.4kbaud
        ssh.TTY_OP_OSPEED: 38400, // output speed = 14.4kbaud
    }

session.RequestPty("xterm", 80, 40, modes); err != nil {
        return err
    }

stdin, _ = session.StdinPipe()

stdin.Write([]byte( <command> ))

阅读:

代码语言:javascript
复制
var buf = make([]byte, 1024)
for {
    n, e := c.stdout.Read(buf)
    if e != nil {
        fmt.Println(e.Error())
        break
    }

    if n != 0 {
        fmt.Print(string(buf[:n]))
    }

    ...
}

编辑:问题是在显示输出之后,命令仍然保持不变,因为我没有向stdin写入"\n“。

例如,如果我要发送“显示bla ?”我看到了这个

代码语言:javascript
复制
<some_switch>display bla ?
bla
bla-bla
...
bla-bla-bla

<some_switch>display bla

如果我想看别的东西,我需要擦去“显示蓝色”。问题是怎么做?

抱歉,我的英语。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-26 18:32:43

非打印ASCII符号必须与命令分开发送。如果没有输出,就不需要读取stdout。

代码语言:javascript
复制
//To write Ctrl-X
stdin.Write([]byte{0x18})

//Then send the command
stdin.Write([]byte(<command>))

//To write Backspace
stdin.Write([]byte{0x8})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72728419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档