Bash 脚本记录中的键盘字符

Bash 脚本记录中的键盘字符,bash,unix,terminal,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^ 我认为这些对应于返回键和其他键盘命令。在脚本会话期间,有没有办法不记录这些内容?UNIX终端有两种模式

我正在使用
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^

我认为这些对应于返回键和其他键盘命令。在
脚本
会话期间,有没有办法不记录这些内容?

UNIX终端有两种模式,规范模式和非规范模式(也称为“煮熟”和“未加工”)

脚本
程序通过将自身插入终端驱动程序和shell之间的消息队列堆栈来工作(简化了)

shell在与
脚本
通话时,认为它正在与终端通话。因此,您看到的是shell所看到的,原始终端字符

在给定的示例中,请尝试使用
strings-typescript

^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
是回车符。如前所述,
脚本
记录发送到终端的所有内容,诸如
vim
等全屏程序将始终使用这些转义序列。例如,将其分开

^[[K
清除线路

^[[C
移动光标

^[[?1049h
将终端切换到备用屏幕

^[[1;21r
设置滚动边距

^[[?12;25h
设置模式(12用于闪烁光标,25用于确保光标可见)。奇怪的是,vim下一步停止闪烁光标,用

^[[27m
^[[m
^[[H
将光标移动到左上角之前

^[[J
并清除屏幕,然后再次隐藏光标

^[[21;1H"session"
[noeol] 3L, 855C
跳转到屏幕的左下角并打印一条消息(供参考),所以有很多事情要做,而不仅仅是从左到右、从上到下打印屏幕


由于您使用的是
script
,因此它会将输出捕获到一个“typescript”文件中。如果您想将这些文件过滤成可读的形式,则使用
-R
选项的
less
等寻呼机可以正常工作,但会遗漏一些内容。终端仿真器(屏幕大小相同)是我所知道的过滤结果的最佳方法,例如,使用一个将字符缓慢发送到终端的程序。如果需要纯文本,请从重播中选择/粘贴(使用
^S
^Q
停止/恢复)这可能是一种方法。

不,没有办法不记录它们。你可以使用
col-b filename
显示过滤掉的脚本。这不是计算机编程问题,而是关于使用计算机。它属于superuser.com或unix.stackexchange.com。这些不是键盘命令,而是用于在屏幕上移动光标。好的,我明白了。我试过做
cat session | col-b
,但输出仍然包含这些转义序列。太好了,如果我使用iTerm,光标移动消失了,然后less-R删除了其余的转义序列。谢谢!