当你需要为别人在终端上演示某些操作或是需要准备一个命令行教程时,通常你要一边手动输入命令一边演示,或者,你也可以录制一段屏幕演示视频,然后再回放出来。如果我们将输入命令后发生的一切按照先后次序记录下来,再进行回放,从而使得观众好像身临其境一般,这个想法听起来如何?命令的输出会显示在终端上,一直到回放内容播放完毕。听起来好玩吧?所有这些都可以用scriptscriptreplay命令来实现。

1. 预备知识

scriptscirptreplay命令在绝大多数GNU/Linux发行版上都可以找到。把终端会话记录到一个文件中会很有意思。你可以通过录制终端会话来制作命令行技巧视频教程,也可以与他人分享会话记录文件,共同研究如何使用这些命令行完成某项任务。

2. 实战演练

开始录制终端会话:

$ script -t 2> timing.log -a output.session
type commands;
…
..
exit

两个配置文件被当做script命令的参数。其中一个文件(timing.log)用于存储时序信息,描述每一个命令在何时运行;另一个文件(output.session)用于存储命令输出。-t选项用于将时序数据导入stderr2>则用于将stderr重定向到timing.log。

借助这两个文件:timing.log(存储时序信息)和output.session(存储命令输出信息),我们可以按照下面的方法回放命令执行过程:

$ scriptreplay timing.log output.session # 按播放命令序列输出

3. 工作原理

通常,我们会录制桌面环境视频来作为教程使用。不过要注意的是,视频需要大量的存储空间,而终端脚本文件仅仅是一个文本文件,其文件大小不过是KB级别。

你可以把timing.log和output.session文件分享给任何一个想在自己的终端上回放这段终端会话的人

script命令同样可以用于建立可以广播给多个用户的终端会话。这是件很有意思的事。来看看它是如何实现的吧。

打开两个终端,Terminal1和Terminal2。

  1. 在Terminal1中输入以下命令:

    $ mkfifo scriptfifo
    
  2. 在Terminal2中输入以下命令:

    $ cat scriptfifo
    
  3. 返回Terminal1,输入以下命令:

    $ script -f scriptfifo
    $ commands;
    

如果需要结束会话,输入exit并按回车键。你会得到如下信息:“Script done, file is scriptfifo”。

现在,Terminal1就成为了广播员,而Terminal2则成为了听众。

不管你在Terminal1中输入什么内容,它都会在Terminal2或者使用了下列命令的任何终端中实时播放:

cat scriptfifo

当需要为计算机实验室或Internet上的用户群演示教程的话,不妨考虑这个方法。它在节省带宽的同时也提供了实时体验。