Tcl 期望脚本

Tcl 期望脚本,tcl,expect,Tcl,Expect,我正在尝试匹配日志文件中包含“”的文本。但它不匹配。 我理解“对TCL/Expect有着特殊的意义 因此,我尝试了以下方法,但没有成功 expect -ex { "lp -c -demail -ot\\\"firstname_surname@gmail.com\\\" /usr/local/spool/pf" { incr logged send_user "\r\n LOGGED #4,

我正在尝试匹配日志文件中包含“”的文本。但它不匹配。 我理解“对TCL/Expect有着特殊的意义

因此,我尝试了以下方法,但没有成功

expect -ex {
            "lp -c -demail -ot\\\"firstname_surname@gmail.com\\\" /usr/local/spool/pf"
            {
               incr logged
               send_user "\r\n LOGGED #4, $logged \r\n"
            }
            timeout
我试着使用\、\和\\,但还没有成功

有人能帮忙吗

我的日志文件包含以下行:

exec [lp -c -demail -ot"firstname_surname@gmail.com" /usr/local/spool/pf/context/ABC001-1209236.mime] 执行官[lp-c-demail-ot”名字_surname@gmail.com“/usr/local/spool/pf/context/ABC001-1209236.mime]
我需要匹配这条线

我不得不使用*,不过是临时修复。 但是如果有人能告诉我如何匹配文本中的“”,那就太好了

我的临时安排是

expect {
         "lp -c -demail -ot*/usr/local/spool/printform" {     
       }
}

使用
{}
引号,类似于shell的单引号。此外,Tcl对换行符很敏感,因此必须将块的左大括号放在前一行上

expect {
    {lp -c -demail -ot"firstname_surname@gmail.com" /usr/local/spool/pf} {
       incr logged
       send_user "\r\n LOGGED #4, $logged \r\n"
     }
     timeout
}

如果要精确匹配某个内容,只需将字符串括在
{
大括号
}
中即可。但是,您的代码也有另一个问题:通过将
-ex
放在外部,您告诉
expect
将整个批次(包括您的响应代码!)作为字符串匹配。如果那是你想要的,我会大吃一惊的!将标志移到块内(这仅适用于Expect的
Expect
和相关命令),并使用您要查找的文本字符串,而不是尝试双重猜测反斜杠的数量。你应该得到这样的东西:

expect {
    -ex {exec [lp -c -demail -ot"firstname_surname@gmail.com" /usr/local/spool/pf/context/ABC001-1209236.mime]} {
        incr logged
        send_user "\r\n LOGGED #4, $logged \r\n"
    }
    timeout
}

有没有可能使用一些打印引号的愚蠢程序来生成脚本?根据我的经验,
autoexpect
可能会生成难以手写的内容。不使用autoexpect是否有可能做到这一点?请注意(对于任何阅读的人来说),带有反斜杠的描述与反斜杠的数量(1、2或3)有关。我的经验法则是,如果您正在考虑反斜杠,您已经患上了“反睫毛炎”(当然,这是一种涉及反睫毛发炎的疾病),应该考虑以一种不太容易出错的方式编写代码。这几乎总是可能的(而且几乎总是让代码更清晰)。嗨,格伦,我也尝试过使用你的建议,它对我很有效。。非常感谢,谢谢:)