我是期待perl编程的新手,必须编写一些脚本来自动执行某些任务。基本上我需要telnet到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
。如何检查我通过cd发送的unix命令是否实际成功?
答案 0 :(得分:1)
使用echo $?
查找服务器端的最后一个命令退出状态 ,然后通过qr/^\d+/m
处理它(m表示“从字符串或换行符开始” )。
我编写了一个示例脚本,它确实生成了一个期望的shell并尝试将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) } ]
对我不起作用。