我希望我能做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 配置。
有没有更好的方法来分别记录会话的来龙去脉?
在不了解各种应用程序内部结构的情况下,您无法分辨终端驱动程序(代表应用程序)回显了哪些字符以及给定应用程序输出了哪些字符。
我曾经像您的示例一样
script
捕获命令行应用程序的输出,然后使用脚本过滤掉转义序列(例如,请参阅我可以使用 unix utils 以编程方式将 ANSI 控制代码“烧入”文件吗?)。这对于全屏应用程序(例如编辑器)来说效果不佳(因为它无法清楚地显示当光标在屏幕上移动、更新文本时发生的情况)。为此,它(通常)足以以慢动作重放会话(例如,
slowcat
)。