有一些工具,如'脚本','屏幕','ttyrec',允许logging内容的会议。 通过devise这些工具logging在pty上显示的所有内容,包括控制字符。 但是,似乎没有解决scheme来删除控制字符,并显示logging的会话的转录本在用户看到。 即使重放程序似乎也不能正确处理多行命令。
我花了一些时间试图为打字稿做适当的parsing,得出结论,事实上在一般情况下是不可能的。 问题是现代terminal模拟器(终结者,xterm,rxvt)function自动换行和shell(bash,zsh)使用它。 事情对于交互式shell进程来说工作得很好,因为它能够保持与terminal的宽度同步,并根据需要调整光标位置。 不幸的是,“脚本”(也就是我所看不到的其他工具)并没有跟踪pty大小变化事件,而这些信息简直就会丢失。 结果是一个渲染打字稿的工具没有足够的信息,不能重构多行命令的外观。
我错过了什么吗? 有解决scheme吗?
我看到以下可能的解决scheme,但是它们都不容易也不完整:
在一般情况下,您需要以相同大小的terminal重放。
你可以决定完全忽略它。 正如sendmoreinfo所述,您可以声明一个不支持任何这些function的TERM。 尽pipe如此,不要期望vim或readline能以你习惯的方式行事。
您可以将它与转录本一起存储,并在重放时重新创build正确的大小( 例如 xterm -geometry [...] -e [...] ),但resize会打破一切。
如果你关心这件事,想要完美的解决scheme,你可以自己实现!
您可以通过处理SIGWINCH信号并使用ioctl(STDIN_FILENO, TIOCGWINSZ, [...])来让您的ttyrecloggingterminal大小及其更改。
你的ttyplay将不得不照顾一个terminal本身,并代表它在一个terminal。 这很棘手,但幸运的是有几个项目已经在做这个,所以你可以重用一个完善的代码库。 例如, tmux出现在脑海中。