【问题标题】:Is there a tool to clean the output of the script(1) tool?是否有清理 script(1) 工具输出的工具?
【发布时间】:2010-10-29 03:59:02
【问题描述】:

script(1) 是一个记录交互式终端会话的工具;默认情况下,它会写入文件transcript。我的问题是我使用 ksh93,它具有 readline 功能,因此脚本被各种终端转义序列弄乱了,重建实际执行的命令可能非常困难。更别提那些流浪的^M之类的了。

我正在寻找一个工具,它可以读取script 编写的脚本文件,删除所有垃圾,并重建 shell 认为它正在执行的内容,所以我有一些显示 $PS1 和实际命令的东西执行。如果做不到这一点,我正在寻找关于如何编写这样一个工具的建议,最好是使用 terminfo 数据库中的知识,或者如果做不到,只使用 ANSI 转义序列。

查看shell历史的作弊,只要它真的有效,也是可以接受的。

【问题讨论】:

    标签: scripting text-processing terminfo


    【解决方案1】:

    默认情况下 cat/more 不能用于浏览成绩单吗?您是否打算根据实际执行的命令创建一个脚本(根据我的经验,这可能很危险)?

    无论如何,3 年没有答案,所以我会尝试一个不完整的解决方案。如果您只对实际键入的命令感兴趣,请删除不可打印的字符,然后将 PS1' 替换为可读且唯一的内容,然后使用 grep 查找该唯一字符串。像这样:

    $ sed -i 's/[^[:print:]]//g' transcript
    
    $ sed 's/]0;cartman@southpark: ~cartman@southpark:~/CARTMAN/g' transcript | grep CARTMAN
    

    解释:在第一次 sed 之后,PS1' 可以从脚本文件的前几行之一中获取,因为 -- PS1' 与 PS1 不同 -- 并且可以使用唯一的可读字符串进行修改(“CARTMAN “ 这里)。请注意,提示符末尾的美元符号是故意省略的。

    在我尝试的几个示例中,这并没有解决所有问题,但解决了大多数问题。

    【讨论】:

      【解决方案2】:

      这与最近在Can I programmatically “burn in” ANSI control codes to a file using unix utils? 中提出的问题基本相同——删除所有非打印字符将无法解决

      • 嵌入式转义序列
      • 退格/强调下划线
      • 使用回车符进行重击

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-24
        • 1970-01-01
        • 2010-10-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多