我正在使用script
来记录终端会话。但是,在我录制的文本文件中,文本输入和输出与奇怪的字符交错,如下所示:
^M^[[K^[[A^[[C^ $vim session ^M
^[[?1049h^[[?1h^[=^[[1;21r^[[?12;25h^[[?12l^[[?25h^[[27m^[[m^[[H^[[2J^[[?25l^[[21;1H"session"
[noeol] 3L, 855C^
我认为这些对应于返回键和其他键盘命令。有没有办法在script
会话期间不记录这些内容?
答案 0 :(得分:1)
在给出的例子中,
^M^[[K^[[A^[[C^ $vim session ^M
^[[?1049h^[[?1h^[=^[[1;21r^[[?12;25h^[[?12l^[[?25h^[[27m^[[m^[[H^[[2J^[[?25l^[[21;1H"session"
[noeol] 3L, 855C^
你有光标移动和其他转义序列的混合。 ^[
是转义字符,^M
是回车符。如上所述,script
记录发送到终端的所有内容,而vim
等全屏程序将始终使用这些转义序列。例如,将它拆开
^[[K
清除该行,
^[[C
移动光标
^[[?1049h
将终端切换到备用屏幕,
^[[1;21r
设置滚动边距
^[[?12;25h
设置模式(12表示闪烁光标,25表示光标可见)。奇怪的是,vim接下来停止闪烁光标,用
重置视频属性^[[27m
^[[m
^[[H
将光标移到左上角
^[[J
并清除屏幕,然后再次隐藏光标
^[[21;1H"session"
[noeol] 3L, 855C
跳到屏幕左下方并打印一条消息(供参考, XTerm Control Sequences )。所以有很多事情要做,而且不是简单地从左到右,从上到下打印屏幕。
由于您使用script
,它会将输出捕获到“typescript”文件中。如果您想将这些内容过滤为可读形式,那么less
使用其-R
选项的寻呼机可以很好地工作,但它会错过任何内容。终端仿真器(具有相同的屏幕尺寸)是我知道的过滤结果的最佳方式,例如,使用将字符缓慢发送到终端的程序。如果您想要纯文本,请从重播中选择/粘贴(使用^S
和^Q
停止/恢复)可能是一种方法。
答案 1 :(得分:0)
UNIX终端有两种模式,规范和非规范(也称为' cooked'和' raw')。
script
程序的工作原理是将自身插入到终端驱动程序和shell之间的消息队列堆栈中(简化了)。
shell在与script
交谈时认为正在与终端通话。所以你看到的是shell看到的原始终端字符。
尝试strings typescript