Hack 98 Rotate Your Signature 
End your email communications with a short
witticism.
We
all seem to know at least one geek
friend or mailing-list poster whose emails always end with a
different and humourous bit of random nonsense. You may be aware that
this is the work of her ~/.signature file, but
have you ever wondered how she manages to rotate those signatures?
While there are several utilities in the ports collection that will
randomize your signature, it is easy enough to roll your own
signature rotator using the fortune program and a
few lines of shell scripting.
9.11.1 If Your Mail Program Supports a Pipe
Your approach will vary slightly, depending on whether your
particular
mail user agent (MUA) supports
pipes. If it does, it's capable of interpreting the
contents of a file as command output, just like when you use a pipe
(|) on the command line.
I use pine,
which supports both static signature
files and signatures that come from the piped output of a signature
rotation program.
When configuring pine, choose
Setup from the main menu, then
C for the configuration editor. Find the
signature-file option and give it this value:
.signature |
The pipe character tells pine to process that
filename as a program instead of inserting its contents literally.
Also enable the
signature-at-bottom
option found in the Reply Preferences to ensure
your signature is placed at the bottom of your emails, even when
replying to an email.
Next, create a file called ~/.signature
containing these lines:
echo "Your random fortune:"
/usr/games/fortune -s
This isn't quite a shell script: I
don't have to include the
#!/bin/sh line or use chmod +x
to set the file as executable. However, pine will
execute those two lines whenever I compose or reply to an email,
adding something like this to the bottom of the email:
Your random fortune:
"Right now I'm having amnesia and deja vu at the same time."
-- Steven Wright
I also included the short switch (-s) to
fortune, as it's bad Netiquette
to end an email with a long signature.
If you try a few test messages, you'll see that
every email receives a different, random signature.
Depending upon your audience, you may wish to filter further the
fortunes to use as signatures. You'll find the
available fortunes in /usr/share/games/fortune.
If your friends are Trekkies, modify the fortune
line in your ~/.signature like so:
/usr/games/fortune -s startrek
If they tend to be cynical, try murphy instead.
9.11.2 Pipeless Signature Rotation
Some MUAs, such as Mozilla's mailer,
don't support pipes. You'll know
yours doesn't if your test message produces no
fortune. Fortunately, there's another option.
Create a file as before, but this time make it a Bourne script.
I'll save mine in ~/bin and
make it executable using chmod +x:
#!/bin/sh
echo "Your random fortune:" > $HOME/.signature
/usr/games/fortune -s >> $HOME/.signature
This script does two things. It echoes the first
line to the ~/.signature file, then appends the
results of the fortune program to the same file.
To configure
Mozilla to use this signature
file, open the Mail & Newsgroups window, and choose Mail &
Newsgroups Account Settings from the Edit menu. Select the
"Attach this signature" option from
the main menu, and use the Choose button to give the location of
~/.signature.
What do you think will happen when I compose an email? Since Mozilla
only understands literal signature files, it will faithfully
reproduce the current contents of ~/.signature.
If I haven't run my script yet, that file
doesn't exist. If I have run the script, the
resulting file remains the same until the script runs again.
This is different from pine, which has the
capability of executing the commands found in my signature file.
Since Mozilla can't, you'll have to
remember to run the script manually before you compose an email or
schedule its periodic execution using cron. This
may be a little disappointing if you want every recipient to receive
a unique signature, or not a big deal if you send only one or two
emails a day and aren't a stickler for randomness.
9.11.3 Hacking the Hack
Hmm, what would happen if .signature were a
named pipe connected to a program that provided a random signature on
every read? There are many possibilities
here.
9.11.4 See Also
|