---
name: "msh"
section: "1"
platform: "linux"
package: "nmh"
version: "1.5-release-0.2"
release: "Debian 7 (Wheezy)"
platforms: ["linux"]
url: "https://new.carta.tech/msh"
---

# msh(1)

nmh shell (and BBoard reader)

## NAME

msh - nmh shell (and BBoard reader)

## SYNOPSIS

**msh** \[**-prompt** *string*\] \[**-scan** \| **-noscan**\] \[**-topcur** \| **-notopcur**\] \[*file*\] \[**-version**\] \[**-help**\]

## DESCRIPTION

**msh** is an interactive program that implements a subset of the normal **nmh** commands operating on a single file in **packf**'d**format.** That is, **msh** is used to read a file that contains a number of messages, as opposed to the standard **nmh** style of reading a number of files, each file being a separate message in a folder. **msh**'s chief advantage is that the normal **nmh** style does not allow a file to have more than one message in it.  Hence, **msh** is ideal for reading BBoards, as these files are delivered by the transport system in this format.  In addition, **msh** can be used on other files, such as message archives which have been **pack**ed (see [**packf**(1)](/packf/1.md)). Finally, **msh** is an excellent **nmh** tutor. As the only commands available to the user are **nmh** commands, this allows **nmh** beginners to concentrate on how commands to **nmh** are formed and (more or less) what they mean.

When invoked, **msh** reads the named file, and enters a command loop. The user may type most of the normal **nmh** commands.  The syntax and semantics of these commands typed to **msh** are identical to their **nmh** counterparts.  In cases where the nature of **msh** would be inconsistent (e.g., specifying a *+folder* with some commands), **msh** will duly inform the user.  The commands that **msh** currently supports (in some slightly modified or restricted forms) are:

```
ali
burst
comp
dist
folder
forw
inc
mark
mhmail
mhn
msgchk
next
packf
pick
prev
refile
repl
rmm
scan
send
show
sortm
whatnow
whom
```

In addition, **msh** has a **help** command which gives a brief overview.  To terminate **msh**, type CTRL-D, or use the **quit** command.

If the file is writable and has been modified, then using **quit** will query the user if the file should be updated.

The **-prompt** *string* switch sets the prompting string for **msh**.

You may wish to use an alternate **nmh** profile for the commands that **msh** executes; see [**mh-profile**(5)](/mh-profile/5.md) for details about the **$MH** environment variable.

The **exit** command is identical to the **quit** command in **msh**.

**msh** supports an output redirection facility.  Commands may be followed by one of

```
^> file~^write output to file
^>> file~^append output to file
^| command~^pipe output to UNIX command
```

If *file* starts with a “ ” (tilde), then a **csh**-like expansion takes place.  Note that *command* is interpreted by **sh**. Also note that **msh** does NOT support history substitutions, variable substitutions, or alias substitutions.

When parsing commands to the left of any redirection symbol, **msh** will honor \`\\' (back-slash) as the quote next-character symbol, and \`“' (double-quote) as quote-word delimiters.  All other input tokens are separated by whitespace (spaces and tabs).

## FILES

```
^$HOME/.mh_profile~^The user profile
^/etc/nmh/mts.conf~^nmh mts configuration file
```

## PROFILE COMPONENTS

```
^Path:~^To determine the user's nmh directory
^Msg-Protect:~^To set mode when creating a new `file'
^fileproc:~^Program to file messages
^showproc:~^Program to show messages
```

## SEE ALSO

[packf(1)](/packf/1.md)

## DEFAULTS

```
`file' defaults to “./msgbox”
`-prompt (msh) '
`-noscan'
`-notopcur'
```

## CONTEXT

None

## BUGS

The argument to the **-prompt** switch must be interpreted as a single token by the shell that invokes **msh**. Therefore, one must usually place the argument to this switch inside double-quotes.

There is a strict limit of messages per file in **packf**'d format which **msh** can handle.  Usually, this limit is 1000 messages.

Please remember that **msh** is not the C-Shell, and that a lot of the nice facilities provided by the latter are not present in the former.

In particular, **msh** does not understand back-quoting, so the only effective way to use **pick** inside **msh** is to always use the **-seq** *select* switch.  Clever users of **nmh** will put the line

pick: -seq select -list

in their *.mh\_profile* file so that **pick** works equally well from both the shell and **msh**.

**sortm** always uses **-noverbose** and if **-textfield** *field* is used, **-limit** *0*.

The **msh** program inherits most (if not all) of the bugs from the **nmh** commands it implements.
