Command history lets you repeat a previous command, access data about a previous command, or display a list of previous commands.

You reference a previous command by starting a command with an exclamation point, and either the first letters of the command, a star and string from anywhere in the command, the number of the history entry, or blank for the last command:

mpsh$ !command
mpsh$ !*arg
mpsh$ !n
mpsh$ !

You can retrieve history information by adding a dot and field name to a history reference. This displays the field you requested, rather than repeating the command. The available fields are:

num - The history entry number.
text - The text of the command.
parsed - The fully parsed text.
dir - The directory it executed in.

Instead of executing a previous command, mpsh will simply display the requested data about the previous command. For example:

Go to the directory that you last used vi in:

mpsh$ cd (!vi.dir)

Look at the detailed history entry for the last invocation of gcc:

mpsh$ history (!gcc.num)

Subsitute "http" for "https" in the last "wget" command, and then execute it:

mpsh$ (!wget.text | sed s/https/http/)

Check to see that your last command expanded the way you expected:

mpsh$ !.parsed

The history command displays previous commands. You can display the short form, long form, user-specified format, or full details for one entry. ("history" with no arguments is short for "history -s".)

mpsh$ history [n]
mpsh$ history -s [n]
mpsh$ history -l [n]
mpsh$ history format-string [n]

The fields displayed by the history command are controlled by format strings, one letter for each field. The simple "history" display is controlled by the mpsh-hist-disp environment variable (default: nc, for: number, command text), and the long format is controlled by the mpsh-hist-disp-l environment variable (default: nusxc, for: number, user cpu time, system cpu time, exit condition, command text). You can also specify a new format as the argument to history. The fields available via the format strings are:

c - Command
C - Command, limited to 20 characters
n - Number
u - CPU user time
s - CPU system time
e - Elapsed time
t - Time started
x - Exit status
d - Directory
D - Directory, limited to 20 characters

For example:

To display the commands executed in a particular directory (something including "local" in this example), invoke history with a format string of "dc" to display just directories and commands, and send the output to grep:

mpsh$ history dc | grep local

Display the commands that didn't exit ok:

mpsh$ history xnc | grep -v ^ok

Add start time and exit status to the default history display:

mpsh$ setenv mpsh-hist-disp=ntxc

The width of the fields displayed changes depending on the data, so don't try to filter the output of history based on strict character position.

Clear history with the -c option:

mpsh$ history -c

("history -c" will not delete any entries for commands that have not yet exited. Stopped jobs and still running jobs will remain.)