我有以下程序,telnet到另一台设备并打印序列号和Mac地址。
我的问题是,出于某种原因,如果我发送命令一旦它跳过第一个命令并发送第二个命令,但如果我复制相同的命令两次它将发送命令。
连续发送命令多个命令的正确方法是什么?
是否应在每次发送命令后刷新缓冲区?
我的环境
Eclipse Ide
Ubuntu 12.10
perl 5, version 14, subversion 2 (v5.14.2)
我的代码片段:
$telnet = Net::Telnet->new($remoteSystem);
$| = 1;
$telnet->buffer_empty();
$telnet->buffer_empty();
$result = $telnet->input_log($errorlog);
#$_ = "@lines";
@TSN =$telnet->cmd('export | grep -e SerialNumber..[A-Z] | cut -d"\"" -f2');
@TSN =$telnet->cmd('export | grep -e SerialNumber..[A-Z] | cut -d"\"" -f2');
@mac = $telnet->cmd('ifconfig | grep eth0 | cut -d" " -f 11');
print "@TSN AND @TSN @mac";
print FH "$remoteSystem\n";
print "Telnetting into $remoteSystem .\n"; # Prints names of the tcd
close(telnet);
}
foreach (@host) {
checkStatus($_);
}
OUTPUT跳过第一个命令:
bash-2.02 AND bash-2.02 ifconfig | grep eth0 | cut -d" " -f 11
00:11:D9:3C:6E:02
bash-2.02 #
bash-2.02 Telnetting into debug79-109 .
输出有效,但我必须发送两次相同的命令:
export | grep -e SerialNumber..[A-Z] | cut -d"\"" -f2
AE20001901E2FD1
bash-2.02 #
bash-2.02 AND export | grep -e SerialNumber..[A-Z] | cut -d"\"" -f2
AE20001901E2FD1
bash-2.02 #
bash-2.02 ifconfig | grep eth0 | cut -d" " -f 11
00:11:D9:3C:6E:02
bash-2.02 #
bash-2.02 Telnetting into debug79-109
答案 0 :(得分:0)
在您对cmd()的调用中指定命令提示符,例如@TSN =$telnet->cmd('export | grep -e SerialNumber..[A-Z] | cut -d"\"" -f2', Prompt => 'bash-2.02 #');
答案 1 :(得分:0)
尝试在为模块telnet创建对象后打开连接
$telnet->open($host);
之后执行waitFor方法:(等待模式 bash-2.02#来)
$telnet->waitFor(/^(bash-\d+.\d+ #)$/);
然后执行你的命令,它会给你正确的输出。