脚本记录中的键盘字符

时间:2015-08-18 21:42:09

标签: bash unix terminal

我正在使用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会话期间不记录这些内容?

2 个答案:

答案 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