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