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

Expect脚本中密码提示场景send命令失效问题求助

解决Expect脚本密码匹配后Send失效的问题

我来帮你搞定这个问题~你遇到的核心问题大概率是语法错误,加上可能的匹配模式小问题,导致send命令没有被正确执行。

先看你写的代码:

expect -re "Engine admin password:" send -- "$pass\r"

在Tcl(Expect基于Tcl)里,命令之间必须用换行、分号或者大括号来分隔,你把expect和send挤在同一行又没加分隔符,Tcl会把send当成expect命令的无效参数,根本不会执行发送密码的动作!

正确的写法示例

下面给你几个可行的修正版本,选一个你习惯的就行:

1. 换行分隔命令(最清晰)

# 用精确匹配代替正则,避免不必要的正则匹配问题
expect -ex "Engine admin password:"
# 发送密码,--用来防止密码以-开头时被当成命令选项
send -- "$pass\r"

2. 同一行加分号分隔

expect -ex "Engine admin password:" ; send -- "$pass\r"

3. 用大括号包裹动作(紧凑写法)

expect -ex "Engine admin password:" { send -- "$pass\r" }

额外排查点

如果修正语法后还是不行,试试这两个方向:

  • 检查提示是否有隐藏字符:有时候密码提示后面会跟着空格、制表符或者回车,你可以用正则匹配这些空白字符,确保捕获到完整提示:
    expect -re "Engine admin password:\\s*"
    send -- "$pass\r"
    
  • 等待后续提示符:发送密码后,脚本需要等待下一个可识别的提示符(比如命令行的#、$或者系统的下一步提示)才能继续执行,别忘了加这一步:
    expect -ex "Engine admin password:"
    send -- "$pass\r"
    # 假设下一步的提示符是#,根据你的实际情况修改
    expect "# "
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:22:08