You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用expect命令时添加花括号为何会出现超时问题?

问题原因及解决方案

你的脚本超时问题核心出在正则表达式的严格锚定与多分支expect的匹配逻辑差异上,具体分析和解决方法如下:

核心原因

单模式expect -re "^Password:$"会持续等待缓冲区中出现完全匹配的行,且会自动忽略缓冲区中之前的无关输出(比如SSH登录的banner信息);但多分支expect会在每次有新输入时检查所有模式,若你的Cisco交换机实际输出的Password:提示行并非严格以Password:开头并结尾(比如行首有不可见的回车/空格、或者带有ANSI格式转义字符),严格的^(行首锚定)和$(行尾锚定)就会匹配失败,最终触发超时分支。

另外注意检查第二个脚本的shebang行是否正确,必须是#!/usr/bin/expect,少了#会导致脚本无法被正确的解释器执行。

修复方案

方案1:简化正则表达式(推荐)

去掉严格锚定符,直接匹配Password:字符串即可——在SSH登录场景中,这个提示是唯一的,无需严格锚定:

#!/usr/bin/expect
set timeout 60
spawn ssh admin@[lindex $argv 0]

expect { 
        -re "Password:" {send -- "admin\r"}
        timeout           {puts "took too much time"; exit}
        eof               {puts "finished in time"}
}
interact

方案2:兼容行首/行尾的空白字符

如果需要保留锚定逻辑,可调整正则允许行首/行尾存在空白字符(包括空格、制表符、回车):

#!/usr/bin/expect
set timeout 60
spawn ssh admin@[lindex $argv 0]

expect { 
        -re "^\\s*Password:\\s*$" {send -- "admin\r"}
        timeout           {puts "took too much time"; exit}
        eof               {puts "finished in time"}
}
interact

内容的提问来源于stack exchange,提问作者abinjacob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.05 05:13:11