procmail 中特殊情况 `FLAG ??` 覆盖的范围是什么?

procmail 中特殊情况 `FLAG ??` 覆盖的范围是什么?

man procmailrc说:

变量名 ?? 将此条件的其余部分与此环境变量(不能是伪变量)的值进行匹配。一个特殊情况是如果变量名等于B, H,HBBH;这仅覆盖由该配方上的初始标志定义的默认标题/正文搜索区域。

当使用??运算符时特例提到的,默认标志的“覆盖”是否仅针对此条件或整个配方的其余部分持续存在?

例如,如果我指定

:0 H
* ^To:.*recipient
* B ?? tribbles
* ^From:.*space

From是否会因为前一行的覆盖而对 ody 尝试该条件,或者在覆盖行结束后B标志是否恢复到其初始条件 ( )?H

答案1

覆盖仅在定义它的条件下持续存在。这是一个稍微改变的实验来演示:

pm-test.rc

:0 H
* ^To:.*recipient
* B ?? tribbles
* space
mailbox

测试邮件.txt

From: [email protected]
To: [email protected]

Your storage locker is overflowing with
tribbles.  Please clean it out.

请注意,“空格”一词仅出现在上述消息的标题中。

测试邮件2.txt

From: [email protected]
To: [email protected]

We're having some trouble with
tribbles at our space station.

请注意,“空格”一词仅出现在上述消息的正文中。


如果B覆盖确实不是在其条件结束时到期,pm-test.rc成功关于第二条消息,因为“tribbles”在正文中,而“space”(仅)在正文中。

% procmail VERBOSE=on DEFAULT=/dev/null MAILDIR=/tmp pm-test.rc < test-mail2.txt

procmail: Match on "^To:.*recipient"
procmail: Match on "tribbles"
procmail: No match on "space"
procmail: Assigning "LASTFOLDER=/dev/null"

食谱确实不是成功。

相反,如果B覆盖在其条件结束时到期,pm-test.rc成功在第一条消息上,因为“tribbles”位于正文中,而“space”(仅)位于标题中。

% procmail VERBOSE=on DEFAULT=/dev/null MAILDIR=/tmp pm-test.rc < test-mail.txt

procmail: Match on "^To:.*recipient"
procmail: Match on "tribbles"
procmail: Match on "space"
procmail: Assigning "LASTFOLDER=mailbox"

食谱确实成功

因此,B覆盖之后的条件不受所述覆盖的影响。他们重新使用配方的原始标志 ( H)。

相关内容