Procmail

procmail中特殊情況FLAG ??覆蓋的範圍是什麼?

  • October 18, 2017

man procmailrc說:

變數的名稱 ?? 將此條件的其餘部分與此環境變數的值(不能是偽變數)匹配。一個特殊情況是,如果變數等於B、或; 這只是覆蓋了這個配方中初始標誌定義的預設標題/正文搜尋區域。H``HB``BH

在將??運算符用於提到的特殊情況時,預設標誌的“覆蓋”是否僅針對此條件或整個配方的其餘部分持續存在?

例如,如果我指定

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

是否會因為前一行的覆蓋而From針對 ody 嘗試條件,或者在覆蓋行結束後標誌是否恢復到其初始條件 ( )?B``H

覆蓋僅在定義它的條件下持續存在。這是一個稍微改變的實驗來證明:

pm-test.rc

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

測試郵件.txt

From: space-alert@storage.com
To: recipient@local.net

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

請注意,“空格”一詞僅出現在上述消息的標題中。

測試-mail2.txt

From: alert@star.fleet
To: recipient@local.net

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)。

引用自:https://unix.stackexchange.com/questions/398929