| @ignore |
| This file documents the user interface to the GNU History library. |
| |
| Copyright (C) 1988--2011 Free Software Foundation, Inc. |
| Authored by Brian Fox and Chet Ramey. |
| |
| Permission is granted to make and distribute verbatim copies of this manual |
| provided the copyright notice and this permission notice are preserved on |
| all copies. |
| |
| Permission is granted to process this file through Tex and print the |
| results, provided the printed document carries copying permission notice |
| identical to this one except for the removal of this paragraph (this |
| paragraph not being relevant to the printed manual). |
| |
| Permission is granted to copy and distribute modified versions of this |
| manual under the conditions for verbatim copying, provided also that the |
| GNU Copyright statement is available to the distributee, and provided that |
| the entire resulting derived work is distributed under the terms of a |
| permission notice identical to this one. |
| |
| Permission is granted to copy and distribute translations of this manual |
| into another language, under the above conditions for modified versions. |
| @end ignore |
| |
| @node Using History Interactively |
| @chapter Using History Interactively |
| |
| @ifclear BashFeatures |
| @defcodeindex bt |
| @end ifclear |
| |
| @ifset BashFeatures |
| This chapter describes how to use the @sc{gnu} History Library |
| interactively, from a user's standpoint. |
| It should be considered a user's guide. |
| For information on using the @sc{gnu} History Library in other programs, |
| see the @sc{gnu} Readline Library Manual. |
| @end ifset |
| @ifclear BashFeatures |
| This chapter describes how to use the @sc{gnu} History Library interactively, |
| from a user's standpoint. It should be considered a user's guide. For |
| information on using the @sc{gnu} History Library in your own programs, |
| @pxref{Programming with GNU History}. |
| @end ifclear |
| |
| @ifset BashFeatures |
| @menu |
| * Bash History Facilities:: How Bash lets you manipulate your command |
| history. |
| * Bash History Builtins:: The Bash builtin commands that manipulate |
| the command history. |
| * History Interaction:: What it feels like using History as a user. |
| @end menu |
| @end ifset |
| @ifclear BashFeatures |
| @menu |
| * History Interaction:: What it feels like using History as a user. |
| @end menu |
| @end ifclear |
| |
| @ifset BashFeatures |
| @node Bash History Facilities |
| @section Bash History Facilities |
| @cindex command history |
| @cindex history list |
| |
| When the @option{-o history} option to the @code{set} builtin |
| is enabled (@pxref{The Set Builtin}), |
| the shell provides access to the @dfn{command history}, |
| the list of commands previously typed. |
| The value of the @env{HISTSIZE} shell variable is used as the |
| number of commands to save in a history list. |
| The text of the last @env{$HISTSIZE} |
| commands (default 500) is saved. |
| The shell stores each command in the history list prior to |
| parameter and variable expansion |
| but after history expansion is performed, subject to the |
| values of the shell variables |
| @env{HISTIGNORE} and @env{HISTCONTROL}. |
| |
| When the shell starts up, the history is initialized from the |
| file named by the @env{HISTFILE} variable (default @file{~/.bash_history}). |
| The file named by the value of @env{HISTFILE} is truncated, if |
| necessary, to contain no more than the number of lines specified by |
| the value of the @env{HISTFILESIZE} variable. |
| When an interactive shell exits, the last |
| @env{$HISTSIZE} lines are copied from the history list to the file |
| named by @env{$HISTFILE}. |
| If the @code{histappend} shell option is set (@pxref{Bash Builtins}), |
| the lines are appended to the history file, |
| otherwise the history file is overwritten. |
| If @env{HISTFILE} |
| is unset, or if the history file is unwritable, the history is |
| not saved. After saving the history, the history file is truncated |
| to contain no more than @env{$HISTFILESIZE} |
| lines. If @env{HISTFILESIZE} is not set, no truncation is performed. |
| |
| If the @env{HISTTIMEFORMAT} is set, the time stamp information |
| associated with each history entry is written to the history file, |
| marked with the history comment character. |
| When the history file is read, lines beginning with the history |
| comment character followed immediately by a digit are interpreted |
| as timestamps for the previous history line. |
| |
| The builtin command @code{fc} may be used to list or edit and re-execute |
| a portion of the history list. |
| The @code{history} builtin may be used to display or modify the history |
| list and manipulate the history file. |
| When using command-line editing, search commands |
| are available in each editing mode that provide access to the |
| history list (@pxref{Commands For History}). |
| |
| The shell allows control over which commands are saved on the history |
| list. The @env{HISTCONTROL} and @env{HISTIGNORE} |
| variables may be set to cause the shell to save only a subset of the |
| commands entered. |
| The @code{cmdhist} |
| shell option, if enabled, causes the shell to attempt to save each |
| line of a multi-line command in the same history entry, adding |
| semicolons where necessary to preserve syntactic correctness. |
| The @code{lithist} |
| shell option causes the shell to save the command with embedded newlines |
| instead of semicolons. |
| The @code{shopt} builtin is used to set these options. |
| @xref{Bash Builtins}, for a description of @code{shopt}. |
| |
| @node Bash History Builtins |
| @section Bash History Builtins |
| @cindex history builtins |
| |
| Bash provides two builtin commands which manipulate the |
| history list and history file. |
| |
| @table @code |
| |
| @item fc |
| @btindex fc |
| @example |
| @code{fc [-e @var{ename}] [-lnr] [@var{first}] [@var{last}]} |
| @code{fc -s [@var{pat}=@var{rep}] [@var{command}]} |
| @end example |
| |
| Fix Command. In the first form, a range of commands from @var{first} to |
| @var{last} is selected from the history list. Both @var{first} and |
| @var{last} may be specified as a string (to locate the most recent |
| command beginning with that string) or as a number (an index into the |
| history list, where a negative number is used as an offset from the |
| current command number). If @var{last} is not specified it is set to |
| @var{first}. If @var{first} is not specified it is set to the previous |
| command for editing and @minus{}16 for listing. If the @option{-l} flag is |
| given, the commands are listed on standard output. The @option{-n} flag |
| suppresses the command numbers when listing. The @option{-r} flag |
| reverses the order of the listing. Otherwise, the editor given by |
| @var{ename} is invoked on a file containing those commands. If |
| @var{ename} is not given, the value of the following variable expansion |
| is used: @code{$@{FCEDIT:-$@{EDITOR:-vi@}@}}. This says to use the |
| value of the @env{FCEDIT} variable if set, or the value of the |
| @env{EDITOR} variable if that is set, or @code{vi} if neither is set. |
| When editing is complete, the edited commands are echoed and executed. |
| |
| In the second form, @var{command} is re-executed after each instance |
| of @var{pat} in the selected command is replaced by @var{rep}. |
| |
| A useful alias to use with the @code{fc} command is @code{r='fc -s'}, so |
| that typing @samp{r cc} runs the last command beginning with @code{cc} |
| and typing @samp{r} re-executes the last command (@pxref{Aliases}). |
| |
| @item history |
| @btindex history |
| @example |
| history [@var{n}] |
| history -c |
| history -d @var{offset} |
| history [-anrw] [@var{filename}] |
| history -ps @var{arg} |
| @end example |
| |
| With no options, display the history list with line numbers. |
| Lines prefixed with a @samp{*} have been modified. |
| An argument of @var{n} lists only the last @var{n} lines. |
| If the shell variable @env{HISTTIMEFORMAT} is set and not null, |
| it is used as a format string for @var{strftime} to display |
| the time stamp associated with each displayed history entry. |
| No intervening blank is printed between the formatted time stamp |
| and the history line. |
| |
| Options, if supplied, have the following meanings: |
| |
| @table @code |
| @item -c |
| Clear the history list. This may be combined |
| with the other options to replace the history list completely. |
| |
| @item -d @var{offset} |
| Delete the history entry at position @var{offset}. |
| @var{offset} should be specified as it appears when the history is |
| displayed. |
| |
| @item -a |
| Append the new |
| history lines (history lines entered since the beginning of the |
| current Bash session) to the history file. |
| |
| @item -n |
| Append the history lines not already read from the history file |
| to the current history list. These are lines appended to the history |
| file since the beginning of the current Bash session. |
| |
| @item -r |
| Read the current history file and append its contents to |
| the history list. |
| |
| @item -w |
| Write out the current history to the history file. |
| |
| @item -p |
| Perform history substitution on the @var{arg}s and display the result |
| on the standard output, without storing the results in the history list. |
| |
| @item -s |
| The @var{arg}s are added to the end of |
| the history list as a single entry. |
| |
| @end table |
| |
| When any of the @option{-w}, @option{-r}, @option{-a}, or @option{-n} options is |
| used, if @var{filename} |
| is given, then it is used as the history file. If not, then |
| the value of the @env{HISTFILE} variable is used. |
| |
| @end table |
| @end ifset |
| |
| @node History Interaction |
| @section History Expansion |
| @cindex history expansion |
| |
| The History library provides a history expansion feature that is similar |
| to the history expansion provided by @code{csh}. This section |
| describes the syntax used to manipulate the history information. |
| |
| History expansions introduce words from the history list into |
| the input stream, making it easy to repeat commands, insert the |
| arguments to a previous command into the current input line, or |
| fix errors in previous commands quickly. |
| |
| History expansion takes place in two parts. The first is to determine |
| which line from the history list should be used during substitution. |
| The second is to select portions of that line for inclusion into the |
| current one. The line selected from the history is called the |
| @dfn{event}, and the portions of that line that are acted upon are |
| called @dfn{words}. Various @dfn{modifiers} are available to manipulate |
| the selected words. The line is broken into words in the same fashion |
| that Bash does, so that several words |
| surrounded by quotes are considered one word. |
| History expansions are introduced by the appearance of the |
| history expansion character, which is @samp{!} by default. |
| @ifset BashFeatures |
| Only @samp{\} and @samp{'} may be used to escape the history expansion |
| character. |
| @end ifset |
| |
| @ifset BashFeatures |
| Several shell options settable with the @code{shopt} |
| builtin (@pxref{Bash Builtins}) may be used to tailor |
| the behavior of history expansion. If the |
| @code{histverify} shell option is enabled, and Readline |
| is being used, history substitutions are not immediately passed to |
| the shell parser. |
| Instead, the expanded line is reloaded into the Readline |
| editing buffer for further modification. |
| If Readline is being used, and the @code{histreedit} |
| shell option is enabled, a failed history expansion will be |
| reloaded into the Readline editing buffer for correction. |
| The @option{-p} option to the @code{history} builtin command |
| may be used to see what a history expansion will do before using it. |
| The @option{-s} option to the @code{history} builtin may be used to |
| add commands to the end of the history list without actually executing |
| them, so that they are available for subsequent recall. |
| This is most useful in conjunction with Readline. |
| |
| The shell allows control of the various characters used by the |
| history expansion mechanism with the @code{histchars} variable, |
| as explained above (@pxref{Bash Variables}). The shell uses |
| the history comment character to mark history timestamps when |
| writing the history file. |
| @end ifset |
| |
| @menu |
| * Event Designators:: How to specify which history line to use. |
| * Word Designators:: Specifying which words are of interest. |
| * Modifiers:: Modifying the results of substitution. |
| @end menu |
| |
| @node Event Designators |
| @subsection Event Designators |
| @cindex event designators |
| |
| An event designator is a reference to a command line entry in the |
| history list. |
| Unless the reference is absolute, events are relative to the current |
| position in the history list. |
| @cindex history events |
| |
| @table @asis |
| |
| @item @code{!} |
| @ifset BashFeatures |
| Start a history substitution, except when followed by a space, tab, |
| the end of the line, @samp{=} or @samp{(} (when the |
| @code{extglob} shell option is enabled using the @code{shopt} builtin). |
| @end ifset |
| @ifclear BashFeatures |
| Start a history substitution, except when followed by a space, tab, |
| the end of the line, or @samp{=}. |
| @end ifclear |
| |
| @item @code{!@var{n}} |
| Refer to command line @var{n}. |
| |
| @item @code{!-@var{n}} |
| Refer to the command @var{n} lines back. |
| |
| @item @code{!!} |
| Refer to the previous command. This is a synonym for @samp{!-1}. |
| |
| @item @code{!@var{string}} |
| Refer to the most recent command |
| preceding the current position in the history list |
| starting with @var{string}. |
| |
| @item @code{!?@var{string}[?]} |
| Refer to the most recent command |
| preceding the current position in the history list |
| containing @var{string}. |
| The trailing |
| @samp{?} may be omitted if the @var{string} is followed immediately by |
| a newline. |
| |
| @item @code{^@var{string1}^@var{string2}^} |
| Quick Substitution. Repeat the last command, replacing @var{string1} |
| with @var{string2}. Equivalent to |
| @code{!!:s/@var{string1}/@var{string2}/}. |
| |
| @item @code{!#} |
| The entire command line typed so far. |
| |
| @end table |
| |
| @node Word Designators |
| @subsection Word Designators |
| |
| Word designators are used to select desired words from the event. |
| A @samp{:} separates the event specification from the word designator. It |
| may be omitted if the word designator begins with a @samp{^}, @samp{$}, |
| @samp{*}, @samp{-}, or @samp{%}. Words are numbered from the beginning |
| of the line, with the first word being denoted by 0 (zero). Words are |
| inserted into the current line separated by single spaces. |
| |
| @need 0.75 |
| For example, |
| |
| @table @code |
| @item !! |
| designates the preceding command. When you type this, the preceding |
| command is repeated in toto. |
| |
| @item !!:$ |
| designates the last argument of the preceding command. This may be |
| shortened to @code{!$}. |
| |
| @item !fi:2 |
| designates the second argument of the most recent command starting with |
| the letters @code{fi}. |
| @end table |
| |
| @need 0.75 |
| Here are the word designators: |
| |
| @table @code |
| |
| @item 0 (zero) |
| The @code{0}th word. For many applications, this is the command word. |
| |
| @item @var{n} |
| The @var{n}th word. |
| |
| @item ^ |
| The first argument; that is, word 1. |
| |
| @item $ |
| The last argument. |
| |
| @item % |
| The word matched by the most recent @samp{?@var{string}?} search. |
| |
| @item @var{x}-@var{y} |
| A range of words; @samp{-@var{y}} abbreviates @samp{0-@var{y}}. |
| |
| @item * |
| All of the words, except the @code{0}th. This is a synonym for @samp{1-$}. |
| It is not an error to use @samp{*} if there is just one word in the event; |
| the empty string is returned in that case. |
| |
| @item @var{x}* |
| Abbreviates @samp{@var{x}-$} |
| |
| @item @var{x}- |
| Abbreviates @samp{@var{x}-$} like @samp{@var{x}*}, but omits the last word. |
| |
| @end table |
| |
| If a word designator is supplied without an event specification, the |
| previous command is used as the event. |
| |
| @node Modifiers |
| @subsection Modifiers |
| |
| After the optional word designator, you can add a sequence of one or more |
| of the following modifiers, each preceded by a @samp{:}. |
| |
| @table @code |
| |
| @item h |
| Remove a trailing pathname component, leaving only the head. |
| |
| @item t |
| Remove all leading pathname components, leaving the tail. |
| |
| @item r |
| Remove a trailing suffix of the form @samp{.@var{suffix}}, leaving |
| the basename. |
| |
| @item e |
| Remove all but the trailing suffix. |
| |
| @item p |
| Print the new command but do not execute it. |
| |
| @ifset BashFeatures |
| @item q |
| Quote the substituted words, escaping further substitutions. |
| |
| @item x |
| Quote the substituted words as with @samp{q}, |
| but break into words at spaces, tabs, and newlines. |
| @end ifset |
| |
| @item s/@var{old}/@var{new}/ |
| Substitute @var{new} for the first occurrence of @var{old} in the |
| event line. Any delimiter may be used in place of @samp{/}. |
| The delimiter may be quoted in @var{old} and @var{new} |
| with a single backslash. If @samp{&} appears in @var{new}, |
| it is replaced by @var{old}. A single backslash will quote |
| the @samp{&}. The final delimiter is optional if it is the last |
| character on the input line. |
| |
| @item & |
| Repeat the previous substitution. |
| |
| @item g |
| @itemx a |
| Cause changes to be applied over the entire event line. Used in |
| conjunction with @samp{s}, as in @code{gs/@var{old}/@var{new}/}, |
| or with @samp{&}. |
| |
| @item G |
| Apply the following @samp{s} modifier once to each word in the event. |
| |
| @end table |