Qual é o escopo do caso especial 'FLAG ??' substituir em procmail?

1

man procmailrc diz:

variablename ?? Match the remainder of this condition against the value of this environment variable (which cannot be a pseudo variable). A special case is if variablename is equal to B, H, HB or BH; this merely overrides the default header/body search area defined by the initial flags on this recipe.

Ao usar o operador ?? para o caso especial mencionado, a "substituição" dos sinalizadores padrão persistirá apenas para essa condição ou para todo o resto da receita?

Por exemplo, se eu especificar

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

a condição From será julgada em relação ao B ody devido à substituição da linha precedente, ou os sinalizadores reverterão para sua condição inicial ( H ) após o término da linha de substituição?

    
por dg99 18.10.2017 / 19:47

1 resposta

2

A substituição persiste apenas para a condição em que está definida. Aqui está um experimento ligeiramente alterado para demonstrar:

pm-test.rc

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

test-mail.txt

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

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

Observe que a palavra "espaço" aparece apenas nos cabeçalhos da mensagem acima.

test-mail2.txt

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

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

Observe que a palavra "espaço" aparece apenas no corpo da mensagem acima.

Se a substituição B não expirar no final de sua condição, pm-test.rc deverá ter sucesso na segunda mensagem porque "tribbles" está no corpo e "espaço" é (apenas) no corpo.

% 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"

A receita não não é bem-sucedida.

Por outro lado, se a B override expirar no final de sua condição, pm-test.rc deverá ter sucesso na primeira mensagem porque "tribbles" está na corpo e "espaço" é (apenas) nos cabeçalhos.

% 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"

A receita é bem-sucedida .

Assim, as condições após a sobreposição de B não são afetadas pela sobreposição.  Eles voltam a usar os sinalizadores originais da receita ( H ).

    
por 18.10.2017 / 19:47

Tags