my $telnet = new Net::Telnet (Timeout => 5, errmode => 'return', Telnetmode => 0);
$telnet->open($ip);
$telnet->waitfor('/Login:.*$/');
$telnet->print($username);
$telnet->waitfor('/Password:.*$/');
$telnet->print($password);
$telnet->waitfor(-match => '/>.*$/');
print DIAG "\n=co sh========================================================================\n";
$telnet->print('co sh');
config:
while (my $line = $telnet->getline(Timeout => 10)) {
$line =~ s/-- more --//g;
if ($line =~ m/>.*$/) {
last config;
} else {
unless ($line =~ m/\[/g) {
print DIAG $line;
}
$telnet->print(' ');
}
}
print DIAG "\n=sys log show=================================================================\n";
print $telnet->waitfor(-match => '/>.*$/');
$telnet->print('sys log show');
syslog:
while (my $line = $telnet->getline(Timeout => 10)) {
$line =~ s/-- more --//g;
if ($line =~ m/>.*$/) {
last syslog;
} else {
unless ($line =~ m/\[/g) {
print DIAG $line;
}
$telnet->print(' ');
}
}
我$telnet->print(' ');
跳过你得到的-- more --
提示。
我得到第一个命令的输出正常,但在第二个====
行之后没有任何内容,除了提示符,已成功到达$telnet->waitfor(-match => '/>.*$/');
,显然。
如果我完全注释掉config
循环(第一个),它会成功写入第二个systlog
循环的输出,为什么?是什么让终端忽略我的第二个命令是发送它$telnet->print('sys log show');
?它实际上与登录后的结构相同。