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

Expect正则表达式无法匹配部分Shell提示符,求通用匹配方案

匹配所有Shell提示符的Expect正则表达式解决方案

你的问题出在原正则仅匹配单个提示符符号,无法处理带前缀(如路径、用户名、Shell版本)的提示符,且容易误匹配输出中间的符号。结合你提供的expect -d调试输出,这里给出两种可靠的正则方案:

方案1:匹配带前缀的完整提示符行

这个正则兼容远程SSH的换行格式,能匹配所有带前缀的提示符场景:

set prompt {\r?\n.*[#>$%]\s*}
expect -re $prompt
  • \r?\n:适配Windows/Unix风格的换行(远程连接输出常带\r)
  • .*:匹配提示符前的任意前缀(如/home/user1、root、bash-4)
  • [#>$%]:覆盖常见的Shell提示符符号
  • \s*:匹配符号后可能存在的空格(多数Shell提示符符号后会带空格)

方案2:锚定输出结尾的精确匹配

如果需要避免误匹配输出中间的符号(比如内容里包含$字符的情况),可以用锚定正则确保匹配的是输出末尾的提示符:

set prompt {.*[#>$%]\s*$}
expect -re $prompt
  • $:锚定到buffer结尾,仅匹配最后出现的提示符符号

针对你调试输出的问题分析

从expect -d日志可见,修改密码成功后,系统先输出Passwd successfully changed,再出现bash-4.3$提示符,但原正则仅匹配单个符号,未能识别新行后的完整提示符,导致超时。使用上述方案后,Expect会等待到包含提示符的完整行出现,解决超时问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:40:44