【问题标题】:golang io.TeeReader on os.stdin breaks ttyos.stdin 上的 golang io.TeeReader 中断 tty
【发布时间】:2017-10-19 12:21:26
【问题描述】:

我正在尝试创建一个通过 ssh 连接到远程服务器并执行用户给出的命令的程序。我在 os.stdin 上使用 os.TeeReader 来记录所有用户输入,但这会破坏 tty。

var bufferRead bytes.Buffer
sshstring:=user+"@"+host
cmd := exec.Command("ssh",sshstring,"-o StrictHostKeyChecking=no")
cmd.Stdout = os.Stdout
cmd.Stdin =io.TeeReader(os.Stdin,&bufferRead)
cmd.Stderr = os.Stderr
cmd.Run()
fmt.Printf("\nHistory: %s", &bufferRead)

我在 tty 损坏时收到以下警告

不会分配伪终端,因为标准输入不是终端

【问题讨论】:

    标签: go


    【解决方案1】:

    使用-T ssh 选项。它必须禁用伪终端分配。

    # some code here
    cmd := exec.Command("ssh",sshstring,"-o StrictHostKeyChecking=no", "-T")
    # some code here
    

    -t 选项,强制伪终端分配。

    查看man ssh

    【讨论】:

    • 我尝试了“-T”和“-t”但同样的错误。“-tt”强制终端并删除错误消息,但输入会使用“-tt”选项打印两次。
    • 我认为这是与 stdin\stdout 相关的其他问题。
    猜你喜欢
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 2017-05-11
    相关资源
    最近更新 更多