MH & nmh: Email for Users & Programmers

May, 2006

Explanation of append

The Section Add Files to Your Drafts: append gives an overview of this script. Here is the append script (you might want to open it in a separate browser window). To install it, see the Section Programs in This Book's Archive.

The command line arguments are passed from the whatnow program. The arguments start with one or more filenames that you type at the What now? prompt. The last argument is the draft message pathname, which whatnow adds to the end of the command line.

If any of the first arguments match abbreviated names that are hard-coded into the script's case statement, those arguments are replaced with full pathnames of files. For example, the abbreviation sig on the command line will be replaced by the file .signature in your home directory. In the archived version of the script, these abbreviations are commented out; to use them, remove the comment characters. Of course, you can change these abbreviations and add other abbreviation lines. The while loop uses the Bourne shell's colon (:) operator. The colon operator returns a zero exit status. So, the while : always tests true -- and the loop keeps running until the case $# sees that there's only one argument left.

The list of files to append is stored in the files variable. After the while loop ends, if the user had typed a command line like this:

    What now? e append file* $HOME/end
    
then $files would contain exactly file* $HOME/end. That's because the whatnow program doesn't expand wildcards or environment variables at its What now? prompt. To fix that, the script uses shell's eval command to reinterpret the command line -- in other words, to parse it twice.

The last line, exit 0, is important because an editor that returns nonzero status has "failed." By default, whatnow will delete a failed draft and quit. The Section Deleted Draft Messages explains more.