Net :: SSH :: Expect +转义双引号时JunOS不会返回输出

问题描述

编辑1:删除了以下句子:“首先,“必须逃脱\"之类的,但是”,这是我的错误

编辑2:添加了$ cmd内容

编辑3:添加了可理解的代码示例

使用Perl的Net :: SSH :: Expect模块与Juniper网络设备(JunOS)通信时遇到问题。

对于某些命令,在JunOS中特别需要使用双引号。当我手动连接到设备时,将出现一个虚拟命令,例如:show something |。匹配“ this | that”可以正常工作。

通过Net :: SSH :: Expect模块使用此命令时,该命令根本不会返回输出

这是打开会话的方式

$session = Net::SSH::Expect->new(
                                host => $device->{ip},port => $port // 22,ssh_option => $options // '',user => $username,password => $password,raw_pty => 1,timeout => $session_timeout)

,并且使用“ $ session-> send($ cmd);”发送命令。 ,然后使用before()函数进行检索。

$session->send($cmd);
                
unless($session->waitfor($device->{promptSSH},$cmd_timeout)) {
    $logger->warn("$device->{hostname} ($device->{ip}) : SSH - Echec (Timeout) de la commande $cmd");
    $data->{'timeout'} = 1; # status flag
} 
@{$data->{'output'}} = $session->before();
return $data;

$ cmd将包含以下示例: 显示界面诊断光学|匹配“激光输出功率|激光接收器功率”

Output when we escape the double quotes

如果我不对双引号进行转义,我们会得到奇怪的输出结果

Output if we don't escape the double quotes

请注意,命令是从系统中的简单文本文件中读取的,以下是摘录

Extract of the file where the commands are read from

我一无所知,有人可以帮我吗?

欢呼

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...