procmailで特別な場合は、「FLAG ??」が適用される範囲は何ですか?

procmailで特別な場合は、「FLAG ??」が適用される範囲は何ですか?

man procmailrc説明する:

変数名? ? この条件の残りの部分をこの環境変数(ダミー変数にすることはできません)の値と一致させます。特別なケースは次のとおりです。変数名Equals 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

Email.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.

「space」という単語は上記のメッセージ本文にのみ表示されます。


B実際に保証されたらいいえその条件が終了すると期限が切れpm-test.rcます。成功2番目のメッセージは、「トリーブルズ」が体内にあり、「空間」(ただ)が体内にあるためです。

% 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)を再利用します。

関連情報