Linux Shell学习:如何制作录制回放功能脚本

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

一、实现代码

文件:Record.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

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/OS/Linux/

文件:Replay.sh

#! /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

二、程序分析
首先来说说这两个文件分别是用来干什么的吧,Record.sh是用来记录你所执行的命令和屏幕的输出的,而Replay.sh是用来回放Record.sh所录制的内容的。

在Record.sh中,首先要求你输入一个用来保存信息的文件名,如output,然后在程序中创建两个文件,文件名为你所输入的文件名加上不同的后缀形成,如output.timing.log和output.session,然后检查所输入的文件是否已存在,若存在,则询问是否以新的文件覆盖旧的文件,若是,则删除原有文件,创建新的文件并写入数据,若否,则不做任何工作。Replay.sh中输入一个文件名,首先判断该文件是否存在,存在则播放。

在Record.sh中,可以看到script的参数是两个文件,为了便于辨认,我在输入的文件名加上了特定的后缀,即使在Linux上,文件后缀是没意义的,其中一个后缀的.timing.log,用于存储时序信息,描述每一个命令在何时运行,另一个文件,后缀为.session,用于存储命令输出。有了这两个文件就可以实现播放功能,这就有点像大家熟悉的Windows下的lrc歌词文件的播放功能吧,个人觉得。

而由于有两种输出,所以就要用数据流重定向,把不同的输出流输出不同的文件中,在Record.sh中我们也可以看到,我们用2>把时序信息通过stderr写入文件*.timing.log,通过>把命令执行信息写入文件*.session。

而Replay.sh则相对简单,它只需要判断输入的文件是否存在,就可以进行播放。如你想播放上面Record.sh中制作的文件,则只需要输入output即可。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索文件
, session
, 输入
, filename
, 后缀
, record
, 回放终端会话
回放功能脚本
,以便于您获取更多的相关知识。

时间: 2024-10-05 13:49:25

Linux Shell学习:如何制作录制回放功能脚本的相关文章

linux Shell学习笔记第一天_其它

以下是Shell学习1-2天学习笔记 ---------我是分隔符--------- 硬件去执行, 内核与硬件之间进行操作. 命令解析器. shell脚本的组成元素 系统命令 文本处理工具(sort.grep.sed.awk-) 变量 条件判断 环循结构 函数 Shell Scripts Center(SSC) ---------------------------- 非负Grep / awk 几天. 统计Wc Sort 排序 sort|head / sed字段处理 awk 数据区域判断 awk

Shell脚本制作的终端会话回放功能脚本分享_linux shell

不久前在书上看到两个很有趣的命令--script和srciptreplay,它可以把终端会话记录到一个文件中,即是说我们可以通过终端会话来来制作命令行技巧视频教程,也可以与他人分享会话文件,而且生成的文件还只是一般的文本文件,文件的大小非常小,真是非常有意思.下面是本人写的两个shell程序,来方便进行这个有趣并有意义的操作. 一.实现代码 文件:Record.sh 复制代码 代码如下: #! /bin/bash  # Filename:Record.sh    read -p "Please

Linux Shell学习:如何调用Shell中的函数

说起函数调用,相信大家也不会陌生,然而对于初学Shell的我来说,Shell中函数调用方式却有点让我不太习惯,自己也走了不少的弯路,因为传递参数时出了一个很"自然"的错误,也让我吃了不少的苦头,所以总结一下Shell中函数的调用方法. 一.Shell中函数的定义 为了方便程序和管理和模块化并减少代码的重复,函数的确是一个好东西.而Shell中函数的定义有两种方法,如下: function fname() { statements: } 或 fname() { statements; }

Linux Shell学习:第一个Shell程序

这里我首先会介绍一个Shell是什么,再介绍我的第一个Shell程序和从中总结的经验. 一.Shell是什么 在说我的这个Shell程序之前,还是先跟大家说说什么是Shell吧,相信Shell这个词大家一定听过很多了,但是它其实是什么东西呢?其实Shell是一个程序,我们在shell中输入一些命令,它就告诉操作系统内核我们想做什么,好让内核可以控制硬件来正确无误地工作.简单点来说就是,Shell的功能只是提供一个用户操作系统的接口,而这个shell则可以调用其他的程序来完成这些操作,只要能操作应

linux Shell学习笔记第五天_其它

第五天:函数与任务调度 函数的优势 分而治之f 协同合作 方便管理 维护简单 函数的结构     function 函数名()     {         命令1         命令2         命令3     } 函数的参数传递     向函数传递参数就像在一般脚本中使用特殊变量$1,$2,$3-$9一样,函数取得所传参数后将原始参数传回shell脚本,因此最好先在函数内重新设置变量保存所传的参数.这样如果函数有一点错误,就可以通过已经本地化的变量名迅速加以跟踪. 函数文件     当

Linux Shell学习:如何对文件中的行、单词、字符进行迭代

在进行文本文件进行处理时,对文件件中的行.单词.字符进行迭代和遍历是非常常用的操作.而将一个简单的循环用于迭代,再加上来自stdin或文件的重定向,这就是对文件中的行.单词.和字符进行迭代的基本方法. 废话不多说,马上来看看怎么样实现吧. 1.迭代文中的每一行 使用while循环从标准输入中读取,因为要在标准输入中读取,就要对文件进行重定向,使它重定向到stdin中,代码如下: while read line; do echo $line; done < file.txt 代码的第一行从stdi

linux Shell学习笔记第二天_其它

变量 获取本机主机名 #hostname 获取本系统版本号 #uname -r 获取cpu类型 获取cpu的工作频率 cat /proc/cpuinfo 获取内存使用情况 #free -m 获取硬盘使用情况 #df 变量类型及变量操作 本地变量(一般所指) 本地变量只存在用户当前shell中,当用户退出当前shell或开器一个新的shell,所设置的变量将会不存在 设置变量 #变量名=变量值 显示变量 #echo ${变量名} 假设a=1 显示则 echo ${a} 环境变量(用的非常少) 环境

linux Shell学习笔记第四天_其它

本节课的脚本也同样共享在share中了. 第四天:循环结构 内容大纲:     应用实例分析     for循环     while循环 for循环的原理 达到效果     根据昨天的菜单修改. 选择1.2.3后还会提示是否继续选择的功能.选择4仍然是退出操作. for variable in list list 变量列表池 do     command1     command2 done 实例一 forlist.sh #!/bin/bash #for with list for loop i

linux Shell学习笔记第三天_其它

第三天:条件选择 大 纲     应用实例分析     条件测试     if-else-fi     case-in-esac 实现功能菜单: 执行脚本后 按1,显示当前时间 按2,显示CPU负载 按3,显示剩余内存 按0,退出脚本 按其他字符,提示超出选择范围后退出 分析步骤.     #date +%T     uptime awk截取     free –m 条件测试格式     #test –option obj     #[ -option obj ] 返回结果 表达式内容测试结果是