我知道我可以通过以下方式重播终端操作:
scriptreplay /path/to/$STARTTIME-timing.txt /path/to/$STARTTIME-log.txt
但是我如何重播例如从第 2 分钟到第 3分钟的动作?scriptreplay
只提供“加速/减速”选项吗?
答案1
有一个scriptreplay
属于公共领域的 Perl 版本,由 Joey Hess 提供:剧本重播。
您可以对其进行调整以添加开始/结束功能(作者将该实现置于公共领域)。
下面是对该代码的快速修改,它需要两个附加参数 - 开始时间(以秒为单位,默认为 0)和结束时间(可选,如果未指定,则运行到结束)。适应您的需求:
#!/usr/bin/perl -w
use strict;
$|=1;
open (TIMING, shift)
or die "cannot read timing info: $!";
open (TYPESCRIPT, shift || 'typescript')
or die "cannot read typescript: $!";
my $divisor=shift || 1;
my $start_sec=shift || 0;
my $end_sec=shift;
# Read starting timestamp line and ignore.
<TYPESCRIPT>;
my $printing = ($start_sec > 0 ? 0 : 1);
my $elapsed = 0;
my $block;
my $oldblock='';
while (<TIMING>) {
my ($delay, $blocksize)=split ' ', $_, 2;
if ($printing && ($delay / $divisor > 0.0001)) {
select(undef, undef, undef, $delay / $divisor - 0.0001);
}
read(TYPESCRIPT, $block, $blocksize) or die "read failure: $!";
print $oldblock if ($printing);
$elapsed += $delay;
exit if ((defined $end_sec) && ($elapsed > $end_sec));
$printing = ($elapsed > $start_sec);
$oldblock=$block;
}
print $oldblock;