我想记录在终端窗口中进行的操作,并将日志即时转换为 html。
我已经尝试过命令 script/screen +ansi2html,但结果并不完美:行编辑的转义序列未正确处理,因此在生成的 html 中,我混合了该行的旧版本和新版本。所以如果终端的输出是这样的
$> echo Original text
Original text
$> echo Other
Other
生成的 html 是
$> echo 原文 原文 $> echo 其他文本 其他
任何想法,如何解决这个问题?
答案1
问题不在于你的 Perl 脚本(这应该是不必要的),而是ansi2html
它不完整。
日志文件显示某些内容打印了一些文本,然后
- 重复添加转义序列以清除该行的其余部分
\E[K
- 交替添加一个退格键。
在 中ansi2html
,脚本找到转义序列,然后忽略它找到的所有转义序列(除了少数几个),即
self.ansi_codes_prog = re.compile('\033\\\[' '(\[\\d;\]*)' '(\[a-zA-z\])')
在循环中摆脱重复的东西是最简单的。这是一个替代脚本,可以解决ansi2html
您的示例中出现的问题:
#!/usr/bin/perl -w
while (<>) {
my $save = "";
while ( $save ne $_ ) {
$save = $_;
s/[^\010]\010\e\[K//;
}
$save = "";
while ( $save ne $_ ) {
$save = $_;
s/[^\010]\010//;
}
s/\e\[\?[;0-9]*[\100-\176]//g;
s/\e\][^\a]*\a//g;
print;
}
并且(称之为filterit
),像这样使用它:
./filterit < 1.log | ansi2html >1.html