【问题标题】:Keyboard characters in script record脚本记录中的键盘字符
【发布时间】:2015-08-18 21:42:09
【问题描述】:

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

【问题讨论】:

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

标签: bash unix terminal


【解决方案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 next 停止闪烁光标,用

重置视频属性
^[[27m
^[[m
^[[H

在将光标移动到左上角之前

^[[J

然后清屏,然后再次隐藏光标之前

^[[21;1H"session"
[noeol] 3L, 855C

跳到屏幕的左下方并打印一条消息(供参考,XTerm Control Sequences)。所以有很多事情要做,而不是简单地从左到右和从上到下打印屏幕。

由于您使用的是script,它会将输出捕获到“打字稿”文件中。如果您想将它们过滤成可读的形式,使用 -R 选项的寻呼机(例如 less)可以很好地工作——但它会遗漏一些东西。终端模拟器(具有相同的屏幕尺寸)是我所知道的过滤结果的最佳方式,例如,使用将字符缓慢发送到终端的程序。如果您想要纯文本,从回放中选择/粘贴(使用 ^S^Q 停止/恢复)可能是一种方法。

【讨论】:

  • 很好,如果我使用 iTerm,光标移动消失了,然后 less -R 删除了其余的转义序列。谢谢!
【解决方案2】:

UNIX 终端有两种模式,规范和非规范(也称为“熟”和“生”)。

script 程序通过将自身插入终端驱动程序和外壳程序之间的消息队列堆栈来工作(这是简化的)。

当 shell 与script 交谈时,它认为它正在与终端交谈。所以你看到的就是 shell 看到的,原始的终端字符。

试试strings typescript

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多