Вопрос по ожидаемому Perl - PullRequest
0 голосов
/ 24 августа 2011

Я новичок в ожидаемом программировании на Perl и должен написать несколько сценариев для автоматизации некоторых задач.По сути, мне нужно подключиться к машине с Unix, выполнить некоторые команды Unix и проверить некоторые результаты.Я написал небольшой скрипт для telnet, но у меня есть сомнения относительно того, как проверить состояние команд unix.

#!/usr/bin/perl
use Expect;
$timeout=10;
my $exp = Expect->spawn("telnet test-b -l regress")
    or die "Cannot spawn telnet: $!\n";;
my $spawn_ok;

$foo1=$exp->expect($timeout, 'Password:');
print "######Received Password prompt\n";

$exp->send("MaRtInI\n");
print "######Sent password\n";

$foo1=$exp->expect($timeout, '%');
print "######Received root prompt\n";
$exp->send("cd /var/tmp");

У меня есть сомнения, как проверить, действительно ли команда cd успешна, потому что вместо cd /var/tmp, если я даю cd /var/temp12 (который не существует), я вижу то же самоерезультат.Как я могу проверить, действительно ли команда unix, которую я послал через cd, действительно успешна?

1 Ответ

1 голос
/ 24 августа 2011

Используйте echo $?, чтобы узнать статус завершения последней команды на стороне сервера , а затем обработайте его с помощью qr/^\d+/m (m означает «после начала строки или перевода строки»).

Я написал пример сценария, который порождает ожидаемую оболочку и пытается chdir к пути, указанному в качестве аргумента, например. perl myscript.pl /tmp или perl myscript.pl /noexist

#!/usr/bin/perl -w
use strict;

use Expect;

my $exp = Expect->spawn("/bin/bash")
    or die;

$exp->send ("cd ".(shift)."; echo \$?\n");
$exp->expect(2, # hardcoded timeout
    [ qr/^0/m => sub { print "chd\n" } ], # regex => sub
    [qr/^[1-9]/m => sub {print "no chd\n"}] 
);

P.S. Интересно, как я могу получить (захватывает) (из) (мое регулярное выражение) в Except. [ qr/(\d+)/, sub { ...($1) } ] у меня не сработало.

...