This is an example of how Expect.pm and clogin can be used together:
#! /usr/bin/perl -w
use warnings;
use diagnostics;
use strict;
use Expect qw(expect);
use Carp;
scalar @ARGV or croak "usage: $0 host1...";
my $session = Expect->spawn( 'clogin', $ARGV[0] );
if ( exists $ENV{'exp_internal'} ) { $session->exp_internal(1) }
$session->log_stdout(1);
sub expect_send {
my $pattern = shift;
my $command = shift;
my $ret = $session->expect(
30,
[ '-re', $pattern => sub { $_[0]->send("$command\n") } ],
@_,
[ timeout => sub { croak 'Timeout' } ],
[ eof => sub { croak 'EOF (clogin exited unexpectedly)' }
+],
);
croak 'Nothing matched, not even timeout, died'
if not defined $ret;
return $ret;
}
expect_send qr/#/, 'show clock';
expect_send qr/#/, 'show logging';
$session->expect(
30,
[
'-re',
qr/Log Buffer \(\d+ bytes\)/i => sub {
$session->match() =~ /\((\d+) bytes\)/i;
print "\n\n* Found logging buffer size is $1 bytes *\n\n";
if ( $1 < 8192 ) {
expect_send qr/#/, 'configure terminal';
expect_send qr/\(config\)#/i, 'logging buffered 8192';
expect_send qr/\(config\)#/i, 'end';
expect_send qr/#/, 'write memory';
}
}
],
);
expect_send qr/#/, 'exit';
$session->soft_close;
|