fc(1) fc(1)
fc - process the command history list
fc [-r][-e editor] [first[last]]
fc -l[-nr] [first[last]]
fc -s[old=new][first]
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 will not change except when the user logs in and no other process
is accessing the list, at which time the system may reset the numbering
to start the oldest retained command at another number (usually 1). When
the number reaches an implementation-dependent upper limit, which will be
no smaller than the value in HISTSIZE or 32767 (whichever is greater),
the shell may wrap the numbers, starting the next command with a lower
number (usually 1). However, despite this optional wrapping of numbers,
fc will maintain the time-ordering sequence of the commands. For example,
if four commands in sequence are given the numbers 32766, 32767, 1
(wrapped), and 2 as they are executed, command 32767 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 will be entered at the end of the history list and then
reexecuted by sh. The fc command that caused the editing will not be
entered into the history list. If the editor returns a non-zero exit
status, this will suppress the entry into the history list and the
command reexecution. Any command-line variable assignments or redirection
operators used with fc will affect 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.
The fc utility supports the XBD specification, Utility Syntax Guidelines.
The following options are supported:
-e editor Use 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 will be used as the editor.
Page 1
fc(1) fc(1)
-l (The letter ell.) List the commands rather than invoking an
editor on them. The commands will be written in the sequence
indicated by the first and last operands, as affected by -r,
with each command preceded by the command number.
-n Suppress command numbers when listing with -l.
-r Reverse the order of the commands listed (with -l) or edited
(with neither -l nor -s).
-s Reexecute the command without invoking an editor.
The following operands are supported:
first
last Select 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
will be 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 will be used.
For the synopsis forms without -s:
If last is omitted, last defaults to the previous command
when -l is specified; otherwise, it defaults to first.
If first and last are both omitted, the previous 16
commands will be listed or the previous single command
will be edited (based on the -l option).
Page 2
fc(1) fc(1)
If first and last are both present, all of the commands
from first to last will be edited (without -l) or listed
(with -l). Editing multiple commands will be 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 will
be 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
When a range of commands is used, it will not be an error
to specify first or last values that are not in the
history list; fc will substitute 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
will list and edit, respectively, all ten commands.
old=new Replace the first occurrence of string old in the commands to
be reexecuted by the string new.
ENVIRONMENT VARIABLES [Toc] [Back] The following environment variables affect the execution of fc:
FCEDIT This variable, when expanded by the shell, determines the
default value for the -e editor option's editor optionargument.
If FCEDIT is null or unset, ed will be used as the
editor.
HISTFILE Determine a pathname naming a command history file. If the
HISTFILE variable is not set, the shell may 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 will use 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.) An
implementation may choose to access this variable only when
initialising the history file; this initialisation will occur
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 implementationdependent
system startup files. (The initialisation process
Page 3
fc(1) fc(1)
for the history file can be dependent on the system startup
files, in that they may contain commands that will
effectively preempt 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 will be initialised before the user
gets a chance to influence its characteristics.) In some
historical shells, the history file is initialised just after
the ENV file has been processed. Therefore, it is
implementation-dependent whether changes made to HISTFILE
after the history file has been initialised are effective.
Implementations may choose to disable the history list
mechanism for users with appropriate privileges who do not
set HISTFILE ; the specific circumstances under which this
will occur are implementation-dependent. If more than one
instance of the shell is using the same history file, it is
unspecified how updates to the history file from those shells
interact. As entries are deleted from the history file, they
will be deleted oldest first. It is unspecified when history
file entries are physically removed from the history file.
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 will be used. The maximum number of commands in
the history list is unspecified, but will be at least 128. An
implementation may choose to access this variable only when
initialising the history file, as described under HISTFILE
Therefore, it is unspecified whether changes made to HISTSIZE
after the history file has been initialised are effective.
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 <command> consists of more than one line, the lines after the
first are displayed as:
"\t%s\n", <continued-command>
Page 4
fc(1) fc(1)
The following exit values are returned:
0 Successful completion of the listing.
>0 An error occurred.
Otherwise, the exit status will be that of the commands executed by fc.
Since editors sometimes use file descriptors as integral parts of their
editing, redirecting their file descriptors as part of the fc command can
produce unexpected results. For example, if vi is the FCEDIT editor, the
command:
fc -s | more
will not work correctly on many systems.
Users on windowing systems may want to have separate history files for
each window by setting HISTFILE as follows:
HISTFILE=$HOME/.sh_hist$$
sh(1).
PPPPaaaaggggeeee 5555 [ Back ]
|