期待'发送'不按预期工作

时间:2013-10-14 19:20:51

标签: send expect

我是一个期待的初学者......我写了一个小脚本,必须登录到路由器并执行一些命令.. 但不知何故,我发现即使我使用发送“管理秀平台”THRICE,它只对我工作两次..我只得到admin show platform两次的输出。

任何人都可以检查代码并指出我实际上在搞砸代码的地方..

Gsaxena# 
Gsaxena# 
Gsaxena# ./testTool  
spawn /usr/bin/ksh  
telnet 5.28.7.103  
$ telnet 5.28.7.103  
Trying 5.28.7.103...   
Connected to 5.28.7.103.  
Escape character is '^]'.  


User Access Verification   

Username:   
Username: lab  
Password:   


RP/0/RP0/CPU0:Billorani#debug ospf ospf1 adj  
Mon Oct 14 17:16:06.144 UTC  
**RP/0/RP0/CPU0:Billorani#show platform**  
Mon Oct 14 17:16:06.416 UTC  
Node          Type              PLIM               State           Config State  
------------- ----------------- ------------------ --------------- ---------------  
x/x/x0      xxxxG          N/A                IN-RESET        PWR,NSHUT,MON  

**RP/0/RP0/CPU0:Billorani#show platform**  
Mon Oct 14 17:16:06.416 UTC  
Node          Type              PLIM               State           Config State  
------------- ----------------- ------------------ --------------- ---------------  
x/x/xxx0      xxxxG          N/A                IN-RESET        PWR,NSHUT,MON  
RP/0/RP0/CPU0:Billorani#  

Gsaxena#   
Gsaxena#   
Gsaxena#   
Gsaxena#   
Gsaxena#   


#!/usr/bin/expect
    set timeout 30
    set hostcut "Bil"
        sleep 5
        set timeout 5

        spawn /usr/bin/ksh
        send "telnet 5.8.7.103\r"
        expect ".*\'\^\]\'\. *"
        send "\r"
        expect "Username\:"
        send "lab\n"
        expect "Password\: "
        send "lab\n"
        sleep 10

        expect -re "RP\/.\/.*\/CPU.:$hostcut.*#"
        send "debug ospf ospf1 adj\n"

        expect -re "RP\/.\/.*\/CPU.:$hostcut.*#"
        send "admin show platform\n"

        expect -re "RP\/.\/.*\/CPU.:$hostcut.*#"
        send "admin show platform\n"

        expect -re "RP\/.\/.*\/CPU.:$hostcut.*#"
        send "admin show platform\n"

2 个答案:

答案 0 :(得分:1)

我真的应该把它放在一个实际的答案中,而不是在评论中,因为我没有给你一个最后的答案,但似乎评论只能由已经存在一段时间的人留下(有一个在你离开之前的最低声誉。)

无论如何,我想建议你在脚本开头附近的地方添加exp_internal 1。这将提供大量有用的调试信息,并且很可能指向正在发生的事情。如果您需要帮助,请随时在此处发布。

我不知道你发布的信息有什么问题......似乎没有任何错误。我会采取不同的做法,而不是产生一个Korn shell进程,然后发送一个telnet命令,我只是直接产生telnet命令(代码少,资源少)。但这并不是困扰你的事情,所以不用担心。

我不熟悉您登录的操作系统...是Cisco IOS XR吗?我发现admin show platform命令,而你的标准输出只显示show platform,这令我感到困惑吗?另外,一些提示显示双星号(**)的处理是什么,而其他提示没有?

最后一件事,看似愚蠢,但是......你可以手动访问设备并按照确切的顺序发出这4个确切的命令吗?

此致 詹姆斯

答案 1 :(得分:0)

在您的代码中

send "admin show platform\n"

使用" \ r"而不是" \ n"