我希望我能做出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
)。