HISTORY(1)                 OpenBSD Reference Manual                 HISTORY(1)



NAME
       -, --, -p, --p - shell history programs

SYNOPSIS
       - [pattern...]  [substitution...]

DESCRIPTION
       This set of programs provides a crude history mechanism for the shell
       rc(1).  It is based on the v8 UNIX programs =, ==, etc.

       The program ``-'' runs the shell on the command it is requested to
       find.  The program ``--'' edits that command first.  The programs
       ``-p'' and ``--p'' are similar, except that they print the final
       command on their standard output instead of running the shell.

       The commands work by looking for a file named by the environment
       variable $history, and by searching for previous commands in this file.
       Old commands can be edited, or simply re-executed according to the
       rules below:

       A command is searched for by examining the lines in $history in reverse
       order.  Lines which contain a previous invocation of the history
       program itself are ignored.  If one or more pattern is supplied on the
       command line, then the patterns are used as a means of limiting the
       search.  Patterns match any substring of a previous command, and if
       more than one pattern is present then all patterns must be matched
       before a command is selected.

       Substitutions may also be specified on the command line.  These have
       the syntax:

            old:new

       (Note that the old pattern is used as a search-limiting pattern also.)
       Substitutions happen on the first match.

       Finally, if the program was invoked as ``--'' or ``--p'', a command may
       be edited in a crude line-mode fashion.  The line to be edited is
       printed out, and below it the user supplies modifications to the
       command.

       any character except those below
              Replaces the character above.

       space or tab
              Skips over the above character(s).

       #      Deletes one character.

       %      Replaces one character with a space.

       ^      Inserts the rest of the typed line just before the character.

       $      Deletes the rest of the line from that character on, and
              replaces it with the rest of the typed line.

       +      Appends the rest of the typed line.

       -      Backs up to a previous command satisfying the same matching
              constraints.

       end of line
              If any changes have been made, the command is printed out again
              for further editing.  If no changes have been made, the command
              is executed or printed, and the program exits.

       end of file
              If an end-of-file is read from the keyboard by the editor, it
              aborts with exit status 1 and does not produce any output.

EXAMPLES
       The history programs work best when their output is reinterpreted by
       the shell using an eval command.  This can be achieved by writing a
       shell function to perform the reinterpretation:

            fn - -- {
                 comm = `{$0^p $*}
                 if (! ~ $#comm 0) {
                      echo $comm >[1=2]
                      eval $comm
                 }
            }



                                 30 July 1991                       HISTORY(1)
