如何在 Golang SSH 客户端中移除颜色代码

3
我使用golang的ssh包搭建了一个ssh客户端,我将终端模式设置如下:
// Set up terminal modes
modes := ssh.TerminalModes{
    ssh.ECHO:          0,     // disable echoing
    ssh.TTY_OP_ISPEED: 14400, // input speed = 14.4kbaud
    ssh.TTY_OP_OSPEED: 14400, // output speed = 14.4kbaud
}

// Request pseudo terminal
if err := session.RequestPty("xterm", 80, 40, modes); err != nil {
    log.Fatalf("request for pseudo terminal failed: %s", err)
}

它的工作正常,但有一个小问题,当我使用“ls”命令时,它会返回带有颜色代码的名称,如下所示:

[root@localhost ~]# ls
ls
anaconda-ks.cfg    [0m[01;34mpeter[0m
[01;32mbuild.sh[0m           [01;34mredis64[0m

我发现读取文件名时很困难,有没有方法可以去掉名称周围的颜色代码?谢谢。


2
ls 命令不显示颜色:ls --color=never - undefined
看一下terminal.TerminalEscape字段和 vt100EscapeCodes。那可能是一个解决方案。 - undefined
3
您声称自己是一个支持彩色的 xterm 终端。也许可以选择其他终端类型? - undefined
服务器是否发送颜色代码取决于两个因素:在RequestPty中设置的终端ID以及服务器上如何解释(或不解释)它。例如,如果在服务器上有一个shell初始化脚本,无论$TERM是什么,都会设置ls输出颜色,那么更改终端ID将不会改变任何事情(哦,是的,在服务器上,$TERM是用您在RequestPty中传递的终端ID进行初始化的)。所以,除非您真的想要交互式的东西,我会选择@Volker的解决方案。 - undefined
1个回答

0
使用session.RequestPty和"vt220"终端类型。
示例: session.RequestPty("vt220", 80, 40, modes)

也许/也许不: NewTerminal 似乎并不关心传入的类型,并且在寻找 RequestPty 的使用示例时,我找不到任何有用的信息。 - undefined
你不需要使用NewTerminal来使用ssh执行命令。示例:https://play.golang.org/p/0q0Yu_8vpE - undefined
1
那对我来说没有用。有用的是展示如何将"vt220"传递到pty的另一侧并进行使用。如果缺少这个,我无法区分你的答案和其他人的答案。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接