【发布时间】:2012-09-07 14:58:24
【问题描述】:
想用 expect 脚本建立一个 Auth Smtp 连接...只是为了测试我想获取 ehlo 参数,但 expect 不能这样工作
#!/usr/bin/expect
set timeout -1
set smtp [lindex $argv 0]
set port [lindex $argv 1]
spawn telnet $smtp $port
expect "[2]{2,}[0]{1,}"
send "ehlo\n"
我希望来自邮件服务器的代码 220 继续发送 ehlo ...就像
..../...:telnet smtp.mail.yahoo.de 25
Trying 77.238.184.85...
Connected to smtp2-de.mail.vip.ukl.yahoo.com.
Escape character is '^]'.
220 smtp116.mail.ukl.yahoo.com ESMTP
ehlo
250-smtp116.mail.ukl.yahoo.com
250-AUTH LOGIN PLAIN XYMCOOKIE
250-PIPELINING
250-SIZE 41697280
250 8BITMIME
错误提示:
spawn telnet smtp.mail.yahoo.de 25
invalid command name "2"
while executing
"2"
invoked from within
"expect "[2]{2,}[0]{1,}""
(file "./login.exp" line 6)
如果我只写 expect "220" 而不是 expect "[2]{2,}[0]{1,}" 它可以工作但忽略 发送“ehlo\n”
【问题讨论】:
-
如果你坚持这种方法,你应该修复它,以便只匹配一系列连续回复中的最后一个。您应该忽略任何“220-”并且只匹配“220”(2、2、0、空格)。顺便说一句,正则表达式末尾的
{1,}通常没有任何好处,但在这里,它实际上是错误的,尽管无害(不应匹配 2200 等)。
标签: regex linux shell expect ubuntu-12.04