script(1)
是用于保存交互式终端会话记录的工具;默认情况下,它会写入文件transcript
。我的问题是我使用了具有readline特性的ksh93
,因此转录本被各种终端转义序列混淆,重建实际执行的命令非常困难。更不用说流浪^M
等了。
我正在寻找一种工具,它将读取由script
编写的脚本文件,删除所有垃圾,并重建shell认为它正在执行的内容,因此我有一些显示$PS1
的内容和实际执行的命令。如果做不到这一点,我正在寻找关于如何编写这样一个工具的建议,理想情况下使用来自terminfo数据库的知识,或者使用ANSI转义序列失败。
只要它确实有效,看起来在shell历史中的作弊也是可以接受的。
答案 0 :(得分:0)
默认情况下,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” “ 这里)。请注意,提示末尾的美元符号是故意遗漏的。
在我尝试的几个例子中,这并没有解决所有问题,而是处理了大多数问题。
答案 1 :(得分:0)
这与Can I programmatically “burn in” ANSI control codes to a file using unix utils?中最近提出的问题基本相同 - 删除所有非打印字符无法修复