[prev in list] [next in list] [prev in thread] [next in thread]
List: procmail
Subject: RE: mkdir
From: "Dallman Ross" <dman () nomotek ! com>
Date: 2000-05-14 1:05:53
[Download RAW message or body]
Aaron Schrab <aaron@schrab.com> wrote:
> At 14:17 +1200 27 Apr 2000, Volker Kuhlmann
> <kuhlmav@elec.canterbury.ac.nz> wrote:
> > > > # Most efficient way to test & mkdir
> > > > :0 ihc
> > > > * ! ? test -d $DIR
> > > > |mkdir -p $DIR
> >
> > > :0 wic # if needed, create today's ackdir; add sender
> > > * $ ! TESTNAME ?? ^^$ACKS/fullacks/
> > > | test -d $ACKS/$DATE || mkdir $ACKS/$DATE ;\
> >
> > I'd say the efficiency is the same. Both versions run the external
> > program test, and mkdir if the test fails.
>
> Not true. The second way runs a shell which then runs the commands.
> The first way runs the commands directly, so there's one less process
> used.
While I agree with you, Aaron, after looking it over, I gave up
on trying to change mine anyway. The reason is that mine is checking
an extra condition, and I don't see an easy way to get all that in
a recipe of the first (Philip's man page) format.
I tried, tentatively,
:0 whic # if needed, create today's ackdir; add sender
* $ ! TESTNAME ?? ^^$ACKS/fullacks/
* ! ? test -d $ACKS/$DATE
| mkdir -p $ACKS/$DATE;\
lockfile -r0 $ACKS/$DATE/"$FROM"
# We use lockfile in a nonstandard way[1], relying on the
# lagniappe of how it handles exit codes to avoid a possible
# race condition. -r0 says don't retry. (Mainly only
# another cascaded invocation of procmail would have
# yielded a failure, anyway. :-)
# [1] I.e., we're not using it as a semaphore but to
# create a durable file.
However, it was immediately clear to me that the lockfile trick to
create a file would not be initiated under this algorithm if there
had been no dir to begin with. Under my original algorithm, it
all works.
I see that I could divide it up into two recipes, maybe with
:0 A
| lockfile -r0 $ACKS/$DATE/"$FROM"
as the second one. But now we have two recipes to do what one
short one did before. I don't know if it's worth saving one
shell invocation. I am interested in efficiency and elegance,
both. Here we seem to have a conflicting balance between the
two. Comments?
I also have a question. I thought I needed "$" near the left
in condition lines when I am relying on a variable of mine in
the condition line. How come we don't need the "$" in the test -d
line above? This confuses me.
--
Dallman Ross <dman@nomotek.com>
U.S. Voicemail/FAX: +1 (415) 680-2388
Residence Telephone: +49 (0) 6122 / 98 04 46
Cellular Telephone: +49 (0) 177 / 515 34 69
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic