Como usar o scriptreplay?

3

Eu sei que posso reproduzir ações do terminal com:

scriptreplay /path/to/$STARTTIME-timing.txt /path/to/$STARTTIME-log.txt

Mas como posso reproduzir as ações de, por exemplo, o 2 nd ao minuto 3 rd ? O scriptreplay oferece apenas uma opção "acelerar / desacelerar"?

    
por LanceBaynes 21.12.2011 / 05:05

1 resposta

4

Há uma versão em perl de scriptreplay que está em domínio público, fornecida por Joey Hess: scriptreplay .

Você pode adaptar isso para adicionar recursos de início / fim (o autor colocou essa implementação no domínio público).

Aqui está uma modificação rápida e suja desse código que leva dois parâmetros adicionais - o horário de início (em segundos desde o início, o padrão 0) e o horário de término (opcional, é executado até o final, se não especificado). Adapte-se às suas necessidades:

#!/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;
    
por 04.01.2012 / 13:31