我可以为终端会话单独记录用户输入和程序输出吗?

我可以为终端会话单独记录用户输入和程序输出吗?

我希望我能做出script这样的工作:

❯ script --user=call.log --prog=response.log
    Script started

❯ echo foo
    foo

❯ exit
    Script done

❯ cat call.log
    echo foo

❯ cat response.log
    foo

既然没有,我正在寻找替代方案。

查看实际输出script显示如下:

^M^[[35m❯ ^[[Ke^Hecho foo#[[?1l^[>^?2004l^M^M
^[]0;tmp: echo foo^Gfoo^M

我考虑过编写一个解析器来从中提取我想要的内容 - 但这似乎很脆弱,特别是因为它似乎依赖于用户的 shell 配置。

有没有更好的方法来分别记录会话的进入和退出?

答案1

如果不了解各种应用程序的内部结构,您就无法判断终端驱动程序(代表应用程序)回显哪些字符以及给定应用程序输出哪些字符。

我用script捕获输出命令行像您的示例这样的应用程序,然后使用脚本过滤掉转义序列(例如,请参阅我可以使用 unix utils 以编程方式将 ANSI 控制代码“烧入”到文件中吗?)。

这对于编辑器等全屏应用程序来说效果不佳(因为它无法清楚地显示当光标在屏幕上移动并更新文本时会发生什么)。为此,(通常)以慢动作重播会话就足够了(例如,slowcat)。

相关内容