What Good is a File With 1000 Links?

You can take linking to extremes in a useful way by the following short shell script named README. It's also named 1, 2, 3... and 999. In fact, it has 1000 links (though it could have more or fewer):

    #! /bin/sh
    # This shell script has lots of hard links, and all of them are
    # to this file.  When you run this program, it shows the MH
    # mail message with its name.  For instance, if you type:
    #   % 5
    # this program will execute the command 'show 5'.
    /usr/local/mh/show `basename $0` $*
I put that short file in a directory named shows. My friends and I put the shows directory in our shell search paths (the Section Setup Before You Make First New Version explains how). Then I made the README file executable and made 999 hard links to it with the C shell loop below. The @ is the C shell's arithmetic operator:
    % chmod +x README
    % @ num=1
    % while ($num < 1000)
    ? ln README $num
    ? echo made link $num
    ? @ num++
    ? end
    made link 1
    made link 999
This lets me read an MH message just by typing the message number. In fact, the $* in the script lets me give arguments to the show command. The following line will show messages 3, 12, and 22:
    % 3 12 22
(That executes show 3 12 22.) Folders like +inbox work, too.

Actually, to make this more efficient, I used the shell's exec command:

    exec /usr/local/mh/show `basename $0` $*
The exec saves a process (this is described with the resend.fixmsg script).

Check with your system administrator before you do this; it is unusual to have thousands of links. Some filesystem-handling programs might not be robust enough to cope.