3

ログ ファイルから、" " を含むテキストを照合しようとしています。しかし、それは一致しません。「 」が 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]

そして、その行を一致させる必要があります。

4

3 に答える 3

2

{}シェルの一重引用符に似た引用符を使用します。また、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
}
于 2012-06-14T10:31:36.013 に答える
1

私は*を使用しなければなりませんでしたが、一時的な修正です。しかし、テキスト内の " " を一致させる方法を誰かが教えてくれたら素晴らしいと思います.

私の一時的な修正は、

expect {
         "lp -c -demail -ot*/usr/local/spool/printform" {     
       }
}
于 2012-06-14T04:11:22.327 に答える
1

何かを正確に一致させる場合は、文字列を{中かっこで囲み}ます。ただし、コードには別の問題もありました。外側に置くことで、すべて (応答コードを含む!) を文字列として一致させる-exように指示していました。expectそれがあなたの望んだものなら、私は非常に驚くでしょう!フラグをブロック内に移動し (これは、Expectexpectおよび関連するコマンドでのみ機能します)、バックスラッシュの数を二重に推測する代わりに、探しているリテラル文字列を使用します。次のようなものを取得する必要があります。

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
}
于 2012-06-14T10:46:20.607 に答える