【问题标题】:TelnetClient output - ANSI disableTelnetClient 输出 - ANSI 禁用
【发布时间】:2016-09-17 10:55:45
【问题描述】:

我在 stackoverflow.com 上看到过类似的问题和答案

不幸的是,这对我不起作用。我的代码与之前的问题中给出的示例相同,但是“哑”终端类型(TelnetClient telnet = new TelnetClient("dumb") 是其他人的解决方案)没有过滤 ANSI 字符,所以我得到了这个:

上次登录时间:5 月 20 日星期五 10:09:21,来自 172.20.22.244

[01;33mteltest@vivadev[00m:[01;34m~[00m$ ls ls testing [01;33mteltest@vivadev[00m:[01;34m~[00m$ cd testing cd testing [01;33mteltest@vivadev] [00m:[01;34m~/testing[00m$ ls

我需要一个可读的文件。有没有其他已知的解决方案,如编码 outputStream 之类的?

谢谢。

【问题讨论】:

    标签: java terminal telnet ansi


    【解决方案1】:

    常规应用程序关注TERM,因此dumb(它使用颜色)会做你想做的事。但是,有许多硬编码的应用程序(无需评论)。

    如果您将程序的输出重定向到文件,其中一些会抑制颜色,例如

    foo >bar
    

    但许多(可能是大多数行为不端的程序)甚至忽略了这一点。要解决这些问题,您必须过滤结果,或者通过sed 脚本或类似程序,或者通过(例如)通过重定向或使用script 和然后后处理结果。例如,您可以使用类似

    的脚本来执行此操作
    #!/bin/sh
    myscript=$(mktemp)
    trap "sed -f $myscript typescript; rm -f $myscript typescript" EXIT INT QUIT HUP
    cat >$myscript <<"EOF"
    s/^[[[][<=>?]\{0,1\}[;0-9]*[@-~]//g
    xample:
    s/^[[]][^^[]*^[//g
    s/^[[]][^^[]*^[\\//g
    :loop
    s/[^^[]^[\(.\)/\1/g
    t loop
    s/  *$//g
    s/^.* //g
    s/^[[^[]//g
    /\1/g
    EOF
    script -c "$*" >/dev/null
    

    这说明了这种方法。示例中的大多数 ^[ 对都是文字 ASCII 转义字符,您将无法选择/粘贴。 sed 原始脚本在这里:script2log

    脚本的重点是正常运行命令,然后回显过滤结果。

    【讨论】:

      猜你喜欢
      • 2012-05-08
      • 2014-07-29
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      • 2019-08-28
      • 2011-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多