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)

tribblix@gmail.com :: GitHub :: Privacy