我正在努力通过telnet / expect执行命令。
set send_slow {500 .5}
send -s -- "show slot *\r"
expect {
".*>" {
send -s -- "y\r"
exp_continue
}
".*#\s"
}
send -s "who\r"
expect "# "
send -s "alm\r"
expect "# "
send -s -- "logout\r"
show slot
命令在插槽中打印卡片。由于寻呼用户被要求继续。执行后显示提示符NODE2-1#
,我想执行命令who
。
我得到的是:
2/36 PF Empty Up Down UEQ
2/37 FAN FAN Up Up
2/38 Empty Empty Down Down UAS UEQ
2/39 Empty Empty Down Down UAS UEQ
25/1 SFD40 SFD40 Up Up
Node2-1#<br> Node2-1# who
Session Username Date Terminal
-------------------------------------------------------------------------------
116 (cli tel) * admin May 29 06:57 XX.X.XX.XX
Node2-1# almlogout
Alarm Status: Critical-3 Major-0 Minor-0
如您所见,第一个提示留空,第二个提示有一个命令。执行它需要几秒钟。
此外,下面可以看到,在提示符中有粘贴命令almlogout
。这两个是单独的命令 - &gt; alm
和logout
。但是,它们被粘贴在一起。
问题是 - 如何在没有延迟的情况下在提示中执行命令,第二个 - 如何分离两个命令
答案 0 :(得分:2)
默认情况下,expect
语句的模式为glob样式,因此".*>"
应为-re ".*>"
,".*#\s"
应为-re ".*#\\s"
或{{ 1}}(-re {.*#\s}
实际上是"\s"
)。
由于"s"
无法匹配,因此.*
与-re {.*>}
相同,-re {>}
与-re {.*#\s}
相同。