0

我有以下程序,它可以远程登录到另一台设备并打印序列号和 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 
4

2 回答 2

0

在调用 cmd() 时指定命令提示符,例如@TSN =$telnet->cmd('export | grep -e SerialNumber..[A-Z] | cut -d"\"" -f2', Prompt => 'bash-2.02 #');

于 2013-04-16T16:58:30.847 回答
0

为模块 telnet 创建对象后尝试打开连接

$telnet->open($host);

之后执行 waitFor 方法:(等到模式bash-2.02 #出现)

$telnet->waitFor(/^(bash-\d+.\d+ #)$/);

然后执行你的命令,它会给你正确的输出。

于 2013-04-16T17:13:37.240 回答