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删除了其余的转义序列。谢谢!