HISTORY(1) User Commands HISTORY(1)
NAME
history, fc, hist - process command history list
SYNOPSIS
/usr/bin/fc [
-r] [
-e editor] [
first [
last]]
/usr/bin/fc -l [
-nr] [
first [
last]]
/usr/bin/fc -s [
old=
new] [
first]
csh history [
-hr] [
n]
ksh fc -e - [
old=
new] [
command]
fc -s [
old =
new] [
command]
fc [
-e ename] [
-nlr] [
first [
last]]
ksh93 hist [
-lnprs] [
-e editor][
-N num][
first[
last]]
DESCRIPTION
/usr/bin/fc The
fc utility lists or edits and reexecutes, commands previously entered
to an interactive
sh.
The command history list references commands by number. The first number
in the list is selected arbitrarily. The relationship of a number to its
command does not change except when the user logs in and no other process
is accessing the list, at which time the system can reset the numbering
to start the oldest retained command at another number (usually 1). When
the number reaches the value in
HISTSIZE or
32767 (whichever is greater),
the shell can wrap the numbers, starting the next command with a lower
number (usually 1). However, despite this optional wrapping of numbers,
fc maintains the time-ordering sequence of the commands. For example, if
four commands in sequence are given the numbers 32 766, 32 767, 1
(wrapped), and 2 as they are executed, command 32 767 is considered the
command previous to 1, even though its number is higher.
When commands are edited (when the
-l option is not specified), the
resulting lines is entered at the end of the history list and then
reexecuted by
sh. The
fc command that caused the editing is not entered
into the history list. If the editor returns a non-zero exit status, this
suppresses the entry into the history list and the command reexecution.
Any command-line variable assignments or redirection operators used with
fc affects both the
fc command itself as well as the command that
results, for example:
fc -s -- -1 2>/dev/null reinvokes the previous command, suppressing standard error for both
fc and the previous command.
csh Display the history list. If
n is given, display only the
n most recent
events.
-r Reverse the order of printout to be most recent first rather than
oldest first.
-h Display the history list without leading numbers. This is used to
produce files suitable for sourcing using the
-h option to the
csh built-in command,
source(1).
History Substitution: History substitution allows you to use words from previous command lines
in the command line you are typing. This simplifies spelling corrections
and the repetition of complicated commands or arguments. Command lines
are saved in the history list, the size of which is controlled by the
history variable. The
history shell variable can be set to the maximum
number of command lines that is saved in the history file, that is:
set history = 200
allows the history list to keep track of the most recent 200 command
lines. If not set, the C shell saves only the most recent command.
A history substitution begins with a
! (although you can change this with
the
histchars variable) and can occur anywhere on the command line;
history substitutions do not nest. The
! can be escaped with
\ to
suppress its special meaning.
Input lines containing history substitutions are echoed on the terminal
after being expanded, but before any other substitutions take place or
the command gets executed.
Event Designators: An event designator is a reference to a command line entry in the history
list.
! Start a history substitution, except when followed by a space
character, tab, newline,
= or
(.
!! Refer to the previous command. By itself, this substitution repeats
the previous command.
!n Refer to command line
n.
!-n Refer to the current command line minus
n.
!str Refer to the most recent command starting with
str.
!?str? Refer to the most recent command containing
str.
!?str? additional Refer to the most recent command containing
str and append
additional to that referenced command.
!{command} additional Refer to the most recent command beginning with
command and append
additional to that referenced command.
^previous_word^replacement^ Repeat the previous command line replacing the string
previous_word with the string
replacement. This is equivalent to the history
substitution:
Repeat the previous command line replacing the string
previous_word with the string
replacement. This is equivalent to the history
substitution:
!:s/previous_word/replacement/.
To re-execute a specific previous command
and make such a
substitution, say, re-executing command #6:
!:6s/previous_word/replacement/.
Word Designators: A `
:' (colon) separates the event specification from the word designator.
2It can be omitted if the word designator begins with a
^,
$,
*,
- or
%.
If the word is to be selected from the previous command, the second
! character can be omitted from the event specification. For instance,
!!:1 and
!:1 both refer to the first word of the previous command, while
!!$ and
!$ both refer to the last word in the previous command. Word
designators include:
# The entire command line typed so far.
0 The first input word (command).
n The
n'th argument.
^ The first argument, that is,
1.
$ The last argument.
% The word matched by (the most recent)
?s search.
x-y A range of words;
-y abbreviates
0-y.
* All the arguments, or a null value if there is just one word in
the event.
x* Abbreviates
x-$. x- Like
x* but omitting word
$.
Modifiers: After the optional word designator, you can add a sequence of one or more
of the following modifiers, each preceded by a
:.
h Remove a trailing pathname component, leaving
the head.
r Remove a trailing suffix of the form `
.xxx',
leaving the basename.
e Remove all but the suffix, leaving the
extension.
s/oldchars/replacements/ Substitute
replacements for
oldchars.
oldchars is a string that can contain
embedded blank spaces, whereas
previous_word in the event designator can not.
^oldchars^replacements^ t Remove all leading pathname components,
leaving the tail.
& Repeat the previous substitution.
g Apply the change to the first occurrence of a
match in each word, by prefixing the above
(for example,
g&).
p Print the new command but do not execute it.
q Quote the substituted words, escaping further
substitutions.
x Like
q, but break into words at each space
character, tab or newline.
Unless preceded by a
g, the modification is applied only to the first
string that matches
oldchars. An error results if no string matches.
The left-hand side of substitutions are not regular expressions, but
character strings. Any character can be used as the delimiter in place of
/. A backslash quotes the delimiter character. The character
&, in the
right hand side, is replaced by the text from the left-hand-side. The
& can be quoted with a backslash. A null
oldchars uses the previous string
either from a
oldchars or from a contextual scan string
s from
!?s. You
can omit the rightmost delimiter if a newline immediately follows
replacements; the rightmost
? in a context scan can similarly be omitted.
Without an event specification, a history reference refers either to the
previous command, or to a previous history reference on the command line
(if any).
ksh Using
fc, in the form of
fc -e - [old=
new] [
command],
or
fc -s [old=
new] [
command],
the
command is re-executed after the substitution
old=new is performed.
If there is not a
command argument, the most recent command typed at this
terminal is executed.
Using
fc in the form of
fc [-e ename] [-nlr ] [
first [
last]],
a range of commands from
first to
last is selected from the last
HISTSIZE commands that were typed at the terminal. The arguments
first and
last can be specified as a number or as a string. A string is used to locate
the most recent command starting with the given string. A negative number
is used as an offset to the current command number. If the
-l flag is
selected, the commands are listed on standard output. Otherwise, the
editor program
-e name is invoked on a file containing these keyboard
commands. If
ename is not supplied, then the value of the variable
FCEDIT (default
/bin/ed) is used as the editor. When editing is complete, the
edited command(s) is executed. If
last is not specified, it is set to
first. If
first is not specified, the default is the previous command for
editing and -16 for listing. The flag
-r reverses the order of the
commands and the flag
-n suppresses command numbers when listing. (See
ksh(1) for more about command line editing.)
HISTFILE If this variable is set when the shell is invoked, then the
value is the pathname of the file that is used to store the
command history.
HISTSIZE If this variable is set when the shell is invoked, then the
number of previously entered commands that are accessible by
this shell is greater than or equal to this number. The
default is
128.
Command Re-entry: The text of the last
HISTSIZE (default 128) commands entered from a
terminal device is saved in a
history file. The file
$HOME/.sh_history is
used if the
HISTFILE variable is not set or if the file it names is not
writable. A shell can access the commands of all
interactive shells which
use the same named
HISTFILE. The special command
fc is used to list or
edit a portion of this file. The portion of the file to be edited or
listed can be selected by number or by giving the first character or
characters of the command. A single command or range of commands can be
specified. If you do not specify an editor program as an argument to
fc then the value of the variable
FCEDIT is used. If
FCEDIT is not defined
then
/bin/ed is used. The edited command(s) is printed and re-executed
upon leaving the editor. The editor name
- is used to skip the editing
phase and to re-execute the command. In this case a substitution
parameter of the form
old=new can be used to modify the command before
execution. For example, if
r is aliased to
a'fc -e - a' then typing
`r bad=good c' re-executes the most recent command which starts with the
letter
c, replacing the first occurrence of the string
bad with the
string
good.
Using the
fc built-in command within a compound command causes the whole
command to disappear from the history file.
ksh93 hist lists, edits, or re-executes commands previously entered into the
current shell environment.
The command history list references commands by number. The first number
in the list is selected arbitrarily. The relationship of a number to its
command does not change during a login session. When the number reaches
32767 the number wraps around to
1 but maintains the ordering.
When the
l option is not specified, and commands are edited, the
resulting lines are entered at the end of the history list and then re-
executed by the current shell. The
hist command that caused the editing
is not entered into the history list. If the editor returns a
non-zero exit status, this suppresses the entry into the history list and the
command re-execution. Command line variable assignments and redirections
affect both the
hist command and the commands that are re-executed.
first and
last define the range of commands. Specify
first and
last as
one of the following:
number A positive number representing a command number. A
+ sign can
precede
number.
-number A negative number representing a command that was executed
number commands previously. For example,
-1 is the previous
command.
string string indicates the most recently entered command that begins
with
string.
string should not contain an
=.
If
first is omitted, the previous command is used, unless
-l is
specified, in which case it defaults to
-16 and last defaults to
-1.
If
first is specified and
last is omitted, then
last defaults to
first unless
-l is specified in which case it defaults to
-1.
If no editor is specified, then the editor specified by the
HISTEDIT variable is used if set, or the
FCEDIT variable is used if set,
otherwise,
ed is used.
OPTIONS
The following options are supported:
-e editor Uses the editor named by
editor to edit the commands. The
editor string is a utility name, subject to search via the
PATH variable. The value in the
FCEDIT variable is used as a
default when
-e is not specified. If
FCEDIT is null or
unset,
ed is used as the editor.
-l (The letter ell.) Lists the commands rather than invoking an
editor on them. The commands is written in the sequence
indicated by the
first and
last operands, as affected by
-r,
with each command preceded by the command number.
-n Suppresses command numbers when listing with
-l.
-r Reverses the order of the commands listed (with
-l ) or
edited (with neither
-l nor
-s).
-s Re-executes the command without invoking an editor.
ksh93 ksh93 supports the following options:
-e editor Specify the editor to use to edit the history command. A
value of
- for
editor is equivalent to specifying the
-s option.
-l List the commands rather than editing and re-executing them.
-N num Start at
num commands back.
-n Suppress the command numbers when the commands are listed.
-p Write the result of history expansion for each operand to
standard output. All other options are ignored.
-r Reverse the order of the commands.
-s Re-execute the command without invoking an editor. In this
case an operand of the form
old=new can be specified to
change the first occurrence of the string
old in the command
to
new before re-executing the command.
OPERANDS
The following operands are supported:
first last Selects the commands to list or edit. The number of previous
commands that can be accessed is determined by the value of the
HISTSIZE variable. The value of
first or
last or both is one of
the following:
[+]
number A positive number representing a command number.
Command numbers can be displayed with the
-l option.
-number A negative decimal number representing the command
that was executed
number of commands previously.
For example,
-1 is the immediately previous
command.
string A string indicating the most recently entered
command that begins with that string. If the
old=new operand is not also specified with
-s, the
string form of the
first operand cannot contain an
embedded equal sign.
When the synopsis form with
-s is used, if
first is omitted, the previous command is used.
For the synopsis forms without
-s : o If
last is omitted,
last defaults to
the previous command when
-l is
specified; otherwise, it defaults to
first.
o If
first and
last are both omitted, the
previous 16 commands is listed or the
previous single command is edited
(based on the
-l option).
o If
first and
last are both present, all
of the commands from
first to
last is
edited (without
-l ) or listed (with
-l). Editing multiple commands is
accomplished by presenting to the
editor all of the commands at one time,
each command starting on a new line. If
first represents a newer command than
last, the commands is listed or edited
in reverse sequence, equivalent to
using
-r. For example, the following
commands on the first line are
equivalent to the corresponding
commands on the second:
fc -r 10 20 fc 30 40
fc 20 10 fc -r 40 30
o When a range of commands is used, it is
not be an error to specify
first or
last values that are not in the history
list.
fc substitutes the value
representing the oldest or newest
command in the list, as appropriate.
For example, if there are only ten
commands in the history list, numbered
1 to 10:
fc -l
fc 1 99
lists and edits, respectively, all ten
commands.
old=new Replace the first occurrence of string
old in the
commands to be reexecuted by the string
new.
OUTPUT
When the
-l option is used to list commands, the format of each command
in the list is as follows:
"%d\t%s\n", <line number>, <command> If both the
-l and
-n options are specified, the format of each command
is:
"\t%s\n", <command> If the
commandcommand consists of more than one line, the lines after the
first are displayed as:
"\t%s\n", <continued-command>EXAMPLES
Example 1: Using history and fc
csh ksh
% history $ fc -l
1 cd /etc 1 cd /etc
2 vi passwd 2 vi passwd
3 date 3 date
4 cd 4 cd
5 du . 5 du .
6 ls -t 6 ls -t
7 history 7 fc -l
% !d $ fc -e - d
du . du .
262 ./SCCS 262 ./SCCS
336 . 336 .
% !da $ fc -e - da
Thu Jul 21 17:29:56 PDT 1994 Thu Jul 21 17:29:56 PDT 1994
% $ alias \!='fc -e -'
% !! $ !
date alias ='fc -e -'
Thu Jul 21 17:29:56 PDT 1994
ENVIRONMENT VARIABLES
See
environ(7) for descriptions of the following environment variables
that affect the execution of
fc:
LC_CTYPE,
LC_MESSAGES, and
NLSPATH.
FCEDIT This variable, when expanded by the shell, determines the
default value for the
-e editor option's
editor option-
argument. If
FCEDIT is null or unset,
ed(1) is used as the
editor.
HISTFILE Determine a pathname naming a command history file. If the
HISTFILE variable is not set, the shell can attempt to access
or create a file
.sh_history in the user's home directory. If
the shell cannot obtain both read and write access to, or
create, the history file, it uses an unspecified mechanism
that allows the history to operate properly. (References to
history ``file'' in this section are understood to mean this
unspecified mechanism in such cases.)
fc can choose to access
this variable only when initializing the history file; this
initialization occurs when
fc or
sh first attempt to retrieve
entries from, or add entries to, the file, as the result of
commands issued by the user, the file named by the
ENV variable, or a system startup file such as
/etc/profile. (The
initialization process for the history file can be dependent
on the system startup files, in that they can contain
commands that effectively preempts the user's settings of
HISTFILE and
HISTSIZE. For example, function definition
commands are recorded in the history file, unless the
set -o nolog option is set. If the system administrator includes
function definitions in some system startup file called
before the
ENV file, the history file is initialized before
the user gets a chance to influence its characteristics.) The
variable
HISTFILE is accessed initially when the shell is
invoked. Any change to
HISTFILE does not take effect until
another shell is invoked.
HISTSIZE Determine a decimal number representing the limit to the
number of previous commands that are accessible. If this
variable is unset, an unspecified default greater than or
equal to 128 are used. The variable
HISTSIZE is accessed
initially when the shell is invoked. Any changes to
HISTSIZE does not take effect until another shell is invoked.
EXIT STATUS
The following exit values are returned:
0 Successful completion of the listing.
>0 An error occurred.
Otherwise, the exit status is that of the commands executed by
fc or
hist.
SEE ALSO
csh(1),
ed(1),
ksh(1),
ksh93(1),
set(1),
sh(1),
source(1),
attributes(7),
environ(7) May 13, 2017
HISTORY(1)