# A Test Mail Setup

I hate to experiment when I have folders full of important mail. I've made another MH directory named Mail_test. It has a duplicate set of files like replcomps, some folders with useless messages, and so on.

Whenever I want to test commands, I edit my MH profile and change the `Path:` entry to read:

        Path: Mail_test

Until I change that entry back, MH commands use my Mail_test directory.

If I inc some messages that I want to keep, I just refile them into my "real" MH directory with a command like:

        % refile +$HOME/Mail/inbox

and read them after I change the `Path:` back.

Another way to change your MH setup is by defining the MH environment variable. If it's defined, MH will use it as the location of the MH profile file -- otherwise, MH defaults to .mh_profile in your home directory. You can make an MH profile with a name like tmpMHprofile in your home directory and set MH to $HOME/tmpMHprofile.

> CAUTION: Some versions of xmh ignore the MH environment variable. See the Section Conflicts Between xmh and MH Customization for a workaround.

An easy way to make test messages is by linking to one message over and over. This is easiest if you create a test folder, then change your shell's current directory to it. After that, use cp to copy in a test message from some other folder. For example, to copy message number 100 from inbox into a new test folder:

        % folder +test
        Create folder "/yourMHdir/test"? y
        % cd `mhpath +test`
        % pwd
        /yourMHdir/test
        % cp `mhpath cur +inbox` 100
        % scan 100
         100  04/01 Steven Dommer      Re: meeting minutes<<> A while b

Be sure not to link (ln) this first message to the other folder. Use cp as shown above. That's because any changes you make to a link will appear in the original message too!

Now you're ready to make your links to this test message. The easiest way is with a shell loop (the Section Sorting Messages: sortm has another example). Each shell has a different way to do this; for the C shell, see the next Example.

Example: C shell loop to make 100 test messages

        % @ num=1
        % while ($num < 100)
        ? ln 100 $num
        ? echo made link $num
        ? @ num++
        ? end
        made link 1
            ...
        made link 99
        %

The at sign (`@`) operator in the Example above is the C shell's way of doing arithmetic. The command line `@ num=1` sets `$num` to 1, and `@ num++` increments `$num` by one. The loop makes the first link, adds 1 to `num`, then tests to see if `$num` is still less than 100.

The links save filesystem space. If you want individual copies instead of links, though, use cp instead of ln.

The standard Bourne shell doesn't have built-in arithmetic. To speed things up, the Example below shows a tricky way to get numbers from the Bourne shell without addition. This set of nested loops does the same thing as the C shell loop above. They're indented for clarity.

Example: Bourne shell nested loop to make 100 test messages

        $ for t in "" 1 2 3 4 5 6 7 8 9
        > do
        >   for o in 0 1 2 3 4 5 6 7 8 9
        >   do
        >       ln 100 $t$o
        >       echo made link $t$o
        >   done
        > done
        made link 0
        made link 1
            ...
        made link 99
        $ rm 0

The loop in the Example above is a little messy, and the echo command will slow it down if your shell doesn't have echo built in. It has an outer loop that sets `$t`, the "tens" place. The inner loop sets `$o`, the "ones" place. The loops are messy because they create a link named 0 which MH won't like; you can remove it with `rm 0`.