Shell 录制并回放终端会话,将屏幕会话录制成视频肯定有用,不过对于调试终端会话或是提供shell教程来说,视频有些“杀鸡用牛刀”了。
shell
给出了另一种选择。script
命令能够录制你的击键以及击键时机,并将输入和输出结果保存在对应的文件中。scriptreplay
命令可以回放会话。
预备知识
script
和scriptreplay
命令在绝大多数GNU/Linux发行版上都可以找到。你可以通过录制终端会话来制作命令行技巧视频教程,也可以与他人分享会话记录文件,研究如何使用命令行完成某项任务。你甚至可以调用其他解释器并录制发送给该解释器的击键。但你无法记录vi、emacs或其他将字符映射到屏幕特定位置的应用程序。
实战演练
开始录制终端会话:
$ script -t 2> timing.log -a output.session
完整的录制过程如下:
$ script -t 2> timing.log -a output.session
# 演示tclsh
$ tclsh
% puts [expr 2 + 2]
4
% exit
$ exit
注意,该攻略不适用于不支持单独将
stderr
重定向到文件的shell,比如csh
shell。
可以指定一个文件名作为script
命令的参数。该文件将保存击键及命令结果。如果指定了-t
选项,script
命令会把时序数据发送到stdout
。可以将这些数据重定向到其他文件中(timing.log),这样该文件中就记录了每次击键的时机以及输出信息。上面的例子中使用2>
将stderr
重定向到了文件timing.log。
利用文件timing.log和output.session,可以按照下面的方法回放命令执行过程:
$ scriptreplay timing.log output.session
# 播放命令序列及输出
工作原理
我们通常会录制桌面环境视频来作为教程使用。但是视频需要大量的存储空间,而终端脚本文件仅仅是一个文本文件,其文件大小不过是KB级别。
你可以把timing.log
和output.session
文件分享给任何想在自己的终端上回放这段终端会话
的人。