Shell脚本制作的终端会话回放功能脚本分享,录制并回放终端会话的使用

不久前在书上看到两个很有趣的命令——script和srciptreplay,它可以把终端会话记录到一个文件中,即是说我们可以通过终端会话来来制作命令行技巧视频教程,也可以与他人分享会话文件,而且生成的文件还只是一般的文本文件,文件的大小非常小,真是非常有意思。下面是本人写的两个shell程序,来方便进行这个有趣并有意义的操作。

不久前在书上看到两个很有趣的命令——script和srciptreplay,它可以把终端会话记录到一个文件中,即是说我们可以通过终端会话来来制作命令行技巧视频教程,也可以与他人分享会话文件,而且生成的文件还只是一般的文本文件,文件的大小非常小,真是非常有意思。下面是本人写的两个shell程序,来方便进行这个有趣并有意义的操作。

当你需要为别人在终端上演示某些操作或是需要准备一个命令行教程时,通常得一边手动输入命令一边演示,或者也可以录制一段屏幕演示视频,然后再回放出来。其实也有其他的实现方法。利用script和scriptreplay命令,我们可以录制命令的次序以及时序,将相关数据记录在文本文件中。利用这些文件,其他人可以在终端上回放并查看命令的输出。

一、实现代码

一、实现代码

开始录制终端会话:

文件:Record.sh

文件:Record.sh

$ script -t 2> timing.log -a output.session

type commands;

..

exit

#! /bin/bash 
# Filename:Record.sh 

read -p "Please input the sesson filename you want to creat: " filename; 

sesfile="$filename.session" 
logfile="$filename.timing.log" 

if [ -e $sesfile ];then 
  echo "$sesfile is Exsit,Creat session file fault!"; 
  read -p "If you want to reload the file? [Y/N]: " flag; 
  if [ "$flag" = "Y" ];then 
    rm $sesfile $logfile; 
    script -t 2> $logfile -a $sesfile; 
  else 
    echo "Nothing to do!"; 
  fi 

else 
  script -t 2> $logfile -a $sesfile; 
fi  

复制代码 代码如下:

注意,对于不支持单独将stderr重定向到文件的shell(比如cshshell),这则攻略是没法使用的。

文件:Replay.sh

#! /bin/bash 
# Filename:Record.sh 
 
read -p “Please input the sesson filename you want to creat: ”
filename; 
 
sesfile=”$filename.session” 
logfile=”$filename.timing.log” 
 
if [ -e $sesfile ];then 
    echo “$sesfile is Exsit,Creat session file fault!”; 
    read -p “If you want to reload the file? [Y/N]: ” flag; 
    if [ “$flag” = “Y” ];then 
        rm $sesfile $logfile; 
        script -t 2> $logfile -a $sesfile; 
    else 
        echo “Nothing to do!”; 
    fi 
     
else 
    script -t 2> $logfile -a $sesfile; 
fi  

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

#! /bin/bash 
# Filename:Replay.sh 

read -p "Please input the session filename: " filename 
logfile="$filename.timing.log" 
sesfile="$filename.session" 
if [ -e $sesfile ]; then 
  scriptreplay $logfile $sesfile 
  echo 
else 
  echo "$filename is NOT Exsit!" 
fi 

文件:Replay.sh

2>则用于将stderr重定向到timing.log。

网站地图xml地图