1

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

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

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

4

2 回答 2

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”) . 请注意,提示末尾的美元符号是故意省略的。

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

于 2012-06-20T22:10:50.920 回答
0

这基本上与最近在我可以使用 unix utils 以编程方式将 ANSI 控制代码“烧入”到文件中提出的问题相同吗?-- 删除所有非打印字符不会修复

  • 嵌入式转义序列
  • 退格/强调下划线
  • 使用回车符进行过度罢工
于 2015-02-25T21:51:44.783 回答