期待脚本

时间:2012-06-14 01:52:35

标签: 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, $logged \r\n"
            }
            timeout

我尝试使用\,\和\\但没有运气。

任何人都可以帮忙,请..

我的日志文件包含以下行

exec [lp -c -demail -ot"firstname_surname@gmail.com"  /usr/local/spool/pf/context/ABC001-1209236.mime]

我需要匹配那条线。

3 个答案:

答案 0 :(得分:2)

使用{}引号,类似于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
}

答案 1 :(得分:1)

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

我的临时解决方法是,

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

答案 2 :(得分:1)

如果您准确匹配某些内容,只需将该字符串括在{大括号}中。但是,您的代码也存在另一个问题:将-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
}