procmail에서 특별한 경우 `FLAG ??`가 적용되는 범위는 무엇입니까?

procmail에서 특별한 경우 `FLAG ??`가 적용되는 범위는 무엇입니까?

man procmailrc설명하다:

변수 이름? ? 이 조건의 나머지 부분을 이 환경 변수(더미 변수일 수 없음)의 값과 일치시킵니다. 특별한 경우는 다음과 같습니다.변수 이름Equals B, H, HB또는 BH; 이는 이 레시피의 초기 플래그에 의해 정의된 기본 제목/본문 검색 영역만 재정의합니다.

??연산자를 사용하는 경우특별한 경우언급한 대로 기본 플래그의 "재정의"는 이 조건에 대해서만 지속됩니까, 아니면 전체 레시피의 나머지 부분에 대해서만 지속됩니까?

예를 들어, 내가 지정한다면

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

"space"라는 단어는 위 메시지 본문에만 나타납니다.


B실제로 보장이 된다면아니요해당 조건이 끝나면 만료되며 다음과 pm-test.rc같습니다.성공두 번째 메시지는 "트리블스"가 몸 안에 있고 "공간"(오직)이 몸 안에 있기 때문입니다.

% 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)를 재사용합니다.

관련 정보