procmail screwup -- mea culpa

Chuck Hallenbeck chuckh at mhonline.net
Mon Dec 23 06:41:30 EST 2002


I answered Bill's request for a procmail recipe a few days ago
and posted some incorrect information. Damn! I was sure it was
right! I have been using procmail recipes of a very simple sort
for a while and have recently been trying to fancify and simplify
them. Basically I have been using the plain vanilla three liners
like this:

line 1. :0: or :0 c
line 2. * pattern, or * !pattern
line 3. | command, or destination (without the '|')

Often what I have been doing is to detect a pattern and then play
a particular sound file and route the message to a particular
folder. That has been taking me six statements using the above
methods, because only one action per recipe is permitted. It has
worked like this:

line 1. :0 c
line 2. * pattern
line 3. | play the sound
line 4. :0:
line 5. * the same pattern
line 6. foldername

The difference between line 1 and line 4 is that line 1 makes a
carbon copy of the message in case the pattern succeeds, so it
remains available for subsequent recipes, while line 4 does not,
in effect swallowing the message if the pattern succeeds.

This has been working fine, but it is not too neat because the
same pattern has to be matched twice: once to play the sound and
a second time to route the message. What I posted a few days ago
was intended to do the same thing without repeating the pattern
match and it was incorrect. What I should have posted required 8
lines like this:

line 1. :0:
line 2. * pattern
line 3. {
line 4. :0 c
line 5. | play the sound
line 6. :0:
line 7. foldername
line 8. }

Meanwhile there is even a simpler way to do this. (and this time
I know for sure it works) and now we are down to five lines but
with a single pattern match.

line 1. :0 c
line 2. * pattern
line 3. | play the sound
line 4. :0 A
line 5. foldername

The trick here is the ":0 A" on line 4, which says in effect
"only do this recipe if the last recipe produced a match", and so
no further pattern matching is necessary in this second recipe.
It is just ignored if the first recipe failed, and swallows the
message if it had succeeded.

Sorry Bill, but fill in the blanks on this one and you will have
a winner.

Chuck




-- 
The Moon is Waning Gibbous (86% of Full)
So visit me sometime at http://www.mhonline.net/~chuckh





More information about the Speakup mailing list