437 lines
		
	
	
	
		
			15 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			437 lines
		
	
	
	
		
			15 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| @ignore
 | |
| This file documents the user interface to the GNU History library.
 | |
| 
 | |
| Copyright (C) 1988-2002 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.
 | |
| 
 | |
| 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}] [-nlr] [@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.
 | |
| 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.
 | |
| @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.
 | |
| @cindex history events
 | |
| 
 | |
| @table @asis
 | |
| 
 | |
| @item @code{!}
 | |
| Start a history substitution, except when followed by a space, tab,
 | |
| the end of the line, @samp{=} or @samp{(}.
 | |
| 
 | |
| @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 starting with @var{string}.
 | |
| 
 | |
| @item @code{!?@var{string}[?]}
 | |
| Refer to the most recent command 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
 | |
| 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{&}.
 | |
| 
 | |
| @end table
 | 
