os.o.TeeReader on os.stdin打破了tty

时间:2017-10-19 12:21:26

标签: go

我正在尝试创建一个程序,它通过ssh连接到远程服务器并执行user.i给出的命令。在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

的警告

由于stdin不是终端,因此不会分配伪终端

1 个答案:

答案 0 :(得分:1)

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

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

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

检查man ssh