5987 lines
120 KiB
Groff
5987 lines
120 KiB
Groff
.\" $XConsortium: ksh93.man /main/2 1995/07/17 10:51:12 drk $
|
|
.\"
|
|
.\" David Korn
|
|
.\" AT&T Bell Laboratories
|
|
.\"
|
|
.\" @(#)sh.1 (ulysses!dgk) 01/14/93-beta15
|
|
.\"
|
|
.nr Z 1 \" set to 1 when command name is ksh rather than sh
|
|
.nr Y 0 \" set to 1 for R&D UNIX
|
|
.if \nY=1 .nr Z 1
|
|
.ds OK [\|
|
|
.ds CK \|]
|
|
.ds ' \s+4\v@.3m@\'\v@-.3m@\s-4
|
|
.ds ` \s+4\v@.3m@\`\v@-.3m@\s-4
|
|
.de P
|
|
.br
|
|
..
|
|
.if \nZ=0 .TH SH 1
|
|
.if \nZ=1 .TH KSH 1 "User Environment Utilities" "RDS Standard"
|
|
.SH NAME
|
|
.if \nZ=0 sh, rsh \- shell, the
|
|
.if \nZ=1 ksh, rksh \- KornShell, a
|
|
standard/restricted command and programming language
|
|
.SH SYNOPSIS
|
|
.if \nZ=0 .B sh
|
|
.if \nZ=1 .B ksh
|
|
[
|
|
.B \(+-abcefhikmnoprstuvxCP
|
|
] [
|
|
.B \-I
|
|
file ] [
|
|
.B \(+-o
|
|
option ] .\|.\|. [
|
|
.B \-
|
|
] [ arg .\|.\|. ]
|
|
.br
|
|
.if \nZ=0 .B rsh
|
|
.if \nZ=1 .B rksh
|
|
[
|
|
.B \(+-abcefhikmnoprstuvxCP
|
|
] [
|
|
.B \-I
|
|
file ] [
|
|
.B \(+-o
|
|
option ] .\|.\|. [
|
|
.B \-
|
|
] [ arg .\|.\|. ]
|
|
.SH DESCRIPTION
|
|
.if \nZ=0 .I Sh\^
|
|
.if \nZ=1 .I Ksh\^
|
|
is a command and programming language
|
|
that executes commands read from a terminal
|
|
or a file.
|
|
.if \nZ=0 .I Rsh\^
|
|
.if \nZ=1 .I Rksh\^
|
|
is a restricted version of the
|
|
.if \nZ=0 standard
|
|
command interpreter
|
|
.if \nZ=0 .IR sh ;
|
|
.if \nZ=1 .IR ksh ;
|
|
it is used to set up login names and execution environments whose
|
|
capabilities are more controlled than those of the standard shell.
|
|
See
|
|
.I Invocation\^
|
|
below
|
|
for the meaning of arguments to the shell.
|
|
.SS Definitions.
|
|
A
|
|
.I metacharacter\^
|
|
is one of the following characters:
|
|
.RS
|
|
.PP
|
|
\f3; & ( ) \(bv < > new-line space tab\fP
|
|
.RE
|
|
.PP
|
|
A
|
|
.I blank\^
|
|
is a
|
|
.B tab
|
|
or a
|
|
.BR space .
|
|
An
|
|
.I identifier\^
|
|
is a sequence of letters, digits, or underscores
|
|
starting with a letter or underscore.
|
|
Identifiers are used as components of
|
|
.I variable\^
|
|
names.
|
|
A
|
|
.I vname\^
|
|
is a sequence of one or more identifiers
|
|
separated by a \fB\s+2.\s-2\fP and optionally preceded
|
|
by a \fB\s+2.\s-2\fP.
|
|
Vnames are used as function and variable names.
|
|
A
|
|
.I word\^
|
|
is a sequence of
|
|
.I characters\^
|
|
excluding non-quoted
|
|
.IR metacharacters .
|
|
.P
|
|
A
|
|
.I command\^
|
|
is a sequence of characters in the syntax
|
|
of the shell language.
|
|
The shell reads each command and
|
|
carries out the desired action either directly or by invoking
|
|
separate utilities.
|
|
A built-in command is a command that is carried out by the
|
|
shell itself without creating a separate process.
|
|
Some commands are built-in purely for convenience
|
|
and are not documented here.
|
|
Built-ins that cause
|
|
side effects in the shell environment and
|
|
built-ins that are found before performing a
|
|
path search (see
|
|
.I Execution\^
|
|
below)
|
|
are documented here.
|
|
For historical reasons, some of
|
|
these built-ins behave differently than
|
|
other built-ins and are called
|
|
.IR "special built-ins" .
|
|
.SS Commands.
|
|
A
|
|
.I simple-command\^
|
|
is a list of variable assignments
|
|
(see
|
|
.I Variable Assignments\^
|
|
below)
|
|
or a sequence of
|
|
.I blank\^
|
|
separated words
|
|
which may be preceded by a list of variable assignments
|
|
(see
|
|
.I Environment\^
|
|
below).
|
|
The first word specifies the name of the command to
|
|
be executed.
|
|
Except as specified below,
|
|
the remaining words are passed as arguments
|
|
to the invoked command.
|
|
The command name is passed as argument 0
|
|
(see
|
|
.IR exec (2)).
|
|
The
|
|
.I value\^
|
|
of a simple-command is its exit status; 0-255
|
|
if it terminates normally; 256+\f2signum\^\fP if
|
|
it terminates abnormally (the name of the signal corresponding
|
|
to the exit status can be
|
|
obtained via the
|
|
.B "\-l $?"
|
|
option of the
|
|
.B kill\^
|
|
built-in utility).
|
|
.PP
|
|
An
|
|
.I "arithmetic command"
|
|
begins with a
|
|
.BR (( ,
|
|
and consists of an arithmetic expression formed by
|
|
all the characters until a matching
|
|
.BR )) .
|
|
(See
|
|
.I "Arithmetic evaluation"
|
|
below.)
|
|
The exit status of an arithmetic command is 0 when the
|
|
arithmetic expression evaluates to a non-zero value and
|
|
is 1 when the arithmetic expression evaluates to 0.
|
|
.PP
|
|
A
|
|
.I pipeline\^
|
|
is a sequence of one or more
|
|
.I commands\^
|
|
separated by
|
|
.BR \(bv .
|
|
The standard output of each command but the last
|
|
is connected by a
|
|
.IR pipe (2)
|
|
to the standard input of the next command.
|
|
Each command,
|
|
except possibly the last,
|
|
is run as a separate process;
|
|
the shell waits for the last command to terminate.
|
|
The exit status of a pipeline is the exit
|
|
status of the last command.
|
|
Each pipeline can be preceded by the
|
|
.I "reserved word"
|
|
.B !
|
|
which negates the exit status of the pipeline.
|
|
.PP
|
|
A
|
|
.I list\^
|
|
is a sequence of one or more
|
|
pipelines
|
|
separated by
|
|
.BR ; ,
|
|
.BR & ,
|
|
.BR \(bv& ,
|
|
.BR && ,
|
|
or
|
|
.BR \(bv\|\(bv ,
|
|
and optionally terminated by
|
|
.BR ; ,
|
|
.BR & ,
|
|
or
|
|
.BR \(bv& .
|
|
Of these five symbols,
|
|
.BR ; ,
|
|
.BR & ,
|
|
and
|
|
.B \(bv&
|
|
have equal precedence,
|
|
which is lower than that of
|
|
.B &&
|
|
and
|
|
.BR \(bv\|\(bv .
|
|
The symbols
|
|
.B &&
|
|
and
|
|
.B \(bv\|\(bv
|
|
also have equal precedence.
|
|
A semicolon
|
|
.RB ( ; )
|
|
causes sequential execution of the preceding pipeline; an ampersand
|
|
.RB ( & )
|
|
causes asynchronous execution of the preceding pipeline (i.e., the shell does
|
|
.I not\^
|
|
wait for that pipeline to finish).
|
|
The symbol
|
|
.B \(bv&
|
|
causes asynchronous execution of the preceding pipeline
|
|
with a two-way pipe established to the parent shell;
|
|
the standard input and output of the spawned pipeline
|
|
can be written to and read from by the parent shell
|
|
by applying
|
|
the redirection operators
|
|
.B <&
|
|
and
|
|
.B >&
|
|
with arg
|
|
.B p
|
|
to commands and by using
|
|
.B \-p
|
|
option of
|
|
the built-in commands
|
|
.B read
|
|
and
|
|
.B print
|
|
described later.
|
|
The symbol
|
|
.B &&
|
|
.RB (\| \(bv\|\(bv \^)
|
|
causes the
|
|
.I list\^
|
|
following it to be executed only if the preceding
|
|
pipeline
|
|
returns a zero (non-zero) value.
|
|
An arbitrary number of new-lines may appear in a
|
|
.I list\^
|
|
instead of a semicolon,
|
|
to delimit a command.
|
|
.PP
|
|
A
|
|
.I command\^
|
|
is either a simple-command
|
|
or one of the following.
|
|
Unless otherwise stated,
|
|
the value returned by a command is that of the
|
|
last simple-command executed in the command.
|
|
.TP
|
|
\f3for\fP \f2vname\^\fP \*(OK \f3in\fP \f2word\^\fP .\|.\|. \*(CK \f3;do\fP \f2list\^\fP \f3;done\fP
|
|
Each time a
|
|
.B for
|
|
command is executed,
|
|
.I name\^
|
|
is set to the next
|
|
.I word\^
|
|
taken from the
|
|
.B in
|
|
.I word\^
|
|
list.
|
|
If
|
|
.BI in " word\^"
|
|
\&.\|.\|.
|
|
is omitted, then
|
|
the
|
|
.B for
|
|
command executes the \f3do\fP \f2list\^\fP once for each positional parameter
|
|
that is set
|
|
(see
|
|
.I "Parameter Expansion\^"
|
|
below).
|
|
Execution ends when there are no more words in the list.
|
|
.TP
|
|
\f3for ((\fP \*(OK\f2expr1\^\fP\*(CK \f3;\fP \*(OK\f2expr2\^\fP\*(CK \f3;\fP \*(OK\f2expr3\^\fP\*(CK \f3))\fP \f3;do\fP \f2list\^\fP \f3;done\fP
|
|
The arithmetic expression
|
|
.I expr1
|
|
is evaluated first.
|
|
(See
|
|
.I "Arithmetic evaluation"
|
|
below.)
|
|
The arithmetic expression
|
|
.I expr2
|
|
is repeatedly evaluated until it evalues to zero and when non-zero,
|
|
.I list
|
|
is executed and the arithmetic expression
|
|
.I expr3
|
|
evaluated.
|
|
If any expression
|
|
is omitted, then it behaves as if it evaluated to 1.
|
|
.TP
|
|
\f3select\fP \f2vname\^\fP \*(OK \f3in\fP \f2word\^\fP .\|.\|. \*(CK \f3;do\fP \f2list\^\fP \f3;done\fP
|
|
A
|
|
.B select
|
|
command prints on standard error (file descriptor 2) the set of
|
|
.IR word s,
|
|
each preceded by a number.
|
|
If
|
|
.BI in " word\^"
|
|
\&.\|.\|.
|
|
is omitted, then
|
|
the
|
|
positional parameters
|
|
are used instead
|
|
(see
|
|
.I "Parameter Expansion\^"
|
|
below).
|
|
The
|
|
.SM
|
|
.B PS3
|
|
prompt is printed
|
|
and a line is read from the standard input.
|
|
If this line consists of the number
|
|
of one of the listed
|
|
.IR word s,
|
|
then the value of the variable
|
|
.I vname\^
|
|
is set to the
|
|
.I word\^
|
|
corresponding to this number.
|
|
If this line is empty the selection list is
|
|
printed again.
|
|
Otherwise the value of the variable
|
|
.I vname\^
|
|
is set to
|
|
.IR null .
|
|
The contents of the line read from standard input is
|
|
saved in
|
|
the variable
|
|
.SM
|
|
.BR REPLY .
|
|
The
|
|
.I list\^
|
|
is executed for each selection until a
|
|
.B break\^
|
|
or
|
|
.I end-of-file\^
|
|
is encountered.
|
|
If the
|
|
.SM
|
|
.B REPLY
|
|
variable is set to
|
|
.I null\^
|
|
by the execution of
|
|
.IR list ,
|
|
then the selection list is printed before
|
|
displaying the
|
|
.SM
|
|
.B PS3
|
|
prompt for the next selection.
|
|
.TP
|
|
\f3case\fP \f2word\^\fP \f3in\fP \*(OK \*(OK\f3(\fP\*(CK\f2pattern\^\fP \*(OK \(bv \f2pattern\^\fP \*(CK .\|.\|. \f3)\fP \f2list\^\fP \f3;;\fP \*(CK .\|.\|. \f3esac\fP
|
|
A
|
|
.B case
|
|
command executes the
|
|
.I list\^
|
|
associated with the first
|
|
.I pattern\^
|
|
that matches
|
|
.IR word .
|
|
The form of the patterns is
|
|
the same as that used for
|
|
file-name generation (see
|
|
.I "File Name Generation\^"
|
|
below).
|
|
The
|
|
.B ;;
|
|
operator causes execution of
|
|
.B case
|
|
to terminate.
|
|
If
|
|
.B ;&
|
|
is used in place of
|
|
.B ;;
|
|
the next subsequent list, if any, is executed.
|
|
.ll +3
|
|
.TP
|
|
\f3if\fP \f2list\^\fP \f3;then\fP \f2list\^\fP \*(OK \
|
|
\f3elif\fP \f2list\^\fP \f3;then\fP \f2list\^\fP \*(CK .\|.\|. \
|
|
\*(OK \f3;else\fP \f2list\^\fP \*(CK \f3;f\&i\fP
|
|
.ll -3
|
|
The
|
|
.I list\^
|
|
following \f3if\fP is executed and,
|
|
if it
|
|
returns a zero exit status, the
|
|
.I list\^
|
|
following
|
|
the first
|
|
.B then
|
|
is executed.
|
|
Otherwise, the
|
|
.I list\^
|
|
following \f3elif\fP
|
|
is executed and, if its value is zero,
|
|
the
|
|
.I list\^
|
|
following
|
|
the next
|
|
.B then
|
|
is executed.
|
|
Failing that, the
|
|
.B else
|
|
.I list\^
|
|
is executed.
|
|
If the
|
|
.B if
|
|
.I list\^
|
|
has non-zero exit status
|
|
and there is no
|
|
.B else
|
|
.IR list ,
|
|
then the
|
|
.B if
|
|
command returns a zero exit status.
|
|
.TP
|
|
.PD 0
|
|
\f3while\fP \f2list\^\fP \f3;do\fP \f2list\^\fP \f3;done\fP
|
|
.TP
|
|
\f3until\fP \f2list\^\fP \f3;do\fP \f2list\^\fP \f3;done\fP
|
|
.PD
|
|
A
|
|
.B while
|
|
command repeatedly executes the
|
|
.B while
|
|
.I list\^
|
|
and, if the exit status of the last command in the list is zero, executes
|
|
the
|
|
.B do
|
|
.IR list ;
|
|
otherwise the loop terminates.
|
|
If no commands in the
|
|
.B do
|
|
.I list\^
|
|
are executed, then the
|
|
.B while
|
|
command returns a zero exit status;
|
|
.B until
|
|
may be used in place of
|
|
.B while
|
|
to negate
|
|
the loop termination test.
|
|
.TP
|
|
\f3(\fP\f2list\^\fP\f3)\fP
|
|
.br
|
|
Execute
|
|
.I list\^
|
|
in a separate environment.
|
|
Note, that if two adjacent open parentheses are
|
|
needed for nesting, a space must be inserted to avoid
|
|
evaluation as an arithmetic command as described above.
|
|
.TP
|
|
\f3{ \fP\f2list\^\fP\f3;}\fP
|
|
.br
|
|
.I list\^
|
|
is simply executed.
|
|
Note that unlike the metacharacters
|
|
.B (
|
|
and
|
|
.BR ) ,
|
|
.B {
|
|
and
|
|
.B }
|
|
are
|
|
.IR "reserved word" s
|
|
and must occur
|
|
at the beginning of a line or after a
|
|
.B ;
|
|
in order to be recognized.
|
|
.TP
|
|
\f3[[\fP\f2 expression \^\fP\f3]]\fP
|
|
.br
|
|
Evaluates
|
|
.I expression\^
|
|
and returns a zero exit status when
|
|
.I expression\^
|
|
is true.
|
|
See
|
|
.I "Conditional Expressions\^"
|
|
below, for a description of
|
|
.IR expression .
|
|
.TP
|
|
.PD 0
|
|
\f3function\fP \f2varname\^\fP \f3{\fP \f2list\^\fP \f3;}\fP
|
|
.TP
|
|
\f2varname\^\fP \f3() {\fP \f2list\^\fP \f3;}\fP
|
|
.PD
|
|
Define a function which is referenced by
|
|
.IR varname .
|
|
A function whose
|
|
.I varname\^
|
|
contains a
|
|
.B \s+2.\s-2
|
|
is called a discipline function and the portion
|
|
of the
|
|
.I varname\^
|
|
preceding the last
|
|
.B \s+2.\s-2
|
|
must refer to an existing variable.
|
|
The body of the function is the
|
|
.I list\^
|
|
of commands between
|
|
.B {
|
|
and
|
|
.BR } .
|
|
A function defined with the \f3function\fP \f2varname\^\fP
|
|
syntax can also be used as an argument to the \f3.\fP
|
|
special built-in command to get the equivalent behavior
|
|
as if the \f2varname\^\fP\f3()\fP syntax were used to define it.
|
|
(See
|
|
.I Functions\^
|
|
below.)
|
|
.TP
|
|
\f3time\fP \*(OK \f2pipeline\^\fP \*(CK
|
|
.br
|
|
If \f2pipeline\^\fP is omitted the user and system time for
|
|
the current shell and completed child processes is printed
|
|
on standard error.
|
|
Otherwise,
|
|
.I pipeline\^
|
|
is executed and the elapsed time as well as
|
|
the user and system time are printed on standard error.
|
|
.PP
|
|
The following reserved words
|
|
are only recognized as such when they are the first word of a command
|
|
and are not quoted:
|
|
.if t .RS
|
|
.PP
|
|
.B
|
|
.if n if then else elif fi case esac for while until do done { } function select time [[ ]] !
|
|
.if t if then else elif fi case esac for while until do done { } function select time [[ ]] !
|
|
.if t .RE
|
|
.SS Variable Assignments.
|
|
One or more variable assignments can start a simple command
|
|
or can be an arguments to the
|
|
.BR typeset ,
|
|
.BR export ,
|
|
or
|
|
.B readonly
|
|
special built-in commands.
|
|
The syntax for an \f2assignment\^\fP is of the form:
|
|
.TP
|
|
.PD 0
|
|
\f2varname\^\fP\f3=\fP\f2word\^\fP
|
|
.TP
|
|
\f2varname\^\fP\f3[\fP\f2word\^\fP\f3]\fP=\fP\f2word\^\fP
|
|
.PD
|
|
No space is permitted between \f2varname\^\fP and the \f3=\fP or
|
|
between \f3=\fP and \fIword\^\fP.
|
|
.TP
|
|
\f2varname\^\fP\f3=(\fP\f2assign_list\^\fP\f3)\fP
|
|
No space is permitted between \f2varname\^\fP and the \f3=\fP.
|
|
An \f2assign_list\^\fP can be one of the following:
|
|
.RS 15
|
|
.PD 0
|
|
.TP
|
|
\f2word\^\fP ...
|
|
Indexed array assignment.
|
|
.TP
|
|
\f3[\fP\f2word\^\fP\f3]=\fP\f2word\^\fP .\|.\|.
|
|
Associative array assignment.
|
|
.TP
|
|
\f2assignment\^\fP .\|.\|.
|
|
Nested variable assignment.
|
|
.TP
|
|
\f3typeset\fP \*(OK\f2options\fP\*(CK \f2assignment\^\fP .\|.\|.
|
|
Nested variable assignment. Multiple assignments
|
|
can be specified by separating each of them with a \f3;\fP.
|
|
.PD
|
|
.RE
|
|
.SS Comments.
|
|
.PD 0
|
|
A word beginning with
|
|
.B #
|
|
causes that word and all the following characters up to a new-line
|
|
to be ignored.
|
|
.SS Aliasing.
|
|
The first word of each command is replaced by the text of an
|
|
.B alias
|
|
if an
|
|
.B alias
|
|
for this word has been defined.
|
|
An
|
|
.B alias
|
|
name consists of any number of characters excluding metacharacters,
|
|
quoting characters,
|
|
file expansion characters,
|
|
parameter expansion and command substitution
|
|
characters,
|
|
and
|
|
.BR = .
|
|
The replacement string can contain any
|
|
valid shell script
|
|
including the metacharacters listed above.
|
|
The first word of each command in the
|
|
replaced text,
|
|
other than
|
|
any that are in the process of being replaced,
|
|
will be tested for aliases.
|
|
If the last character of the alias value is a
|
|
.I blank\^
|
|
then the word following the alias will also be checked for alias
|
|
substitution.
|
|
Aliases can be used to redefine
|
|
built-in commands but cannot be used to redefine
|
|
the reserved words listed above.
|
|
Aliases can be created and listed with the
|
|
.B alias
|
|
command and can be removed with the
|
|
.B unalias
|
|
command.
|
|
.PP
|
|
.I Aliasing\^
|
|
is performed when
|
|
scripts are read,
|
|
not while they are executed.
|
|
Therefore,
|
|
for an alias to take effect
|
|
the
|
|
.B
|
|
alias
|
|
definition command has to be executed before
|
|
the command which references the alias is read.
|
|
.PP
|
|
The following
|
|
.I exported aliases
|
|
are compiled into the shell
|
|
but can be unset or redefined:
|
|
.RS 20
|
|
.PD 0
|
|
.TP
|
|
.B "autoload=\(fmtypeset \-fu\(fm"
|
|
.TP
|
|
.B "command=\(fmcommand \(fm"
|
|
.TP
|
|
.B "fc=hist"
|
|
.TP
|
|
.B "float=\(fmtypeset \-E\(fm"
|
|
.TP
|
|
.B "functions=\(fmtypeset \-f\(fm"
|
|
.TP
|
|
.B "hash=\(fmalias \-t \-\-\(fm"
|
|
.TP
|
|
.B "history=\(fmhist \-l\(fm"
|
|
.TP
|
|
.B "integer=\(fmtypeset \-i\(fm"
|
|
.TP
|
|
.B "nameref=\(fmtypeset \-n\(fm"
|
|
.TP
|
|
.B "nohup=\(fmnohup \(fm"
|
|
.TP
|
|
.B "r=\(fmhist \-s\(fm"
|
|
.TP
|
|
.B "redirect=\(fmcommand exec\(fm"
|
|
.TP
|
|
.B "stop=\(fmkill \-s \s-1STOP\s+1\(fm"
|
|
.TP
|
|
.B "times=\(fm{ {time;} 2>&1;}\(fm"
|
|
.TP
|
|
.B "type=\(fmwhence \-v\(fm"
|
|
.PD
|
|
.RE
|
|
.SS Tilde Substitution.
|
|
After alias substitution is performed, each word
|
|
is checked to see if it begins with an unquoted
|
|
.BR \(ap .
|
|
For tilde substitution,
|
|
.I word\^
|
|
also refers to the
|
|
.I word\^
|
|
portion of parameter expansion
|
|
( see
|
|
.I "Parameter Expansion\^"
|
|
below.)
|
|
If it does, then the word up to a
|
|
.B /
|
|
is checked to see if it matches a user name in the
|
|
password database (
|
|
often the
|
|
.B /etc/passwd
|
|
file).
|
|
If a match is found, the
|
|
.B \(ap
|
|
and the matched login name are replaced by the
|
|
login directory of the matched user.
|
|
If no match is found, the original text is left unchanged.
|
|
A
|
|
.B \(ap
|
|
by itself, or in front of a
|
|
.BR / ,
|
|
is replaced by
|
|
.SM
|
|
.BR $HOME .
|
|
A
|
|
.B \(ap
|
|
followed by a
|
|
.B +
|
|
or
|
|
.B \-
|
|
is replaced by the value of
|
|
.B
|
|
.SM $PWD
|
|
and
|
|
.B
|
|
.SM $OLDPWD
|
|
respectively.
|
|
.PP
|
|
In addition,
|
|
when expanding a
|
|
.IR "variable assignment" ,
|
|
.I tilde
|
|
substitution is attempted when
|
|
the value of the assignment
|
|
begins with a
|
|
.BR \(ap ,
|
|
and when a
|
|
.B \(ap
|
|
appears after a
|
|
.BR : .
|
|
The
|
|
.B :
|
|
also terminates a
|
|
.B \(ap
|
|
login name.
|
|
.if \nY=1 \{.PP
|
|
On R&D UNIX Systems with RFS, an additional capability,
|
|
.BR \(aphost!user ,
|
|
has been added to
|
|
.IR ksh .
|
|
See
|
|
.IR logdir (1)
|
|
for a complete description of the capability.\}
|
|
.SS Command Substitution.
|
|
The standard output from a command enclosed in
|
|
parentheses preceded by a dollar sign (
|
|
.B $(\|)
|
|
)
|
|
or a pair of grave accents (\^\f3\*`\^\*`\fP\^)
|
|
may be used as part or all
|
|
of a word;
|
|
trailing new-lines are removed.
|
|
In the second (obsolete) form, the string between the quotes is processed
|
|
for special quoting characters before the command is executed (see
|
|
.I Quoting\^
|
|
below).
|
|
The command substitution
|
|
\^\f3$(\^cat file\^)\fP\^
|
|
can be replaced by the equivalent but faster
|
|
\^\f3$(\^<file\^)\fP\^.
|
|
.SS Arithmetic Substitution.
|
|
An arithmetic expression enclosed in double
|
|
parentheses preceded by a dollar sign (
|
|
.B $((\|))
|
|
)
|
|
is replaced by the value of the arithmetic expression
|
|
within the double parentheses.
|
|
.SS Process Substitution.
|
|
This feature is only available on
|
|
versions of the UNIX operating system that support the
|
|
.B /dev/fd
|
|
directory for naming open files.
|
|
Each command argument of the form
|
|
\f3<(\fP\f2list\^\fP\f3)\fP
|
|
or
|
|
\f3>(\fP\f2list\^\fP\f3)\fP
|
|
will run process
|
|
.I list
|
|
asynchronously connected to some file in
|
|
.BR /dev/fd .
|
|
The name of this file will become the argument to the command.
|
|
If the form with
|
|
.B >
|
|
is selected then writing on this file will provide input for
|
|
.IR list .
|
|
If
|
|
.B <
|
|
is used,
|
|
then the file passed as an argument will contain the output of the
|
|
.I list
|
|
process.
|
|
For example,
|
|
.RS
|
|
.PP
|
|
\f3paste <(cut \-f1\fP \f2file1\fP\f3) <(cut \-f3\fP \f2file2\f3) | tee >(\fP\f2process1\fP\f3) >(\fP\f2process2\fP\f3)\fP
|
|
.RE
|
|
.PP
|
|
.I cuts
|
|
fields 1 and 3 from
|
|
the files
|
|
.I file1
|
|
and
|
|
.I file2
|
|
respectively,
|
|
.I pastes
|
|
the results together, and
|
|
sends it
|
|
to the processes
|
|
.I process1
|
|
and
|
|
.IR process2 ,
|
|
as well as putting it onto the standard output.
|
|
Note that the file, which is passed as an argument to the command,
|
|
is a UNIX
|
|
.IR pipe (2)
|
|
so programs that expect to
|
|
.IR lseek (2)
|
|
on the file will not work.
|
|
.SS Parameter Expansion.
|
|
A
|
|
.I parameter\^
|
|
is an
|
|
.IR variable ,
|
|
one or more digits,
|
|
or any of the characters
|
|
.BR \(** ,
|
|
.BR @ ,
|
|
.BR # ,
|
|
.BR ? ,
|
|
.BR \- ,
|
|
.BR $ ,
|
|
and
|
|
.BR !\\^ .
|
|
A
|
|
.I variable\^
|
|
is denoted by a \f2vname\fP.
|
|
To create a variable whose
|
|
.I vname\^
|
|
contains a \f3\s+2.\s-2\fP,
|
|
a variable whose
|
|
.I vname\^
|
|
consists of everything before the last \f3\s+2.\s-2\fP must already exist.
|
|
A
|
|
.I variable\^
|
|
has a
|
|
.I value\^
|
|
and zero or more
|
|
.IR attributes .
|
|
.I Variables\^
|
|
can be assigned
|
|
.I values\^
|
|
and
|
|
.I attributes
|
|
by using the
|
|
.B typeset\^
|
|
special built-in command.
|
|
The attributes supported by the shell are described
|
|
later with the
|
|
.B typeset\^
|
|
special built-in command.
|
|
Exported variables pass values and attributes to
|
|
the environment.
|
|
.PP
|
|
The shell supports both indexed and associative arrays.
|
|
An element of an array variable is referenced by a
|
|
.IR subscript .
|
|
A
|
|
.I subscript\^
|
|
for an indexed array is denoted by
|
|
an
|
|
.I arithmetic expression\^
|
|
(see
|
|
.I "Arithmetic evaluation"
|
|
below)
|
|
between a
|
|
.B [
|
|
and a
|
|
.BR ] .
|
|
To assign values to an indexed array, use
|
|
\f3set \-A\fP \f2vname\fP \f2value\fP .\|.\|. .
|
|
The value of all
|
|
subscripts must be in the
|
|
range of
|
|
0 through 4095.
|
|
Indexed arrays need not be declared.
|
|
Any reference to a variable
|
|
with a valid subscript is
|
|
legal and an array will be created if necessary.
|
|
.PP
|
|
An associative array is created with the
|
|
.B \-A
|
|
option to
|
|
.BR typeset.
|
|
A
|
|
.I subscript\^
|
|
for an associative array is denoted by
|
|
a string enclosed between
|
|
.B [
|
|
and
|
|
.BR ] .
|
|
.PP
|
|
Referencing any array without a subscript
|
|
is equivalent to referencing the array with subscript 0.
|
|
.PP
|
|
The
|
|
.I value\^
|
|
of a
|
|
.I variable\^
|
|
may be assigned by writing:
|
|
.RS
|
|
.PP
|
|
.IB vname = value\^\|
|
|
\*(OK
|
|
.IB vname = value\^
|
|
\*(CK .\|.\|.
|
|
.RE
|
|
.PP
|
|
.PD 0
|
|
or
|
|
.RS
|
|
.PP
|
|
.IB vname [ subscript ]= value\^\|
|
|
\*(OK
|
|
.IB vname [ subscript ]= value\^
|
|
\*(CK .\|.\|.
|
|
.RE
|
|
Note that no space is allowed before or after the
|
|
.BR = .
|
|
.PP
|
|
.PD 0
|
|
A
|
|
.I nameref\^
|
|
is a variable that is a reference to another variable.
|
|
A nameref is created with the
|
|
.B \-n
|
|
attribute of
|
|
.B typeset .
|
|
The value of the variable at the time of the
|
|
.B typeset
|
|
command becomes the variable that will be referenced whenever
|
|
the nameref variable is used.
|
|
The name of a nameref variable cannot contain a \fB\s+2.\s-2\fP.
|
|
When a variable or function name contains a \fB\s+2.\s-2\fP, and the portion
|
|
of the name up to the first \fB\s+2.\s-2\fP matches the
|
|
name of a nameref, the variable referred to is obtained by
|
|
replacing the nameref portion with the name of the variable
|
|
referenced by the nameref.
|
|
A nameref provides a convenient way to refer to the variable
|
|
inside a function whose name is passed as an argument to a function.
|
|
For example, if the name of a variable is passed as the first
|
|
argument to a function, the command
|
|
.RS
|
|
.PP
|
|
typeset \-n var=$1
|
|
.RE
|
|
.PP
|
|
inside the function causes references and assignments to
|
|
.B var
|
|
to be references and assignments to the variable whose
|
|
name has been passed to the function.
|
|
.PP
|
|
If either of the floating point attributes,
|
|
.BR \-E ,
|
|
or
|
|
.BR \-F ,
|
|
or the integer attribute,
|
|
.BR \-i ,
|
|
is set for
|
|
.IR vname ,
|
|
then the
|
|
.I value\^
|
|
is subject to arithmetic evaluation as described below.
|
|
.PP
|
|
Positional parameters,
|
|
parameters denoted by a number,
|
|
may be assigned values with the
|
|
.B set\^
|
|
special built-in command.
|
|
Parameter
|
|
.B $0
|
|
is set from argument zero when the shell
|
|
is invoked.
|
|
.PP
|
|
The character
|
|
.B $
|
|
is used to introduce substitutable
|
|
.IR parameters .
|
|
.TP
|
|
\f3${\fP\f2parameter\^\fP\f3}\fP
|
|
The shell
|
|
reads all the characters from
|
|
.B ${
|
|
to the matching
|
|
.B }
|
|
as part of the same word even if it contains
|
|
braces or metacharacters.
|
|
The value, if any, of the parameter is substituted.
|
|
The braces are required when
|
|
.I parameter\^
|
|
is followed by a letter, digit, or underscore
|
|
that is not to be interpreted as part of its name,
|
|
when the variable name contains a \fB\s+2.\s-2\fP,
|
|
or when a variable is subscripted.
|
|
If
|
|
.I parameter\^
|
|
is one or more digits then it is a positional parameter.
|
|
A positional parameter of more than one digit must be
|
|
enclosed in braces.
|
|
If
|
|
.I parameter\^
|
|
is
|
|
.B \(**
|
|
or
|
|
.BR @ ,
|
|
then all the positional
|
|
parameters, starting with
|
|
.BR $1 ,
|
|
are substituted
|
|
(separated by a field separator character).
|
|
If an array
|
|
.I vname\^
|
|
with subscript
|
|
.B \(**
|
|
or
|
|
.B @
|
|
is used,
|
|
then the value
|
|
for each of the
|
|
elements
|
|
is substituted
|
|
(separated by a field separator character).
|
|
.TP
|
|
\f3${#\fP\f2parameter\^\fP\f3}\fP
|
|
If
|
|
.I parameter\^
|
|
is
|
|
.B \(**
|
|
or
|
|
.BR @ ,
|
|
the number of positional parameters is substituted.
|
|
Otherwise, the length of the value of the
|
|
.I parameter\^
|
|
is substituted.
|
|
.TP
|
|
\f3${#\fP\f2vname\fP\f3[*]}\fP
|
|
The number of elements in the array
|
|
.I vname\^
|
|
is substituted.
|
|
.TP
|
|
\f3${!\fP\f2vname\^\fP\f3}\fP
|
|
Expands to the name of the variable referred to by
|
|
.IR vname .
|
|
This will be
|
|
.I vname\^
|
|
except when
|
|
.I vname\^
|
|
is a name reference.
|
|
.TP
|
|
\f3${!\fP\f2vname\^\fP\f3[\f2subscript\^\f3]}\fP
|
|
Expands to name of the subscript unless
|
|
.I subscript\^
|
|
is
|
|
.BR * ,
|
|
or
|
|
.BR @ .
|
|
When
|
|
.I subscript\^
|
|
is
|
|
.BR * ,
|
|
the list of array subscripts for \f2vname\^\fP
|
|
is generated.
|
|
For a variable that is not an array, the value is 0 if the variable
|
|
is set. Otherwise it is null.
|
|
When
|
|
.I subscript\^
|
|
is
|
|
.BR @ ,
|
|
same as above, except that when used in double quotes,
|
|
each array subscript yields a separate
|
|
argument.
|
|
.TP
|
|
\f3${!\fP\f2prefix\^\fP\f3*}\fP
|
|
Expands to the names of the variables whose names begin with
|
|
.IR prefix .
|
|
.TP
|
|
\f3${\fP\f2parameter\^\fP\f3:\-\fP\f2word\^\fP\f3}\fP
|
|
If
|
|
.I parameter\^
|
|
is set and is non-null then substitute its value;
|
|
otherwise substitute
|
|
.IR word .
|
|
.TP
|
|
\f3${\fP\f2parameter\^\fP\f3:=\fP\f2word\^\fP\f3}\fP
|
|
If
|
|
.I parameter\^
|
|
is not set or is null then set it to
|
|
.IR word ;
|
|
the value of the parameter is then substituted.
|
|
Positional parameters may not be assigned to
|
|
in this way.
|
|
.TP
|
|
\f3${\fP\f2parameter\^\fP\f3:?\fP\f2word\^\fP\f3}\fP
|
|
If
|
|
.I parameter\^
|
|
is set and is non-null then substitute its value;
|
|
otherwise, print
|
|
.I word\^
|
|
and exit from the shell.
|
|
If
|
|
.I word\^
|
|
is omitted then a standard message is printed.
|
|
.TP
|
|
\f3${\fP\f2parameter\^\fP\f3:+\fP\f2word\^\fP\f3}\fP
|
|
If
|
|
.I parameter\^
|
|
is set and is non-null then substitute
|
|
.IR word ;
|
|
otherwise substitute nothing.
|
|
.TP
|
|
.PD 0
|
|
\f3${\fP\f2parameter\^\fP\f3:\fP\f2offset\^\fP\f3:\fP\f2length\^\fP\f3}\fP
|
|
.TP
|
|
\f3${\fP\f2parameter\^\fP\f3:\fP\f2offset\^\fP\f3}\fP
|
|
Expands to the portion of the value of
|
|
.I parameter\^
|
|
starting at the character determined by expanding
|
|
.I offset\^
|
|
as an arithmetic expression and consisting of the
|
|
number of characters determined by the arithmetic expression
|
|
defined by
|
|
.IR length.
|
|
In the second form, the remainder of the value is used.
|
|
If
|
|
.I parameter\^
|
|
is
|
|
.B \(**
|
|
or
|
|
.BR @ ,
|
|
or is an array name indexed by
|
|
.B \(**
|
|
or
|
|
.BR @ ,
|
|
then
|
|
.I offset\^
|
|
and
|
|
.I length\^
|
|
refer to the array index and number
|
|
of elements respectively.
|
|
.TP
|
|
.PD 0
|
|
\f3${\fP\f2parameter\^\fP\f3#\fP\f2pattern\^\fP\f3}\fP
|
|
.TP
|
|
\f3${\fP\f2parameter\^\fP\f3##\fP\f2pattern\^\fP\f3}\fP
|
|
.PD
|
|
If
|
|
the shell
|
|
.I pattern\^
|
|
matches the beginning of the value of
|
|
.IR parameter ,
|
|
then the value of
|
|
this expansion is the value of the
|
|
.I parameter\^
|
|
with the matched portion deleted;
|
|
otherwise the value of this
|
|
.I parameter\^
|
|
is substituted.
|
|
In the first form the smallest matching pattern is deleted and in the
|
|
second form the largest matching pattern is deleted.
|
|
When
|
|
.I parameter\^
|
|
is
|
|
.BR @ ,
|
|
.BR * ,
|
|
or an array variable with subscript
|
|
.BR @ ,
|
|
or
|
|
.BR * ,
|
|
the substring operation is applied to each element in turn.
|
|
.TP
|
|
.PD 0
|
|
\f3${\fP\f2parameter\^\fP\f3%\fP\f2pattern\^\fP\f3}\fP
|
|
.TP
|
|
\f3${\fP\f2parameter\^\fP\f3%%\fP\f2pattern\^\fP\f3}\fP
|
|
.PD
|
|
If
|
|
the shell
|
|
.I pattern\^
|
|
matches the end of the value of
|
|
.IR parameter ,
|
|
then the value of
|
|
this expansion is the value of the
|
|
.I parameter\^
|
|
with the matched part deleted;
|
|
otherwise substitute the value of
|
|
.IR parameter .
|
|
In the first form the smallest matching pattern is deleted and in the
|
|
second form the largest matching pattern is deleted.
|
|
When
|
|
.I parameter\^
|
|
is
|
|
.BR @ ,
|
|
.BR * ,
|
|
or an array variable with subscript
|
|
.BR @ ,
|
|
or
|
|
.BR * ,
|
|
the substring operation is applied to each element in turn.
|
|
.TP
|
|
.PD 0
|
|
\f3${\fP\f2parameter\^\fP\f3/\fP\f2pattern\^\fP\f3/\f2string\^\fP\f3}\fP
|
|
.TP
|
|
\f3${\fP\f2parameter\^\fP\f3//\fP\f2pattern\^\fP\f3/\f2string\^\fP\f3}\fP
|
|
.PD
|
|
Expands
|
|
.I parameter\^
|
|
and replaces
|
|
.I pattern\^
|
|
with the given
|
|
.IR string.
|
|
In the first form,
|
|
only the first occurrence of
|
|
.I pattern\^
|
|
is replaced.
|
|
In the second form,
|
|
each match for
|
|
.I pattern\^
|
|
is replaced by the given
|
|
.IR string.
|
|
When
|
|
.I string\^
|
|
is null, the
|
|
.I pattern\^
|
|
will be deleted and the
|
|
.B /
|
|
in front of
|
|
.I string\^
|
|
may be omitted.
|
|
When
|
|
.I parameter\^
|
|
is
|
|
.BR @ ,
|
|
.BR * ,
|
|
or an array variable with subscript
|
|
.BR @ ,
|
|
or
|
|
.BR * ,
|
|
the substitution operation is applied to each element in turn.
|
|
.PP
|
|
In the above,
|
|
.I word\^
|
|
is not evaluated unless it is
|
|
to be used as the substituted string,
|
|
so that, in the following example,
|
|
.B pwd\^
|
|
is executed only if
|
|
.B d\^
|
|
is not set or is null:
|
|
.RS
|
|
.PP
|
|
print \|${d:\-\^$(\^pwd\^)\^}
|
|
.RE
|
|
.PP
|
|
If the colon (
|
|
.B : )
|
|
is omitted from the above expressions,
|
|
then the shell only checks whether
|
|
.I parameter\^
|
|
is set or not.
|
|
.PP
|
|
The following
|
|
parameters
|
|
are automatically set by the shell:
|
|
.RS
|
|
.PD 0
|
|
.TP
|
|
.B #
|
|
The number of positional parameters in decimal.
|
|
.TP
|
|
.B \-
|
|
Options supplied to the shell on invocation or by
|
|
the
|
|
.B set
|
|
command.
|
|
.TP
|
|
.B ?
|
|
The decimal value returned by the last executed command.
|
|
.TP
|
|
.B $
|
|
The process number of this shell.
|
|
.TP
|
|
.B _
|
|
Initially, the value of
|
|
.B _
|
|
is an absolute pathname of the shell or script being executed
|
|
as passed in the
|
|
.IR environment .
|
|
Subsequently it is assigned the last argument of the previous command.
|
|
This parameter is not set for commands which are asynchronous.
|
|
This parameter is also used to hold the name of the matching
|
|
.B
|
|
.SM MAIL
|
|
file when checking for mail.
|
|
.TP
|
|
.B !
|
|
The process number of the last background command invoked.
|
|
.TP
|
|
.B .sh.edchar
|
|
This variable contains the value of the keyboard character
|
|
(or sequence of characters if the first character is an ESC, ascii
|
|
.B 033 )
|
|
that has
|
|
been entered when processing a
|
|
.B
|
|
.SM KEYBD
|
|
trap.
|
|
If the value is changed as part of the trap action, then the new
|
|
value replaces the key (or key sequence) that caused the trap.
|
|
.TP
|
|
.B .sh.edcol
|
|
The character position of the cursor at the time of the most recent
|
|
.B
|
|
.SM KEYBD
|
|
trap.
|
|
.TP
|
|
.B .sh.edmode
|
|
The value is set to ESC when processing a
|
|
.B
|
|
.SM KEYBD
|
|
trap while in
|
|
.B vi
|
|
insert mode. (See
|
|
.I "Vi Editing Mode"\^
|
|
below.)
|
|
Otherwise,
|
|
.B .sh.edmode
|
|
is null when processing a
|
|
.B
|
|
.SM KEYBD
|
|
trap.
|
|
.TP
|
|
.B .sh.edtext
|
|
The characters in the input buffer at the time of the most recent
|
|
.B
|
|
.SM KEYBD
|
|
trap.
|
|
The value is null when not processing a
|
|
.B
|
|
.SM KEYBD
|
|
trap.
|
|
.TP
|
|
.B .sh.name
|
|
Set to the name of the variable at the time of a
|
|
.B set
|
|
or
|
|
.B get
|
|
discipline is invoked.
|
|
.TP
|
|
.B .sh.subscript
|
|
Set to the name subscript of the variable at the time of a
|
|
.B set
|
|
or
|
|
.B get
|
|
discipline is invoked.
|
|
.TP
|
|
.B .sh.value
|
|
Set to the value of the variable at the time of a
|
|
.B set
|
|
discipline.
|
|
.TP
|
|
.B .sh.version
|
|
Set to a value that identifies the version of this shell.
|
|
.TP
|
|
.B
|
|
.SM LINENO
|
|
The line number of the current line within the script or
|
|
function being executed.
|
|
.TP
|
|
.B
|
|
.SM OLDPWD
|
|
The previous working directory set by the
|
|
.B cd
|
|
command.
|
|
.TP
|
|
.B
|
|
.SM OPTARG
|
|
The value of the last option argument processed by the
|
|
.B getopts
|
|
built-in command.
|
|
.TP
|
|
.B
|
|
.SM OPTIND
|
|
The index of the last option argument processed by the
|
|
.B getopts
|
|
built-in command.
|
|
.TP
|
|
.B
|
|
.SM PPID
|
|
The process number of the parent of the shell.
|
|
.TP
|
|
.B
|
|
.SM PWD
|
|
The present working directory set by the
|
|
.B cd
|
|
command.
|
|
.TP
|
|
.B
|
|
.SM RANDOM
|
|
Each time this variable is referenced, a random integer,
|
|
uniformly distributed between 0 and 32767, is generated.
|
|
The sequence of random numbers can be initialized by assigning
|
|
a numeric value to
|
|
.SM
|
|
.BR RANDOM .
|
|
.TP
|
|
.B
|
|
.SM REPLY
|
|
This variable is set by the
|
|
.B select
|
|
statement and by
|
|
the
|
|
.B read
|
|
built-in command when no arguments are supplied.
|
|
.TP
|
|
.B
|
|
.SM SECONDS
|
|
Each time this variable is referenced, the number of
|
|
seconds since shell invocation is returned.
|
|
If this variable is
|
|
assigned a value, then the value returned upon reference will
|
|
be the value that was assigned plus the number of seconds since the assignment.
|
|
.PD
|
|
.RE
|
|
.PP
|
|
The following
|
|
variables
|
|
are used by the shell:
|
|
.RS
|
|
.PD 0
|
|
.TP
|
|
.B
|
|
.SM CDPATH
|
|
The search path for the
|
|
.B cd
|
|
command.
|
|
.TP
|
|
.B
|
|
.SM COLUMNS
|
|
If this variable is set,
|
|
the value is used to define the width of the edit window
|
|
for the shell edit modes and for printing
|
|
.B select
|
|
lists.
|
|
.TP
|
|
.B
|
|
.SM EDITOR
|
|
If the value of this variable ends in
|
|
.IR emacs ,
|
|
.IR gmacs ,
|
|
or
|
|
.I vi
|
|
and the
|
|
.B
|
|
.SM VISUAL
|
|
variable is not set,
|
|
then the corresponding option
|
|
(see Special Command
|
|
.B set
|
|
below)
|
|
will be turned on.
|
|
.TP
|
|
.SM
|
|
.B ENV
|
|
If this variable is set, then
|
|
parameter expansion, command substitution, and arithmetic substitution,
|
|
are performed on
|
|
the value to generate
|
|
the pathname of the script that will be
|
|
executed when the shell
|
|
is invoked.
|
|
(See
|
|
.I Invocation\^
|
|
below.)
|
|
This file is typically used for
|
|
.I alias
|
|
and
|
|
.I function
|
|
definitions.
|
|
.TP
|
|
.B
|
|
.SM FCEDIT
|
|
Obsolete name for
|
|
the default editor name for the
|
|
.B hist
|
|
command.
|
|
.B
|
|
.SM FCEDIT
|
|
is not used when
|
|
.B
|
|
.SM HISTEDIT
|
|
is set.
|
|
.TP
|
|
.SM
|
|
.B FIGNORE
|
|
A pattern that defines the set of filenames that will be
|
|
ignored when performing filename matching.
|
|
.TP
|
|
.SM
|
|
.B FPATH
|
|
The search path for function definitions.
|
|
This path is searched when a function with the
|
|
.B \-u
|
|
attribute is referenced and when a command is not found.
|
|
If an executable file is found, then it is read and executed
|
|
in the current environment.
|
|
.TP
|
|
.SM
|
|
.B IFS
|
|
Internal field separators,
|
|
normally
|
|
.BR space ,
|
|
.BR tab ,
|
|
and
|
|
.B new-line
|
|
that are used to separate the results of
|
|
command substitution or parameter expansion
|
|
and to separate fields with the built-in command
|
|
.BR read .
|
|
The first character of the
|
|
.SM
|
|
.B IFS
|
|
variable is used to separate arguments for the
|
|
.B
|
|
"$\(**"
|
|
substitution. (See
|
|
.I Quoting
|
|
below.)
|
|
Each single occurrence of
|
|
an
|
|
.SM
|
|
.B IFS
|
|
character in the string to be split,
|
|
except
|
|
.BR space ,
|
|
.BR tab ,
|
|
and
|
|
.BR new-line ,
|
|
separates a field.
|
|
One or more
|
|
.BR space ,
|
|
.BR tab ,
|
|
or
|
|
.B new-line
|
|
characters separate a field.
|
|
.TP
|
|
.B
|
|
.SM HISTEDIT
|
|
Name for
|
|
the default editor name for the
|
|
.B hist
|
|
command.
|
|
.TP
|
|
.SM
|
|
.B HISTFILE
|
|
If this variable is set when the shell is invoked, then
|
|
the value is the pathname of the file that will be
|
|
used to store the command history.
|
|
(See
|
|
.I "Command re-entry\^"
|
|
below.)
|
|
.TP
|
|
.SM
|
|
.B HISTSIZE
|
|
If this variable is set when the shell is invoked, then
|
|
the number of previously entered commands that
|
|
are accessible by this shell
|
|
will be greater than or equal to this number.
|
|
The default is 128.
|
|
.TP
|
|
.B
|
|
.SM HOME
|
|
The default argument (home directory) for the
|
|
.B cd
|
|
command.
|
|
.TP
|
|
.B
|
|
.SM LINES
|
|
If this variable is set,
|
|
the value is used to determine the column length for printing
|
|
.B select
|
|
lists.
|
|
Select lists will print vertically until about two-thirds of
|
|
.B
|
|
.SM LINES
|
|
lines are filled.
|
|
.TP
|
|
.B
|
|
.SM MAIL
|
|
If this variable is set to the name of a mail file
|
|
.I and\^
|
|
the
|
|
.B
|
|
.SM MAILPATH
|
|
variable is not set,
|
|
then the shell informs the user of arrival of mail
|
|
in the specified file.
|
|
.TP
|
|
.B
|
|
.SM MAILCHECK
|
|
This variable specifies how often (in seconds) the
|
|
shell will check for changes in the modification time
|
|
of any of the files specified by the
|
|
.B
|
|
.SM MAILPATH
|
|
or
|
|
.B
|
|
.SM MAIL
|
|
variables.
|
|
The default value is 600 seconds.
|
|
When the time has elapsed
|
|
the shell will check before issuing the next prompt.
|
|
.TP
|
|
.B
|
|
.SM MAILPATH
|
|
A colon (
|
|
.B :
|
|
)
|
|
separated list of file names.
|
|
If this variable is set
|
|
then the shell informs the user of
|
|
any modifications to the specified files
|
|
that have occurred within the last
|
|
.B
|
|
.SM MAILCHECK
|
|
seconds.
|
|
Each file name can be followed by a
|
|
.B ?
|
|
and a message that will be printed.
|
|
The message will undergo parameter expansion, command substitution,
|
|
and arithmetic substitution
|
|
with the variable
|
|
.B $_
|
|
defined as the name of the file that has changed.
|
|
The default message is
|
|
.I you have mail in $_\^.
|
|
.TP
|
|
.B
|
|
.SM PATH
|
|
The search path for commands (see
|
|
.I Execution\^
|
|
below).
|
|
The user may not change
|
|
.B \s-1PATH\s+1
|
|
if executing under
|
|
.if \nZ=0 .B rsh
|
|
.if \nZ=1 .B rksh
|
|
(except in
|
|
.BR .profile\^).
|
|
.TP
|
|
.SM
|
|
.B PS1
|
|
The value of this variable is expanded for parameter
|
|
expansion, command substitution, and arithmetic substitution to define the
|
|
primary prompt string which by default is
|
|
.RB `` "$\|\|\|" ''.
|
|
The character
|
|
.B !
|
|
in the primary prompt string is replaced by the
|
|
.I command\^
|
|
number (see
|
|
.I "Command Re-entry"\^
|
|
below).
|
|
Two successive occurrences of
|
|
.B !
|
|
will produce a single
|
|
.B !
|
|
when the prompt string is printed.
|
|
.TP
|
|
.SM
|
|
.B PS2
|
|
Secondary prompt string, by default
|
|
.RB `` "> \|" ''.
|
|
.TP
|
|
.SM
|
|
.B PS3
|
|
Selection prompt string
|
|
used within a
|
|
.B select
|
|
loop, by default
|
|
.RB `` "#? \|" ''.
|
|
.TP
|
|
.SM
|
|
.B PS4
|
|
The value of this variable is expanded for parameter evaluation,
|
|
command substitution, and arithmetic substitution
|
|
and precedes each line of an execution trace.
|
|
If omitted, the execution trace prompt is
|
|
.RB `` "+ \|" ''.
|
|
.TP
|
|
.SM
|
|
.B SHELL
|
|
The pathname of the
|
|
.I shell\^
|
|
is kept in the environment.
|
|
At invocation, if the basename of this variable is
|
|
.BR rsh ,
|
|
.BR rksh ,
|
|
or
|
|
.BR krsh ,
|
|
then the shell becomes restricted.
|
|
.TP
|
|
.B
|
|
.SM TMOUT
|
|
If set to a value greater than zero,
|
|
the
|
|
.B read
|
|
built-in command terminates after
|
|
.B
|
|
.SM TMOUT
|
|
seconds when input is from a terminal.
|
|
Otherwise,
|
|
the shell will terminate if a line is not entered within
|
|
the prescribed number of seconds while reading from a terminal.
|
|
(Note that the shell can be compiled with a maximum bound
|
|
for this value which cannot be exceeded.)
|
|
.TP
|
|
.B
|
|
.SM VISUAL
|
|
If the value of this variable ends in
|
|
.IR emacs ,
|
|
.IR gmacs ,
|
|
or
|
|
.I vi
|
|
then the corresponding option
|
|
(see Special Command
|
|
.B set
|
|
below)
|
|
will be turned on.
|
|
.PD
|
|
.RE
|
|
.PP
|
|
The shell gives default values to
|
|
\f3\s-1PATH\s+1\fP, \f3\s-1PS1\s+1\fP, \f3\s-1PS2\s+1\fP,
|
|
\f3\s-1PS3\s+1\fP, \f3\s-1PS4\s+1\fP, \f3\s-1MAILCHECK\s+1\fP, \f3\s-1HISTEDIT\s+1\fP,
|
|
\f3\s-1TMOUT\s+1\fP and \f3\s-1IFS\s+1\fP,
|
|
while
|
|
.SM
|
|
.BR HOME ,
|
|
.SM
|
|
.BR SHELL ,
|
|
.SM
|
|
.BR ENV ,
|
|
and
|
|
.SM
|
|
.B MAIL
|
|
are
|
|
not set at all by the shell (although
|
|
.SM
|
|
.B HOME
|
|
.I is\^
|
|
set by
|
|
.IR login (1)).
|
|
On some systems
|
|
.SM
|
|
.B MAIL
|
|
and
|
|
.SM
|
|
.B SHELL
|
|
are also
|
|
set by
|
|
.IR login (1).
|
|
.SS Field Splitting
|
|
After parameter expansion and command substitution,
|
|
the results of substitutions are scanned for the field separator
|
|
characters (those found in
|
|
.SM
|
|
.B IFS\^\c
|
|
)
|
|
and split into distinct fields where such characters are found.
|
|
Explicit null fields (\^\f3"\^"\fP or \f3\*\(fm\^\*\(fm\fP\^) are retained.
|
|
Implicit null fields
|
|
(those resulting from
|
|
.I parameters\^
|
|
that have no values or command substitutions with no output) are removed.
|
|
.SS File Name Generation.
|
|
Following splitting, each field is scanned for the characters
|
|
.BR \(** ,
|
|
.BR ? ,
|
|
.BR ( ,
|
|
and
|
|
.B \*(OK\^
|
|
unless the
|
|
.B \-f
|
|
option has been set.
|
|
If one of these characters appears
|
|
then the word is regarded as a
|
|
.IR pattern .
|
|
Each file name component that contains any pattern character
|
|
is replaced with a lexicographically sorted set of names
|
|
that matches the pattern
|
|
from
|
|
that directory.
|
|
If no file name is found that matches the pattern, then
|
|
that component of the filename is left unchanged.
|
|
If
|
|
.SM
|
|
.B FIGNORE
|
|
is set,
|
|
then each file name component
|
|
that matches the pattern defined by the value of
|
|
.SM
|
|
.B FIGNORE
|
|
is ignored when generating the matching filenames.
|
|
The names
|
|
.B .
|
|
and
|
|
.B ..
|
|
are also ignored.
|
|
If
|
|
.SM
|
|
.B FIGNORE
|
|
is not set,
|
|
the character
|
|
.B .
|
|
at the start of each file name component
|
|
will be ignored unless the first character of the pattern
|
|
corresponding to this component is the character
|
|
.BR .
|
|
itself.
|
|
Note, that for other
|
|
uses of pattern matching the
|
|
.B /
|
|
and
|
|
.B .
|
|
are not treated specially.
|
|
.PP
|
|
.PD 0
|
|
.RS
|
|
.TP
|
|
.B \(**
|
|
Matches any string, including the null string.
|
|
.TP
|
|
.B ?
|
|
Matches any single character.
|
|
.TP
|
|
.BR \*(OK \^.\|.\|.\^ \*(CK
|
|
Matches any one of the enclosed characters.
|
|
A pair of characters separated by
|
|
.B \-
|
|
matches any
|
|
character lexically between the pair, inclusive.
|
|
If the first character following the opening
|
|
.B \*(OK\^
|
|
is a
|
|
.B !
|
|
then any character not enclosed is matched.
|
|
A
|
|
.B \-
|
|
can be included in the character set by putting it as the
|
|
first or last character.
|
|
.br
|
|
Within
|
|
.B \*(OK\^
|
|
and
|
|
.B \*(CK\^
|
|
character classes can be specified with the syntax
|
|
\f3[:\fP\f2class\fP\f3:]\fP
|
|
where class is one of the following:
|
|
.if t .RS
|
|
.PP
|
|
.B
|
|
.if n alnum alpha cntrl digit graph lower print punct space upper xdigit
|
|
.if t alnum alpha cntrl digit graph lower print punct space upper xdigit
|
|
.if t .RE
|
|
.PD
|
|
.RE
|
|
A
|
|
.I pattern-list
|
|
is a list of one or more patterns separated from each other
|
|
with a
|
|
.BR \(bv .
|
|
Composite patterns can be formed with one or more of the following:
|
|
.PD 0
|
|
.RS
|
|
.TP
|
|
\f3?(\fP\f2pattern-list\^\fP\f3)\fP
|
|
Optionally matches any one of the given patterns.
|
|
.TP
|
|
\f3*(\fP\f2pattern-list\^\fP\f3)\fP
|
|
Matches zero or more occurrences of the given patterns.
|
|
.TP
|
|
\f3+(\fP\f2pattern-list\^\fP\f3)\fP
|
|
Matches one or more occurrences of the given patterns.
|
|
.TP
|
|
\f3\&@\&(\fP\f2pattern-list\^\fP\f3)\fP
|
|
Matches exactly one of the given patterns.
|
|
.br
|
|
.TP
|
|
\f3!(\fP\f2pattern-list\^\fP\f3)\fP
|
|
Matches anything except one of the given patterns.
|
|
.PD
|
|
.RE
|
|
.SS Quoting.
|
|
Each of the
|
|
.I metacharacters\^
|
|
listed earlier (see
|
|
.I Definitions\^
|
|
above)
|
|
has a special meaning to the shell
|
|
and causes termination of a word unless quoted.
|
|
A character may be
|
|
.I quoted\^
|
|
(i.e., made to stand for itself)
|
|
by preceding
|
|
it with a
|
|
.BR \e .
|
|
The pair
|
|
.B \enew-line
|
|
is removed.
|
|
All characters enclosed between a pair of single quote marks
|
|
(\^\f3\(fm\^\(fm\fP\^)
|
|
that is not preceded by a
|
|
.B $
|
|
are quoted.
|
|
A single quote cannot appear within the single quotes.
|
|
A single quoted string preceded an unquoted
|
|
.B $
|
|
is processed as an ANSI-C string
|
|
except that
|
|
.B \e0
|
|
within the string causes the remainder of the
|
|
string to be ignored and
|
|
.B \eE
|
|
is equivalent to the escape characer
|
|
(ascii
|
|
.BR 033 ).
|
|
Inside double quote marks
|
|
(\f3"\^"\fP),
|
|
parameter and command substitution occur and
|
|
.B \e
|
|
quotes the characters
|
|
.BR \e ,
|
|
.BR \*` ,
|
|
\f3"\fP,
|
|
and
|
|
.BR $ .
|
|
The meaning of
|
|
.B "$\(**"
|
|
and
|
|
.B "$@"
|
|
is identical when not quoted or when used as a variable assignment value
|
|
or as a file name.
|
|
However, when used as a command argument,
|
|
.B
|
|
"$\(**"
|
|
is equivalent to
|
|
\f3"$1\fP\f2d\fP\f3\|$2\fP\f2d\fP\|.\|.\|.\f3"\fP,
|
|
where
|
|
.I d
|
|
is the first character of the
|
|
.SM
|
|
.B IFS
|
|
variable, whereas
|
|
.B
|
|
"$@"
|
|
is equivalent to
|
|
.B
|
|
"$1"\|
|
|
.B
|
|
"$2"\|
|
|
\&.\|.\|.\^.
|
|
Inside grave quote marks
|
|
(\f3\*`\^\*`\fP),
|
|
.B \e
|
|
quotes the characters
|
|
.BR \e ,
|
|
.BR \*` ,
|
|
and
|
|
.BR $ .
|
|
If the grave quotes occur within double quotes then
|
|
.B \e
|
|
also quotes the character
|
|
\f3"\fP.
|
|
.PP
|
|
The special meaning of reserved words or aliases can be removed by quoting any
|
|
character of the reserved word.
|
|
The recognition of function names or built-in command names listed below
|
|
cannot be altered by quoting them.
|
|
.SS Arithmetic Evaluation.
|
|
The shell performs arithmetic evaluation for
|
|
arithmetic substitution, to evaluate an arithmetic command,
|
|
to evaluate an indexed array subscript,
|
|
and to evaluate arguments to
|
|
the built-in commands
|
|
.B shift\^
|
|
and
|
|
.BR let .
|
|
Evaluations are performed using
|
|
double precision floating point
|
|
arithmetic.
|
|
Floating point constants follow the ANSI-C programming language
|
|
conventions.
|
|
Integer constants are of the form
|
|
\*(OK\f2base\f3#\^\f1\*(CK\f2n\^\fP
|
|
where
|
|
.I base\^
|
|
is a decimal number between two and sixty-four
|
|
representing the arithmetic base
|
|
and
|
|
.I n\^
|
|
is a number in that base.
|
|
The digits above 9 are represented
|
|
by the lower case characters, the upper case characters,
|
|
.BR @ ,
|
|
and
|
|
.B _
|
|
respectively.
|
|
For bases less than 36, upper and lower case
|
|
character can be used interchangeably.
|
|
If
|
|
.I base\^
|
|
is omitted
|
|
then base 10 is used.
|
|
.PP
|
|
An arithmetic expression uses the same syntax, precedence, and
|
|
associativity of
|
|
expression as the C language.
|
|
All the C language operators
|
|
that apply to floating point quantities can be used.
|
|
In addition, when the value of an arithmetic variable
|
|
or sub-expression can be represented as a long integer,
|
|
all C language integer arithmetic operations can be performed.
|
|
Variables can be referenced by name within an arithmetic expression
|
|
without using the parameter expansion syntax.
|
|
When a variable is referenced, its value is evaluated as
|
|
an arithmetic expression.
|
|
The following math library functions can be used with an arithmetic
|
|
expression:
|
|
.if t .RS
|
|
.PP
|
|
.B
|
|
.if n abs acos asin atan cos cosh exp int log sin sinh sqrt tan tanh
|
|
.if t abs acos asin atan cos cosh exp int log sin sinh sqrt tan tanh
|
|
.if t .RE
|
|
.PP
|
|
An internal representation of a
|
|
.I variable\^
|
|
as a double precision floating point can be specified with the
|
|
\f3\-E\fP \*(OK\f2n\^\fP\*(CK
|
|
or
|
|
\f3\-F\fP \*(OK\f2n\^\fP\*(CK
|
|
option of the
|
|
.B typeset
|
|
special built-in command.
|
|
The
|
|
.B \-E
|
|
option causes the expansion of the value to be represented using
|
|
scientific notation when it is expanded.
|
|
The optional option argument
|
|
.I n
|
|
defines the number of significant figures.
|
|
The
|
|
.B \-F
|
|
option causes the expansion to be represented as a floating decimal number
|
|
when it is expanded.
|
|
The optional option argument
|
|
.I n
|
|
defines the number of places after the decimal point in this case.
|
|
.PP
|
|
An internal integer representation of a
|
|
.I variable\^
|
|
can be specified with the
|
|
\f3\-i\fP \*(OK\f2n\^\fP\*(CK
|
|
option of the
|
|
.B typeset
|
|
special built-in command.
|
|
The optional option argument
|
|
.I n
|
|
specifies an arithmetic base to be used when expanding the variable.
|
|
If you do not specify an arithmetic base,
|
|
the first assignment to the
|
|
variable determines the arithmetic base.
|
|
.PP
|
|
Arithmetic evaluation is performed on the value of each
|
|
assignment to a variable with the
|
|
.BR \-E ,
|
|
.BR \-F ,
|
|
or
|
|
.B \-i
|
|
attribute.
|
|
Assigning a floating point number to a
|
|
variable whose type is an integer causes the fractional
|
|
part to be truncated.
|
|
.PP
|
|
.SS Prompting.
|
|
When used interactively,
|
|
the shell prompts with the value of
|
|
.SM
|
|
.B PS1
|
|
after expanding it for parameter expansion, command substitution, and
|
|
arithmetic substitution,
|
|
before reading a command.
|
|
In addition, each single
|
|
.B !
|
|
in the prompt is replaced by the command number.
|
|
A
|
|
.B !!
|
|
is required to place
|
|
.B !
|
|
in the prompt.
|
|
If at any time a new-line is typed and further input is needed
|
|
to complete a command, then the secondary prompt
|
|
(i.e., the value of
|
|
.BR \s-1PS2\s+1 )
|
|
is issued.
|
|
.SS Conditional Expressions.
|
|
A
|
|
.I "conditional expression"
|
|
is used with the
|
|
.B [[
|
|
compound command to test attributes of files and to compare
|
|
strings.
|
|
Field splitting and file name generation are
|
|
not performed on the words between
|
|
.B [[
|
|
and
|
|
.BR ]] .
|
|
Each expression can be constructed from one or more
|
|
of the following unary or binary expressions:
|
|
.PD 0
|
|
.TP
|
|
\f2string\fP
|
|
True, if
|
|
.I string
|
|
is not null.
|
|
.TP
|
|
\f3\-a\fP \f2file\fP
|
|
Same is \f3\-e\fP below.
|
|
This is obsolete.
|
|
.TP
|
|
\f3\-b\fP \f2file\fP
|
|
True, if
|
|
.I file
|
|
exists and is a block special file.
|
|
.TP
|
|
\f3\-c\fP \f2file\fP
|
|
True, if
|
|
.I file
|
|
exists and is a character special file.
|
|
.TP
|
|
\f3\-d\fP \f2file\fP
|
|
True, if
|
|
.I file
|
|
exists and is a directory.
|
|
.TP
|
|
\f3\-e\fP \f2file\fP
|
|
True, if
|
|
.I file
|
|
exists.
|
|
.TP
|
|
\f3\-f\fP \f2file\fP
|
|
True, if
|
|
.I file
|
|
exists and is an ordinary file.
|
|
.TP
|
|
\f3\-g\fP \f2file\fP
|
|
True, if
|
|
.I file
|
|
exists and is has its setgid bit set.
|
|
.TP
|
|
\f3\-k\fP \f2file\fP
|
|
True, if
|
|
.I file
|
|
exists and is has its sticky bit set.
|
|
.TP
|
|
\f3\-n\fP \f2string\fP
|
|
True, if length of
|
|
.I string
|
|
is non-zero.
|
|
.TP
|
|
\f3\-o\fP \f2option\fP
|
|
True, if option named
|
|
.I option
|
|
is on.
|
|
.TP
|
|
\f3\-p\fP \f2file\fP
|
|
True, if
|
|
.I file
|
|
exists and is a fifo special file or a pipe.
|
|
.TP
|
|
\f3\-r\fP \f2file\fP
|
|
True, if
|
|
.I file
|
|
exists and is readable by current process.
|
|
.TP
|
|
\f3\-s\fP \f2file\fP
|
|
True, if
|
|
.I file
|
|
exists and has size greater than zero.
|
|
.TP
|
|
\f3\-t\fP \f2fildes\fP
|
|
True, if file descriptor number
|
|
.I fildes
|
|
is open and associated with a terminal device.
|
|
.TP
|
|
\f3\-u\fP \f2file\fP
|
|
True, if
|
|
.I file
|
|
exists and is has its setuid bit set.
|
|
.TP
|
|
\f3\-w\fP \f2file\fP
|
|
True, if
|
|
.I file
|
|
exists and is writable by current process.
|
|
.TP
|
|
\f3\-x\fP \f2file\fP
|
|
True, if
|
|
.I file
|
|
exists and is executable by current process.
|
|
If
|
|
.I file
|
|
exists and is a directory, then true if the current process
|
|
has permission to search in the directory.
|
|
.TP
|
|
\f3\-z\fP \f2string\fP
|
|
True, if length of
|
|
.I string
|
|
is zero.
|
|
.TP
|
|
\f3\-L\fP \f2file\fP
|
|
True, if
|
|
.I file
|
|
exists and is a symbolic link.
|
|
.TP
|
|
\f3\-O\fP \f2file\fP
|
|
True, if
|
|
.I file
|
|
exists and is owned by the effective user id of this process.
|
|
.TP
|
|
\f3\-G\fP \f2file\fP
|
|
True, if
|
|
.I file
|
|
exists and its group matches the effective group id of this process.
|
|
.TP
|
|
\f3\-S\fP \f2file\fP
|
|
True, if
|
|
.I file
|
|
exists and is a socket.
|
|
.TP
|
|
\f2file1\fP \f3\-nt\fP \f2file2\fP
|
|
True, if
|
|
.I file1
|
|
exists and is newer than
|
|
.IR file2 .
|
|
.TP
|
|
\f2file1\fP \f3\-ot\fP \f2file2\fP
|
|
True, if
|
|
.I file1
|
|
exists and is older than
|
|
.IR file2 .
|
|
.TP
|
|
\f2file1\fP \f3\-ef\fP \f2file2\fP
|
|
True, if
|
|
.I file1
|
|
and
|
|
.I file2
|
|
exist and refer to the same file.
|
|
.TP
|
|
\f2string\fP \f3==\fP \f2pattern\fP
|
|
True, if
|
|
.I string
|
|
matches
|
|
.IR pattern .
|
|
Any part of
|
|
.I pattern\^
|
|
can be quoted to cause it to be matched as a string.
|
|
.TP
|
|
\f2string\fP \f3=\fP \f2pattern\fP
|
|
Same as \f3==\fP above, but is obsolete.
|
|
.TP
|
|
\f2string\fP \f3!=\fP \f2pattern\fP
|
|
True, if
|
|
.I string
|
|
does not match
|
|
.IR pattern .
|
|
.TP
|
|
\f2string1\fP \f3<\fP \f2string2\fP
|
|
True, if
|
|
.I string1
|
|
comes before
|
|
.I string2
|
|
based on ASCII value of their characters.
|
|
.TP
|
|
\f2string1\fP \f3>\fP \f2string2\fP
|
|
True, if
|
|
.I string1
|
|
comes after
|
|
.I string2
|
|
based on ASCII value of their characters.
|
|
.PP
|
|
The following obsolete arithmetic comparisons are also permitted:
|
|
.PD 0
|
|
.TP
|
|
\f2exp1\fP \f3\-eq\fP \f2exp2\fP
|
|
True, if
|
|
.I exp1
|
|
is equal to
|
|
.IR exp2 .
|
|
.TP
|
|
\f2exp1\fP \f3\-ne\fP \f2exp2\fP
|
|
True, if
|
|
.I exp1
|
|
is not equal to
|
|
.IR exp2 .
|
|
.TP
|
|
\f2exp1\fP \f3\-lt\fP \f2exp2\fP
|
|
True, if
|
|
.I exp1
|
|
is less than
|
|
.IR exp2 .
|
|
.TP
|
|
\f2exp1\fP \f3\-gt\fP \f2exp2\fP
|
|
True, if
|
|
.I exp1
|
|
is greater than
|
|
.IR exp2 .
|
|
.TP
|
|
\f2exp1\fP \f3\-le\fP \f2exp2\fP
|
|
True, if
|
|
.I exp1
|
|
is less than or equal to
|
|
.IR exp2 .
|
|
.TP
|
|
\f2exp1\fP \f3\-ge\fP \f2exp2\fP
|
|
True, if
|
|
.I exp1
|
|
is greater than or equal to
|
|
.IR exp2 .
|
|
.PD
|
|
.PP
|
|
In each of the above expressions, if
|
|
.I file
|
|
is of the form
|
|
\f3/dev/fd/\fP\f2n\fP,
|
|
where
|
|
.I n
|
|
is an integer,
|
|
then the test is applied to the open file whose
|
|
descriptor number is
|
|
.IR n .
|
|
.PP
|
|
A compound expression can be constructed from these primitives by
|
|
using any of the following, listed in decreasing order of precedence.
|
|
.PD 0
|
|
.TP
|
|
\f3(\fP\f2expression\fP\f3)\fP
|
|
True, if
|
|
.I expression
|
|
is true.
|
|
Used to group expressions.
|
|
.TP
|
|
\f3!\fP \f2expression\fP
|
|
True if
|
|
.I expression
|
|
is false.
|
|
.TP
|
|
\f2expression1\fP \f3&&\fP \f2expression2\fP
|
|
True, if
|
|
.I expression1
|
|
and
|
|
.I expression2
|
|
are both true.
|
|
.TP
|
|
\f2expression1\fP \f3\(bv\(bv\fP \f2expression2\fP
|
|
True, if either
|
|
.I expression1
|
|
or
|
|
.I expression2
|
|
is true.
|
|
.PD
|
|
.SS Input/Output.
|
|
Before a command is executed, its input and output
|
|
may be redirected using a special notation interpreted by the shell.
|
|
The following may appear anywhere in a simple-command
|
|
or may precede or follow a
|
|
.I command\^
|
|
and are
|
|
.I not\^
|
|
passed on to the invoked command.
|
|
Command substitution, parameter expansion,
|
|
and arithmetic substitution occur before
|
|
.I word\^
|
|
or
|
|
.I digit\^
|
|
is used except as noted below.
|
|
File name generation
|
|
occurs only if the shell is interactive and
|
|
the pattern matches a single file,
|
|
Field splitting is not performed.
|
|
.TP 14
|
|
.BI < word
|
|
Use file
|
|
.I word\^
|
|
as standard input (file descriptor 0).
|
|
.TP
|
|
.BI > word
|
|
Use file
|
|
.I word\^
|
|
as standard output (file descriptor 1).
|
|
If the file does not exist then it is created.
|
|
If the file exists, and the
|
|
.B noclobber
|
|
option is on,
|
|
this causes an error;
|
|
otherwise, it is truncated to zero length.
|
|
.TP
|
|
.BI >| word
|
|
Sames as
|
|
.BR > ,
|
|
except that it overrides the
|
|
.B noclobber
|
|
option.
|
|
.TP
|
|
.BI >> word
|
|
Use file
|
|
.I word\^
|
|
as standard output.
|
|
If the file exists then output is appended to it (by first seeking to the end-of-file);
|
|
otherwise, the file is created.
|
|
.TP
|
|
.BI <> word
|
|
Open file
|
|
.I word\^
|
|
for reading and writing
|
|
as standard input.
|
|
.TP
|
|
\f3<<\fP\*(OK\f3\-\fP\*(CK\f2word\fP
|
|
The shell input is read up to a line that is the same as
|
|
.IR word
|
|
after any quoting has been removed remove,
|
|
or to an end-of-file.
|
|
No parameter substitution, command substitution, arithmetic substitution or
|
|
file name generation is performed on
|
|
.IR word .
|
|
The resulting document,
|
|
called a
|
|
.IR here-document ,
|
|
becomes
|
|
the standard input.
|
|
If any character of
|
|
.I word\^
|
|
is quoted, then no interpretation
|
|
is placed upon the characters of the document;
|
|
otherwise, parameter expansion, command substitution, and arithmetic
|
|
substitution occur,
|
|
.B \enew-line
|
|
is ignored,
|
|
and
|
|
.B \e
|
|
must be used to quote the characters
|
|
.BR \e ,
|
|
.BR $ ,
|
|
.BR \*` .
|
|
If
|
|
.B \-
|
|
is appended to
|
|
.BR << ,
|
|
then all leading tabs are stripped from
|
|
.I word\^
|
|
and from the document.
|
|
.TP
|
|
.BI <& digit
|
|
The standard input is duplicated from file descriptor
|
|
.I digit
|
|
(see
|
|
.IR dup (2)).
|
|
Similarly for the standard output using
|
|
\f3>&\^\f2digit\fR.
|
|
.TP
|
|
.B <&\-
|
|
The standard input is closed.
|
|
Similarly for the standard output using
|
|
.BR >&\- .
|
|
.TP
|
|
.B <&p
|
|
The input from the co-process is moved to standard input.
|
|
.TP
|
|
.B >&p
|
|
The output to the co-process is moved to standard output.
|
|
.PP
|
|
If one of the above is preceded by a digit,
|
|
then the
|
|
file descriptor number referred to is that specified
|
|
by the digit
|
|
(instead of the default 0 or 1).
|
|
For example:
|
|
.RS
|
|
.PP
|
|
\&.\|.\|. \|2>&1
|
|
.RE
|
|
.PP
|
|
means file descriptor 2 is to be opened
|
|
for writing as a duplicate
|
|
of file descriptor 1.
|
|
.PP
|
|
The order in which redirections are specified is significant.
|
|
The shell evaluates each redirection in terms of the
|
|
.RI ( "file descriptor" ", " file )
|
|
association at the time of evaluation.
|
|
For example:
|
|
.RS
|
|
.PP
|
|
\&.\|.\|. \|1>\f2fname\^\fP 2>&1
|
|
.RE
|
|
.PP
|
|
first associates file descriptor 1 with file
|
|
.IR fname\^ .
|
|
It then associates file descriptor 2 with the file associated with file
|
|
descriptor 1 (i.e.
|
|
.IR fname\^ ).
|
|
If the order of redirections were reversed, file descriptor 2 would be associated
|
|
with the terminal (assuming file descriptor 1 had been) and then file descriptor
|
|
1 would be associated with file
|
|
.IR fname\^ .
|
|
.PP
|
|
If a command is followed by
|
|
.B &
|
|
and job control is not active,
|
|
then the default standard input
|
|
for the command
|
|
is the empty file
|
|
.BR /dev/null .
|
|
Otherwise, the environment for the execution of a command contains the
|
|
file descriptors of the invoking shell as modified by
|
|
input/output specifications.
|
|
.SS Environment.
|
|
The
|
|
.I environment\^
|
|
(see
|
|
.IR environ (7))
|
|
is a list of name-value pairs that is passed to
|
|
an executed program in the same way as a normal argument list.
|
|
The names must be
|
|
.I identifiers\^
|
|
and the values are character strings.
|
|
The shell interacts with the environment in several ways.
|
|
On invocation, the shell scans the environment
|
|
and creates a
|
|
variable
|
|
for each name found,
|
|
giving it the corresponding value and attributes and marking it
|
|
.IR export .
|
|
Executed commands inherit the environment.
|
|
If the user modifies the values of these
|
|
variables
|
|
or creates new ones,
|
|
using the
|
|
.B export
|
|
or
|
|
.B typeset \-x
|
|
commands they become part of the
|
|
environment.
|
|
The environment seen by any executed command is thus composed
|
|
of any name-value pairs originally inherited by the shell,
|
|
whose values may be modified by the current shell,
|
|
plus any additions
|
|
which must be noted in
|
|
.B export
|
|
or
|
|
.B typeset \-x
|
|
commands.
|
|
.PP
|
|
The environment for any
|
|
.I simple-command\^
|
|
or function
|
|
may be augmented by prefixing it with one or more variable assignments.
|
|
A variable assignment argument is a word of the form
|
|
.IR identifier=value .
|
|
Thus:
|
|
.RS
|
|
.PP
|
|
\s-1TERM\s+1=450 \|cmd \|args and
|
|
.br
|
|
(export \|\s-1TERM\s+1; \|\s-1TERM\s+1=450; \|cmd \|args)
|
|
.RE
|
|
.PP
|
|
are equivalent (as far as the above execution of
|
|
.I cmd\^
|
|
is concerned except for special built-in commands listed below \-
|
|
those that are
|
|
preceded with a dagger).
|
|
.PP
|
|
If the obsolete
|
|
.B \-k
|
|
option is set,
|
|
.I all\^
|
|
variable assignment arguments are placed in the environment,
|
|
even if they occur after the command name.
|
|
The following
|
|
first prints
|
|
.B "a=b c"
|
|
and then
|
|
.BR c :
|
|
.PP
|
|
.RS
|
|
.nf
|
|
echo \|a=b \|c
|
|
set \|\-k
|
|
echo \|a=b \|c
|
|
.fi
|
|
.RE
|
|
This feature is intended for use with scripts written
|
|
for early versions of the shell and its use in new scripts
|
|
is strongly discouraged.
|
|
It is likely to disappear someday.
|
|
.SS Functions.
|
|
.PP
|
|
For historical reasons, there are two
|
|
ways to define functions,
|
|
the
|
|
.IB name (\^)
|
|
syntax and
|
|
the
|
|
.B function
|
|
.I name\^
|
|
syntax, described in the
|
|
.I Commands
|
|
section above.
|
|
Shell functions are read in and stored internally.
|
|
Alias names are resolved when the function is read.
|
|
Functions are executed like commands with the arguments
|
|
passed as positional parameters.
|
|
(See
|
|
.I Execution
|
|
below.)
|
|
.PP
|
|
Functions defined by the
|
|
.B function
|
|
.I name
|
|
syntax and called by name execute in the same process as the caller and
|
|
share all files
|
|
and present working directory with the
|
|
caller.
|
|
Traps caught by the caller are reset to their default action
|
|
inside the function.
|
|
A trap condition that is not caught or ignored by the
|
|
function causes the function to terminate and the condition
|
|
to be passed on to the caller.
|
|
A trap on
|
|
.SM
|
|
.B EXIT
|
|
set inside a function
|
|
is executed after the function completes in the environment
|
|
of the caller.
|
|
Ordinarily,
|
|
variables are shared between the calling program
|
|
and the function.
|
|
However,
|
|
the
|
|
.B typeset
|
|
special built-in command used within a function
|
|
defines local variables whose scope includes
|
|
the current function and
|
|
all functions it calls.
|
|
Errors within functions return control to the caller.
|
|
.PP
|
|
Functions defined with the
|
|
.IB name (\^)
|
|
syntax and functions defined with the
|
|
.B function
|
|
.I name
|
|
syntax that are invoked with the \f3\s+2.\s-2\fP
|
|
special built-in
|
|
are executed in the caller's
|
|
environment and share all variables
|
|
and traps with the caller.
|
|
Errors within these function executions cause the script that contains
|
|
them to abort.
|
|
.PP
|
|
The special built-in command
|
|
.B return
|
|
is used to return
|
|
from function calls.
|
|
.PP
|
|
Function names
|
|
can be listed with the
|
|
.B \-f
|
|
or
|
|
.B +f
|
|
option of the
|
|
.B typeset
|
|
special built-in command.
|
|
The text of functions, when available, will also
|
|
be listed with
|
|
.BR \-f .
|
|
Functions can be undefined with the
|
|
.B \-f
|
|
option of the
|
|
.B unset
|
|
special built-in command.
|
|
.PP
|
|
Ordinarily, functions are unset when the shell executes a shell script.
|
|
Functions that need to be defined across separate
|
|
invocations of the shell should
|
|
be placed in a directory and the
|
|
.B
|
|
.SM
|
|
FPATH
|
|
variable should contains the name of this directory.
|
|
They may also
|
|
be specified in the
|
|
.B
|
|
.SM
|
|
ENV
|
|
file.
|
|
.SS Jobs.
|
|
.PP
|
|
If the
|
|
.B monitor
|
|
option of the
|
|
.B set
|
|
command is turned on,
|
|
an interactive shell associates a \fIjob\fR with each pipeline.
|
|
It keeps
|
|
a table of current jobs, printed by the
|
|
.B jobs
|
|
command, and assigns them small integer numbers.
|
|
When a job is started asynchronously with
|
|
.BR & ,
|
|
the shell prints a line which looks
|
|
like:
|
|
.PP
|
|
.DT
|
|
[1] 1234
|
|
.PP
|
|
indicating that the job which was started asynchronously was job number
|
|
1 and had one (top-level) process, whose process id was 1234.
|
|
.PP
|
|
This paragraph and the next require features that are
|
|
not in all versions of UNIX and may not apply.
|
|
If you are running a job and wish to do something else you may hit the key
|
|
\fB^Z\fR (control-Z) which sends a STOP signal to the current job.
|
|
The shell will then normally indicate that the job has been `Stopped',
|
|
and print another prompt.
|
|
You can then manipulate the state of this job,
|
|
putting it in the background with the
|
|
.B bg
|
|
command, or run some other
|
|
commands and then eventually bring the job back into the foreground with
|
|
the foreground command
|
|
.BR fg .
|
|
A \fB^Z\fR takes effect immediately and
|
|
is like an interrupt in that pending output and unread input are discarded
|
|
when it is typed.
|
|
.PP
|
|
A job being run in the background will stop if it tries to read
|
|
from the terminal.
|
|
Background jobs are normally allowed to produce output,
|
|
but this can be disabled by giving the command ``stty tostop''.
|
|
If you set this
|
|
tty option, then background jobs will stop when they try to produce
|
|
output like they do when they try to read input.
|
|
.PP
|
|
There are several ways to refer to jobs in the shell.
|
|
A job can be referred to by the process id of any process of the job
|
|
or by one of the following:
|
|
.PD 0
|
|
.TP
|
|
.BI % number
|
|
The job with the given number.
|
|
.TP
|
|
.BI % string
|
|
Any job whose command line begins with
|
|
.IR string .
|
|
.TP
|
|
.BI %? string
|
|
Any job whose command line contains
|
|
.IR string .
|
|
.TP
|
|
.BI %%
|
|
Current job.
|
|
.TP
|
|
.BI %+
|
|
Equivalent to
|
|
.BR %% .
|
|
.TP
|
|
.BI %\-
|
|
Previous job.
|
|
.PD
|
|
.PP
|
|
The shell learns immediately whenever a process changes state.
|
|
It normally informs you whenever a job becomes blocked so that
|
|
no further progress is possible, but only just before it prints
|
|
a prompt.
|
|
This is done so that it does not otherwise disturb your work.
|
|
The
|
|
.B notify
|
|
option causes
|
|
the shell to print these job change messages
|
|
as soon as they occur.
|
|
.PP
|
|
When the
|
|
.B monitor
|
|
option is on, each background job that completes
|
|
triggers any trap set for
|
|
.BR CHLD .
|
|
.PP
|
|
When you try to leave the shell while jobs are running or stopped, you will
|
|
be warned that `You have stopped(running) jobs.'
|
|
You may use the
|
|
.B jobs
|
|
command to see what they are.
|
|
If you immediately try to
|
|
exit again, the shell will not warn you a second time, and the stopped
|
|
jobs will be terminated.
|
|
When a login shell receives a HUP signal, it sends
|
|
a HUP signal to each job that has not been disowned witha the
|
|
.B disown
|
|
built-in command described below.
|
|
.SS Signals.
|
|
The \s-1INT\s+1 and \s-1QUIT\s+1 signals for an invoked
|
|
command are ignored if the command is followed by
|
|
.B &
|
|
and the
|
|
.B monitor
|
|
option is not active.
|
|
Otherwise, signals have the values
|
|
inherited by the shell from its parent
|
|
(but see also
|
|
the
|
|
.B trap
|
|
built-in command below).
|
|
.SS Execution.
|
|
Each time a command is read, the above substitutions
|
|
are carried out.
|
|
If the command name matches one
|
|
of the
|
|
.I "Special built-in Commands\^"
|
|
listed below,
|
|
it is executed within the
|
|
current shell process.
|
|
Next, the command name is checked to see if
|
|
it matches a user defined function.
|
|
If it does,
|
|
the positional parameters are saved
|
|
and then reset to the arguments of the
|
|
.I function\^
|
|
call.
|
|
When the
|
|
.I function\^
|
|
completes or issues a
|
|
.BR return ,
|
|
the positional parameter list is restored.
|
|
For functions defined with the
|
|
.B function
|
|
.I name\^
|
|
syntax,
|
|
any trap set on
|
|
.SM
|
|
.B EXIT
|
|
within the function is executed.
|
|
The value of a
|
|
.I function\^
|
|
is the value of the last command executed.
|
|
A function is also executed in the
|
|
current shell process.
|
|
If a command name is not a
|
|
.I "special built-in command\^"
|
|
or a user defined
|
|
.IR function ,
|
|
but it is one of the built-in commands listed below
|
|
it is executed in the current shell process.
|
|
.PP
|
|
The shell variable
|
|
.B
|
|
.SM PATH
|
|
defines the search path for
|
|
the directory containing the command.
|
|
Alternative directory names are separated by
|
|
a colon
|
|
.RB ( : ).
|
|
The default path is
|
|
.B /bin:/usr/bin:
|
|
(specifying
|
|
.BR /bin ,
|
|
.BR /usr/bin ,
|
|
and the current directory
|
|
in that order).
|
|
The current directory can be specified by
|
|
two or more adjacent colons, or by a colon
|
|
at the beginning or end of the path list.
|
|
If the command name contains a \f3/\fP then the search path
|
|
is not used.
|
|
Otherwise, each directory in the path is
|
|
searched for an executable file that is not a directory.
|
|
If the shell
|
|
determines that there is a built-in version
|
|
of a command corresponding to a given pathname,
|
|
this built-in is invoked in the current process.
|
|
A process is created and
|
|
an attempt is made to execute the command via
|
|
.IR exec (2).
|
|
If the file has execute permission but is not an
|
|
.B a.out
|
|
file,
|
|
it is assumed to be a file containing shell commands.
|
|
A separate shell is spawned to read it.
|
|
All non-exported variables are removed in this case.
|
|
If the shell command
|
|
file doesn't have read permission,
|
|
or if the
|
|
.I setuid
|
|
and/or
|
|
.I setgid
|
|
bits are set on the file,
|
|
then the shell executes an agent whose job it is to
|
|
set up the permissions and execute the shell with the
|
|
shell command file passed down as an open file.
|
|
A parenthesized command is executed in
|
|
a sub-shell without removing non-exported variables.
|
|
.SS Command Re-entry.
|
|
The text of the last
|
|
.B
|
|
.SM
|
|
HISTSIZE
|
|
(default 128)
|
|
commands entered from a terminal device
|
|
is saved in a
|
|
.I history
|
|
file.
|
|
The file
|
|
.B \s-1$HOME\s+1/.sh_history
|
|
is used if the
|
|
.B
|
|
.SM
|
|
HISTFILE
|
|
variable is not set
|
|
or if the file it names is not writable.
|
|
A shell can access the commands of
|
|
all
|
|
.I interactive
|
|
shells which use the same named
|
|
.SM
|
|
.BR HISTFILE .
|
|
The built-in command
|
|
.B hist\^
|
|
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
|
|
.B hist\^
|
|
then the value of the variable
|
|
.SM
|
|
.B HISTEDIT
|
|
is used.
|
|
If
|
|
.SM
|
|
.B HISTEDIT
|
|
is unset, the obsolete variable
|
|
.SM
|
|
.B FCEDIT
|
|
is used.
|
|
If
|
|
.SM
|
|
.B FCEDIT
|
|
is not defined then
|
|
.B /bin/ed
|
|
is used.
|
|
The edited command(s) is printed and re-executed upon
|
|
leaving the editor unless you quit without writing.
|
|
The
|
|
.B \-s
|
|
option
|
|
(
|
|
an in obsolete versions, the editor name
|
|
.B \-
|
|
)
|
|
is used to skip the editing phase and
|
|
to re-execute the command.
|
|
In this case a substitution parameter of the form
|
|
\f2old\fP\f3=\fP\f2new\fP
|
|
can be used to modify the command before execution.
|
|
For example, with the preset alias
|
|
.BR r ,
|
|
which is aliased to
|
|
.BR "\(fmhist \-s\(fm" ,
|
|
typing
|
|
`\f3r bad=good c\fP'
|
|
will re-execute the most recent command which starts with the letter
|
|
.BR c ,
|
|
replacing the first occurrence of the string
|
|
.B bad
|
|
with the string
|
|
.BR good .
|
|
.SS In-line Editing Options
|
|
Normally, each command line entered from a terminal device is simply
|
|
typed followed by a \f3new-line\fP (`RETURN' or `LINE\ FEED').
|
|
If either the
|
|
.BR emacs ,
|
|
.BR gmacs ,
|
|
or
|
|
.B vi
|
|
option is active, the user can edit the command line.
|
|
To be in either of these edit modes
|
|
.B set
|
|
the corresponding
|
|
option.
|
|
An editing option is automatically selected each time the
|
|
.SM
|
|
.B VISUAL
|
|
or
|
|
.SM
|
|
.B EDITOR
|
|
variable is assigned a value ending in either of these
|
|
option names.
|
|
.PP
|
|
The editing features require that the user's terminal
|
|
accept `RETURN' as carriage return without line feed
|
|
and that a space (`\ ') must overwrite the current character on
|
|
the screen.
|
|
.PP
|
|
The editing modes implement a concept where the user is looking through a
|
|
window at the current line.
|
|
The window width is the value of
|
|
.SM
|
|
.B COLUMNS
|
|
if it is defined, otherwise 80.
|
|
If the window width is too small to display the prompt and leave
|
|
at least 8 columns to enter input, the prompt is truncated from the
|
|
left.
|
|
If the line is longer than the window width minus two, a mark is
|
|
displayed at the end of the window to notify the user.
|
|
As the cursor moves and reaches the window boundaries the window will be
|
|
centered about the cursor.
|
|
The mark is a
|
|
.BR > " (<" ,
|
|
.BR * )
|
|
if the line extends on the
|
|
right (left, both) side(s) of the window.
|
|
.PP
|
|
The search commands in each edit mode provide access to the history file.
|
|
Only strings are matched, not patterns, although a leading
|
|
.B ^
|
|
in the string restricts the match
|
|
to begin at the first character in the line.
|
|
.PP
|
|
Each of the edit modes has an operation to list the files
|
|
or commands that match a partially entered word.
|
|
When applied to the first word on the line,
|
|
or the first word after a
|
|
.BR ; ,
|
|
.BR \(bv ,
|
|
.BR & ,
|
|
or
|
|
.BR ( ,
|
|
and the word does not begin with
|
|
.B \(ap
|
|
or contain a
|
|
.BR / ,
|
|
the list of aliases, functions, and executable commands
|
|
defined by the
|
|
.B
|
|
.SM PATH
|
|
variable that could match the partial word is displayed.
|
|
Otherwise, the list of files that match the given
|
|
word is displayed.
|
|
If the partially entered word does not contain any
|
|
file expansion characters, a
|
|
.B *
|
|
is appended before generating these lists.
|
|
After displaying the generated list, the input line
|
|
is redrawn.
|
|
These operations are called command name listing and file name listing,
|
|
respectively.
|
|
There are additional operations, referred to as command name
|
|
completion and file name completion, which compute the list
|
|
of matching commands or files, but instead of printing the list,
|
|
replace
|
|
the current word with a complete or partial match.
|
|
For file name completion,
|
|
if the match is unique, a
|
|
.B /
|
|
is appended if the file is a directory and a space is
|
|
appended if the file is not a directory.
|
|
Otherwise, the longest common prefix for all the matching
|
|
files replaces the word.
|
|
For command name completion, only the portion of the file names
|
|
after the last
|
|
.B /
|
|
are used to find the longest command prefix.
|
|
If only a single name matches this prefix, then the
|
|
word is replaced with the command name followed by a space.
|
|
.SS Key Bindings.
|
|
The
|
|
.B
|
|
.SM KEYBD
|
|
trap can be used to intercept keys as they are typed
|
|
and change the characters that are actually seen by
|
|
the shell.
|
|
This trap is executed after each character
|
|
( or sequence of characters when the first character is
|
|
.B ESC
|
|
) is entered while reading from a terminal.
|
|
The variable
|
|
.B .sh.edchar
|
|
contains the character or character sequence which
|
|
generated the trap.
|
|
Changing the value of
|
|
.B .sh.edchar
|
|
in the trap action causes the shell to behave as if the
|
|
new value were entered from the keyboard rather than
|
|
the original value.
|
|
.PP
|
|
The variable
|
|
.B .sh.edcol
|
|
is set to the input column number of the cursor at the time
|
|
of the input.
|
|
The variable
|
|
.B .sh.edmode
|
|
is set to
|
|
.B ESC
|
|
when in vi insert mode (see below) and is null otherwise.
|
|
By prepending
|
|
.B ${.sh.editmode}
|
|
to a value assigned to
|
|
.B .sh.edchar
|
|
it will cause the shell
|
|
to change to control mode if it is not already in this mode.
|
|
.PP
|
|
This trap is not invoked for characters entered as arguments to
|
|
editing directives, or while reading input for a character search.
|
|
.SS Emacs Editing Mode.
|
|
This mode is entered by enabling either the
|
|
.I emacs
|
|
or
|
|
.I gmacs
|
|
option.
|
|
The only difference between these two modes is the way
|
|
they handle
|
|
.BR ^T .
|
|
To edit, the user
|
|
moves the cursor to the point needing correction and
|
|
then inserts or deletes characters or words as needed.
|
|
All the editing commands are control characters or escape
|
|
sequences.
|
|
The notation for control characters is caret (
|
|
.B ^
|
|
) followed
|
|
by the character.
|
|
For example,
|
|
.B ^F
|
|
is the notation for control
|
|
.BR F .
|
|
This is entered by depressing `f' while holding down the
|
|
`CTRL' (control) key.
|
|
The `SHIFT' key is
|
|
.I not
|
|
depressed.
|
|
(The notation
|
|
.B ^?
|
|
indicates the DEL (delete) key.)
|
|
.PP
|
|
The notation for escape sequences is
|
|
.B M-
|
|
followed by a
|
|
character.
|
|
For example,
|
|
.B M-f
|
|
(pronounced Meta f)
|
|
is entered by depressing ESC
|
|
(ascii
|
|
.BR 033 )
|
|
followed by `f'.
|
|
.RB ( M-F
|
|
would be the notation for ESC followed by `SHIFT' (capital) `F'.)
|
|
.PP
|
|
All edit commands
|
|
operate from any place on the line
|
|
(not just at the beginning).
|
|
Neither the "RETURN" nor the "LINE FEED" key is
|
|
entered after edit commands except when noted.
|
|
.PP
|
|
.PD 0
|
|
.TP 10
|
|
.BI ^F
|
|
Move cursor forward (right) one character.
|
|
.PP
|
|
.TP 10
|
|
.BI M-f
|
|
Move cursor forward one word.
|
|
(The
|
|
.B emacs
|
|
editor's idea of a word is a string of characters
|
|
consisting of only letters, digits and underscores.)
|
|
.PP
|
|
.TP 10
|
|
.BI ^B
|
|
Move cursor backward (left) one character.
|
|
.PP
|
|
.TP 10
|
|
.BI M-b
|
|
Move cursor backward one word.
|
|
.PP
|
|
.TP 10
|
|
.BI ^A
|
|
Move cursor to start of line.
|
|
.PP
|
|
.TP 10
|
|
.BI ^E
|
|
Move cursor to end of line.
|
|
.PP
|
|
.TP 10
|
|
.BI ^] char
|
|
Move cursor forward to character
|
|
.I char
|
|
on current line.
|
|
.PP
|
|
.TP 10
|
|
.BI M-^] char
|
|
Move cursor backward to character
|
|
.I char
|
|
on current line.
|
|
.PP
|
|
.TP 10
|
|
.BI ^X^X
|
|
Interchange the cursor and mark.
|
|
.PP
|
|
.TP 10
|
|
.I erase
|
|
(User defined erase character as defined
|
|
by the
|
|
.IR stty (1)
|
|
command, usually
|
|
.B ^H
|
|
or
|
|
.BR # .)
|
|
Delete previous character.
|
|
.PP
|
|
.TP 10
|
|
.BI ^D
|
|
Delete current character.
|
|
.PP
|
|
.TP 10
|
|
.BI M-d
|
|
Delete current word.
|
|
.PP
|
|
.TP 10
|
|
.BI M-^H
|
|
(Meta-backspace) Delete previous word.
|
|
.PP
|
|
.TP 10
|
|
.BI M-h
|
|
Delete previous word.
|
|
.PP
|
|
.TP 10
|
|
.BI M-^?
|
|
(Meta-DEL) Delete previous word (if your interrupt character is
|
|
.B ^?
|
|
(DEL, the default) then this command will not work).
|
|
.PP
|
|
.TP 10
|
|
.BI ^T
|
|
Transpose current character with next character in
|
|
.I emacs
|
|
mode.
|
|
Transpose two previous characters in
|
|
.I gmacs
|
|
mode.
|
|
.PP
|
|
.TP 10
|
|
.BI ^C
|
|
Capitalize current character.
|
|
.PP
|
|
.TP 10
|
|
.BI M-c
|
|
Capitalize current word.
|
|
.PP
|
|
.TP 10
|
|
.BI M-l
|
|
Change the current word to lower case.
|
|
.PP
|
|
.TP 10
|
|
.BI ^K
|
|
Delete from the cursor to the end of the line.
|
|
If preceded by a numerical parameter whose value is less than the
|
|
current cursor position, then delete from given position
|
|
up to the cursor.
|
|
If preceded by a numerical parameter whose value is greater than the
|
|
current cursor position, then delete from cursor up to
|
|
given cursor position.
|
|
.PP
|
|
.TP 10
|
|
.BI ^W
|
|
Kill from the cursor to the mark.
|
|
.PP
|
|
.TP 10
|
|
.BI M-p
|
|
Push the region from the cursor to the mark on the stack.
|
|
.PP
|
|
.TP 10
|
|
.I kill
|
|
(User defined kill character as defined
|
|
by the stty command, usually
|
|
.B ^G
|
|
or
|
|
.BR @ .)
|
|
Kill the entire current line.
|
|
If two
|
|
.I kill
|
|
characters are entered in succession, all
|
|
kill characters from then on cause a line feed
|
|
(useful when using paper terminals).
|
|
.PP
|
|
.TP 10
|
|
.BI ^Y
|
|
Restore last item removed from line. (Yank item back to the line.)
|
|
.PP
|
|
.TP 10
|
|
.BI ^L
|
|
Line feed and print current line.
|
|
.PP
|
|
.TP 10
|
|
.BI ^@
|
|
(Null character) Set mark.
|
|
.PP
|
|
.TP 10
|
|
.BI M- space
|
|
(Meta space) Set mark.
|
|
.PP
|
|
.TP 10
|
|
.BI ^J
|
|
(New\ line) Execute the current line.
|
|
.PP
|
|
.TP 10
|
|
.BI ^M
|
|
(Return) Execute the current line.
|
|
.PP
|
|
.TP 10
|
|
.I eof
|
|
End-of-file character,
|
|
normally
|
|
.BR ^D ,
|
|
is processed as an End-of-file only
|
|
if the current line is null.
|
|
.PP
|
|
.TP 10
|
|
.BI ^P
|
|
Fetch previous command.
|
|
Each time
|
|
.B ^P
|
|
is entered
|
|
the previous command back in time is accessed.
|
|
Moves back one line when not on the first line of a multi-line command.
|
|
.PP
|
|
.TP 10
|
|
.BI M-<
|
|
Fetch the least recent (oldest) history line.
|
|
.PP
|
|
.TP 10
|
|
.BI M->
|
|
Fetch the most recent (youngest) history line.
|
|
.PP
|
|
.TP 10
|
|
.BI ^N
|
|
Fetch next command line.
|
|
Each time
|
|
.B ^N
|
|
is entered
|
|
the next command line forward in time is accessed.
|
|
.PP
|
|
.TP 10
|
|
.BI ^R string
|
|
Reverse search history for a previous command line containing
|
|
.IR string .
|
|
If a parameter of zero is given, the search is forward.
|
|
.I String
|
|
is terminated by a "RETURN" or "NEW\ LINE".
|
|
If string is preceded by a
|
|
.BR ^ ,
|
|
the matched line must begin with
|
|
.IR string .
|
|
If
|
|
.I string
|
|
is omitted,
|
|
then the next command line containing the most recent
|
|
.I string
|
|
is accessed.
|
|
In this case a parameter of zero
|
|
reverses the direction of the search.
|
|
.PP
|
|
.TP 10
|
|
.B ^O
|
|
Operate \- Execute the current line and fetch
|
|
the next line relative to current line from the
|
|
history file.
|
|
.PP
|
|
.TP 10
|
|
.BI M- digits
|
|
(Escape) Define numeric parameter, the digits
|
|
are taken as a parameter to the next command.
|
|
The commands that accept a parameter are
|
|
.BR ^F ,
|
|
.BR ^B ,
|
|
.IR erase ,
|
|
.BR ^C ,
|
|
.BR ^D ,
|
|
.BR ^K ,
|
|
.BR ^R ,
|
|
.BR ^P ,
|
|
.BR ^N ,
|
|
.BR ^] ,
|
|
.BR M-. ,
|
|
.BR M-^] ,
|
|
.BR M-_ ,
|
|
.BR M-b ,
|
|
.BR M-c ,
|
|
.BR M-d ,
|
|
.BR M-f ,
|
|
.BR M-h ,
|
|
.B M-l
|
|
and
|
|
.BR M-^H .
|
|
.PP
|
|
.TP 10
|
|
.BI M- letter
|
|
Soft-key \- Your alias list is searched for an
|
|
alias by the name
|
|
.BI _ letter
|
|
and if an alias of this name is defined, its
|
|
value will be inserted on the input queue.
|
|
The
|
|
.I letter
|
|
must not be one of the above meta-functions.
|
|
.PP
|
|
.TP 10
|
|
.BI M-[ letter
|
|
Soft-key \- Your alias list is searched for an
|
|
alias by the name
|
|
.BI _\&_ letter
|
|
and if an alias of this name is defined, its
|
|
value will be inserted on the input queue.
|
|
The can be used to program functions keys on many terminals.
|
|
.PP
|
|
.TP 10
|
|
.B M-.
|
|
The last word of the previous command is inserted
|
|
on the line.
|
|
If preceded by a numeric parameter, the value
|
|
of this parameter determines which word to insert rather than
|
|
the last word.
|
|
.PP
|
|
.TP 10
|
|
.B M-_
|
|
Same as
|
|
.BR M-. .
|
|
.PP
|
|
.TP 10
|
|
.B M-*
|
|
Attempt file name generation on the current word.
|
|
An asterisk is appended if the word doesn't match any file
|
|
or contain any special
|
|
pattern characters.
|
|
.PP
|
|
.TP 10
|
|
Command or file name completion as described above.
|
|
.PP
|
|
.TP 10
|
|
.B M-=
|
|
Command or file name listing as described above.
|
|
.PP
|
|
.TP 10
|
|
.BI ^U
|
|
Multiply parameter of next command by 4.
|
|
.PP
|
|
.TP 10
|
|
.BI \e
|
|
Escape next character.
|
|
Editing characters, the user's erase, kill and
|
|
interrupt (normally
|
|
.BR ^? )
|
|
characters
|
|
may be entered
|
|
in a command line or in a search string if preceded by a
|
|
.BR \e .
|
|
The
|
|
.B \e
|
|
removes the next character's
|
|
editing features (if any).
|
|
.PP
|
|
.TP 10
|
|
.BI ^V
|
|
Display version of the shell.
|
|
.PP
|
|
.TP 10
|
|
.BI M-\#
|
|
If the line does not begin with a
|
|
.BR \# ,
|
|
a
|
|
.B \#
|
|
is inserted
|
|
at the beginning of the line
|
|
and after each new-line,
|
|
and the line is entered.
|
|
This causes a comment to be inserted in the history file.
|
|
If the line begins with a
|
|
.BR \# ,
|
|
the
|
|
.B \#
|
|
is deleted and one
|
|
.B \#
|
|
after each new-line is also deleted.
|
|
.PD
|
|
.SS Vi Editing Mode.
|
|
There are two typing modes.
|
|
Initially, when you enter a command you are in the
|
|
.I input\^
|
|
mode.
|
|
To edit, the user enters
|
|
.I control\^
|
|
mode by typing ESC
|
|
.RB ( 033 )
|
|
and moves the cursor to the point needing correction and
|
|
then inserts or deletes characters or words as needed.
|
|
Most control commands accept an optional repeat
|
|
.I count
|
|
prior to the command.
|
|
.P
|
|
When in
|
|
.B vi
|
|
mode on most systems,
|
|
canonical processing is initially enabled and the
|
|
command will be echoed again if the speed is 1200 baud or greater and it
|
|
contains any control characters or less than one second has elapsed
|
|
since the prompt was printed.
|
|
The ESC character terminates canonical processing for the remainder of the command
|
|
and the user can then modify the command line.
|
|
This scheme has the advantages of canonical processing with the type-ahead
|
|
echoing of raw mode.
|
|
.P
|
|
If the option
|
|
.B viraw\^
|
|
is also set, the terminal will always have canonical processing
|
|
disabled.
|
|
This mode is implicit for systems that do not support two
|
|
alternate end of line delimiters,
|
|
and may be helpful for certain terminals.
|
|
.SS "\ \ \ \ \ Input Edit Commands"
|
|
.PP
|
|
.RS
|
|
By default the editor is in input mode.
|
|
.PD 0
|
|
.TP 10
|
|
.I erase
|
|
(User defined erase character as defined
|
|
by the stty command, usually
|
|
.B ^H
|
|
or
|
|
.BR # .)
|
|
Delete previous character.
|
|
.TP 10
|
|
.BI ^W
|
|
Delete the previous blank separated word.
|
|
One some systems the \f3viraw\fP option
|
|
may be required for this to work.
|
|
.TP 10
|
|
.I eof
|
|
As the first character of the line causes
|
|
the shell to terminate unless the \f3ignoreeof\fP
|
|
option is set.
|
|
Otherwise this character is ignored.
|
|
.TP 10
|
|
.BI ^V
|
|
Escape next character.
|
|
Editing characters and the user's erase or kill
|
|
characters may be entered
|
|
in a command line or in a search string if preceded by a
|
|
.BR ^V .
|
|
The
|
|
.B ^V
|
|
removes the next character's
|
|
editing features (if any).
|
|
One some systems the \f3viraw\fP option
|
|
may be required for this to work.
|
|
.TP 10
|
|
.BI \e
|
|
Escape the next
|
|
.I erase
|
|
or
|
|
.I kill
|
|
character.
|
|
.P
|
|
.RE
|
|
.SS "\ \ \ \ \ Motion Edit Commands"
|
|
.RS
|
|
These commands will move the cursor.
|
|
.TP 10
|
|
[\f2count\fP]\f3l\fP
|
|
Cursor forward (right) one character.
|
|
.TP 10
|
|
[\f2count\fP]\f3w\fP
|
|
Cursor forward one alpha-numeric word.
|
|
.TP 10
|
|
[\f2count\fP]\f3W\fP
|
|
Cursor to the beginning of the next word that follows a blank.
|
|
.TP 10
|
|
[\f2count\fP]\f3e\fP
|
|
Cursor to end of word.
|
|
.TP 10
|
|
[\f2count\fP]\f3E\fP
|
|
Cursor to end of the current blank delimited word.
|
|
.TP 10
|
|
[\f2count\fP]\f3h\fP
|
|
Cursor backward (left) one character.
|
|
.TP 10
|
|
[\f2count\fP]\f3b\fP
|
|
Cursor backward one word.
|
|
.TP 10
|
|
[\f2count\fP]\f3B\fP
|
|
Cursor to preceding blank separated word.
|
|
.TP 10
|
|
[\f2count\fP]\f3\(bv\fP
|
|
Cursor to column
|
|
.IR count .
|
|
.TP 10
|
|
[\f2count\fP]\f3f\fP\f2c\fP
|
|
Find the next character \fIc\fP in the current line.
|
|
.TP 10
|
|
[\f2count\fP]\f3F\fP\f2c\fP
|
|
Find the previous character \fIc\fP in the current line.
|
|
.TP 10
|
|
[\f2count\fP]\f3t\fP\f2c\fP
|
|
Equivalent to
|
|
.B f
|
|
followed by
|
|
.BR h .
|
|
.TP 10
|
|
[\f2count\fP]\f3T\fP\f2c\fP
|
|
Equivalent to
|
|
.B F
|
|
followed by
|
|
.BR l .
|
|
.TP 10
|
|
[\f2count\fP]\f3;\fP
|
|
Repeats
|
|
.I count
|
|
times,
|
|
the last single character find command,
|
|
.BR f ,
|
|
.BR F ,
|
|
.BR t ,
|
|
or
|
|
.BR T .
|
|
.TP 10
|
|
[\f2count\fP]\f3,\fP
|
|
Reverses the last single character find command
|
|
.I count
|
|
times.
|
|
.TP 10
|
|
.B 0
|
|
Cursor to start of line.
|
|
.TP 10
|
|
.B ^
|
|
Cursor to first non-blank character in line.
|
|
.TP 10
|
|
.B $
|
|
Cursor to end of line.
|
|
.TP 10
|
|
.B %
|
|
Moves to balancing
|
|
.BR ( ,
|
|
.BR ) ,
|
|
.BR { ,
|
|
.BR } ,
|
|
.BR [ ,
|
|
or
|
|
.BR ] .
|
|
If cursor is not on one of the above characters,
|
|
the remainder of the line is searched for the first
|
|
occurrence of one of the above characters first.
|
|
.RE
|
|
.SS "\ \ \ \ \ Search Edit Commands"
|
|
.RS
|
|
These commands access your command history.
|
|
.TP 10
|
|
[\f2count\fP]\f3k\fP
|
|
Fetch previous command.
|
|
Each time
|
|
.B k
|
|
is entered
|
|
the previous command back in time is accessed.
|
|
.TP 10
|
|
[\f2count\fP]\f3\-\fP
|
|
Equivalent to
|
|
.BR k .
|
|
.TP 10
|
|
[\f2count\fP]\f3j\fP
|
|
Fetch next command.
|
|
Each time
|
|
.B j
|
|
is entered
|
|
the next command forward in time is accessed.
|
|
.TP 10
|
|
[\f2count\fP]\f3+\fP
|
|
Equivalent to
|
|
.BR j .
|
|
.TP 10
|
|
[\f2count\fP]\f3G\fP
|
|
The command number
|
|
.I count
|
|
is fetched.
|
|
The default is the least recent history command.
|
|
.TP 10
|
|
.BI / string
|
|
Search backward through history for a previous command containing
|
|
.IR string .
|
|
.I String
|
|
is terminated by a "RETURN" or "NEW\ LINE".
|
|
If string is preceded by a
|
|
.BR ^ ,
|
|
the matched line must begin with
|
|
.IR string .
|
|
If \fIstring\fP is null the previous string will be used.
|
|
.TP 10
|
|
.BI ? string
|
|
Same as
|
|
.B /
|
|
except that search will be in the forward direction.
|
|
.TP 10
|
|
.B n
|
|
Search for next match of the last pattern to
|
|
.B /
|
|
or
|
|
.B ?
|
|
commands.
|
|
.TP 10
|
|
.B N
|
|
Search for next match of the last pattern to
|
|
.B /
|
|
or
|
|
.BR ? ,
|
|
but in reverse direction.
|
|
.RE
|
|
.SS "\ \ \ \ \ Text Modification Edit Commands"
|
|
.RS
|
|
These commands will modify the line.
|
|
.TP 10
|
|
.B a
|
|
Enter input mode and enter text after the current character.
|
|
.TP 10
|
|
.B A
|
|
Append text to the end of the line.
|
|
Equivalent to
|
|
.BR $a .
|
|
.TP 10
|
|
[\f2count\fP]\f3c\fP\f2motion\fP
|
|
.TP 10
|
|
\f3c\fP[\f2count\fP]\f2motion\fP
|
|
Delete current character through the character that
|
|
.I motion
|
|
would move the cursor to and enter input mode.
|
|
If \fImotion\fP is
|
|
.BR c ,
|
|
the entire line will be deleted and
|
|
input mode entered.
|
|
.TP 10
|
|
.B C
|
|
Delete the current character through the end of line and enter input mode.
|
|
Equivalent to
|
|
.BR c$ .
|
|
.TP 10
|
|
.B S
|
|
Equivalent to
|
|
.BR cc .
|
|
.TP 10
|
|
.B D
|
|
Delete the current character through the end of line.
|
|
Equivalent to
|
|
.BR d$ .
|
|
.TP 10
|
|
[\f2count\fP]\f3d\fP\f2motion\fP
|
|
.TP 10
|
|
\f3d\fP[\f2count\fP]\f2motion\fP
|
|
Delete current character through the character that
|
|
.I motion
|
|
would move to.
|
|
If \fImotion\fP is
|
|
.B d ,
|
|
the entire line will be deleted.
|
|
.TP 10
|
|
.B i
|
|
Enter input mode and insert text before the current character.
|
|
.TP 10
|
|
.B I
|
|
Insert text before the beginning of the line.
|
|
Equivalent to
|
|
.BR 0i .
|
|
.TP 10
|
|
[\f2count\fP]\f3P\fP
|
|
Place the previous text modification before the cursor.
|
|
.TP 10
|
|
[\f2count\fP]\f3p\fP
|
|
Place the previous text modification after the cursor.
|
|
.TP 10
|
|
.B R
|
|
Enter input mode and
|
|
replace characters on the screen with characters you type overlay fashion.
|
|
.TP 10
|
|
[\f2count\fP]\f3r\fP\f2c\fP
|
|
Replace the
|
|
.I count
|
|
character(s) starting at the current cursor position with
|
|
.IR c ,
|
|
and advance the cursor.
|
|
.TP 10
|
|
[\f2count\fP]\f3x\fP
|
|
Delete current character.
|
|
.TP 10
|
|
[\f2count\fP]\f3X\fP
|
|
Delete preceding character.
|
|
.TP 10
|
|
[\f2count\fP]\f3.\fP
|
|
Repeat the previous text modification command.
|
|
.TP 10
|
|
[\f2count\fP]\f3\(ap\fP
|
|
Invert the case of the
|
|
.I count
|
|
character(s) starting at the current cursor position and advance the cursor.
|
|
.TP 10
|
|
[\f2count\fP]\f3_\fP
|
|
Causes the
|
|
.I count\^
|
|
word of the previous command to be appended and
|
|
input mode entered.
|
|
The last word is used
|
|
if
|
|
.I count\^
|
|
is omitted.
|
|
.TP 10
|
|
.B *
|
|
Causes an
|
|
.B *
|
|
to be appended to the current word and file name generation attempted.
|
|
If no match is found,
|
|
it rings the bell.
|
|
Otherwise, the word is replaced
|
|
by the matching pattern and input mode is entered.
|
|
.TP 10
|
|
.B \e
|
|
Command or file name completion as described above.
|
|
.RE
|
|
.SS "\ \ \ \ \ Other Edit Commands"
|
|
.RS
|
|
Miscellaneous commands.
|
|
.TP 10
|
|
[\f2count\fP]\f3y\fP\f2motion\fP
|
|
.TP 10
|
|
\f3y\fP[\f2count\fP]\f2motion\fP
|
|
Yank current character through character that
|
|
.I motion
|
|
would move the cursor to and puts them into the delete buffer.
|
|
The text and cursor are unchanged.
|
|
.TP 10
|
|
.B Y
|
|
Yanks from current position to end of line.
|
|
Equivalent to
|
|
.BR y$ .
|
|
.TP 10
|
|
.B u
|
|
Undo the last text modifying command.
|
|
.TP 10
|
|
.B U
|
|
Undo all the text modifying commands performed on the line.
|
|
.TP 10
|
|
[\f2count\fP]\f3v\fP
|
|
Returns the command
|
|
.BI "hist \-e ${\s-1VISUAL\s+1:\-${\s-1EDITOR\s+1:\-vi}}" " count"
|
|
in the input buffer.
|
|
If
|
|
.I count\^
|
|
is omitted, then the current line is used.
|
|
.TP 10
|
|
.BI ^L
|
|
Line feed and print current line.
|
|
Has effect only in control mode.
|
|
.TP 10
|
|
.BI ^J
|
|
(New\ line) Execute the current line, regardless of mode.
|
|
.TP 10
|
|
.BI ^M
|
|
(Return) Execute the current line, regardless of mode.
|
|
.TP 10
|
|
.B \#
|
|
If the first character of the command is a
|
|
.BR \# ,
|
|
then this command deletes this
|
|
.B \#
|
|
and each
|
|
.B \#
|
|
that follows a newline.
|
|
Otherwise,
|
|
sends the line after
|
|
inserting a
|
|
.B \#
|
|
in front of each line in the command.
|
|
Useful for causing the current line to be
|
|
inserted in the history as a comment and
|
|
uncommenting previously commented commands
|
|
in the history file.
|
|
.TP 10
|
|
.B =
|
|
Command or file name listing as described above.
|
|
.TP 10
|
|
.BI @ letter
|
|
Your alias list is searched for an
|
|
alias by the name
|
|
.BI _ letter
|
|
and if an alias of this name is defined, its
|
|
value will be inserted on the input queue for processing.
|
|
.RE
|
|
.PD
|
|
.SS Built-in Commands.
|
|
The following simple-commands are executed in the shell process.
|
|
Input/Output redirection is permitted.
|
|
Unless otherwise indicated, the output is written on file descriptor 1
|
|
and the exit status, when there is no syntax error, is zero.
|
|
Except for
|
|
.BR : ,
|
|
.BR true ,
|
|
.BR false ,
|
|
.BR echo ,
|
|
.BR command ,
|
|
.BR newgrp ,
|
|
and
|
|
.BR login ,
|
|
all built-in commands accept
|
|
.B \-\-
|
|
to indicate end of options.
|
|
They also interpret the option
|
|
.B \-?
|
|
as a help request and print a
|
|
.I usage\^
|
|
message
|
|
on standard error.
|
|
Commands that are preceded by one or two \(dg
|
|
are special built-in commands and
|
|
are treated specially in the following ways:
|
|
.PD 0
|
|
.TP
|
|
1.
|
|
Variable assignment lists preceding the command
|
|
remain in effect when the command completes.
|
|
.TP
|
|
2.
|
|
I/O redirections are processed after variable assignments.
|
|
.TP
|
|
3.
|
|
Errors
|
|
cause a script
|
|
that contains them to abort.
|
|
.TP
|
|
4.
|
|
They are not valid function names.
|
|
.TP
|
|
5.
|
|
Words,
|
|
following a command preceded by \(dg\(dg
|
|
that are in the format of a variable assignment,
|
|
are expanded with the same rules as a variable assignment.
|
|
This means that
|
|
tilde substitution is performed after the
|
|
.B =
|
|
sign and field splitting and file name generation are not
|
|
performed.
|
|
.PD
|
|
.TP
|
|
\(dg \f3:\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
|
|
The command only expands parameters.
|
|
.br
|
|
.ne 2
|
|
.TP
|
|
\(dg \f3\|. \f2name\^\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
|
|
If
|
|
.I name\^
|
|
is a function defined with the
|
|
.B function
|
|
.I name\^
|
|
reserved word syntax,
|
|
the function is executed in the current environment
|
|
( as if it had been defined with the
|
|
.IB name ()
|
|
syntax.)
|
|
Otherwise if
|
|
.I name\^
|
|
refers to a file, the
|
|
file is read in its entirety and the commands are
|
|
executed in the current shell environment.
|
|
The search path
|
|
specified by
|
|
.B
|
|
.SM PATH
|
|
is used to find the directory containing file.
|
|
If any arguments
|
|
.I arg\^
|
|
are given,
|
|
they become the positional parameters while processing
|
|
the
|
|
.B .
|
|
command and are restored upon completion.
|
|
Otherwise the positional parameters are unchanged.
|
|
The exit status is the exit status of the last command executed.
|
|
.TP
|
|
\(dg\(dg \f3alias\fP \*(OK \f3\-ptx\fP \*(CK \*(OK \f2name\fP\*(OK \f3=\fP\f2value\^\fP \*(CK \*(CK .\|.\|.
|
|
.B alias\^
|
|
with no arguments prints the list of aliases
|
|
in the form
|
|
.I name=value\^
|
|
on standard output.
|
|
The
|
|
.B \-p
|
|
option
|
|
causes the word
|
|
.B alias
|
|
to be inserted before each one.
|
|
When one or more arguments are given
|
|
an
|
|
.I alias\^
|
|
is defined
|
|
for each
|
|
.I name\^
|
|
whose
|
|
.I value\^
|
|
is given.
|
|
A trailing space in
|
|
.I value\^
|
|
causes the next word to be checked for
|
|
alias substitution.
|
|
The obsolete
|
|
.B \-t
|
|
option is used to set and list tracked aliases.
|
|
The value of a tracked alias is the full pathname
|
|
corresponding to the given
|
|
.IR name .
|
|
The value becomes undefined when the value of
|
|
.SM
|
|
.B PATH
|
|
is reset but the alias remains tracked.
|
|
Without the
|
|
.B \-t
|
|
option,
|
|
for each
|
|
.I name\^
|
|
in the argument list
|
|
for which no
|
|
.I value\^
|
|
is given, the name
|
|
and value of the alias is printed.
|
|
The obsolete
|
|
.B \-x
|
|
option has no effect.
|
|
The exit status is non-zero if a
|
|
.I name\^
|
|
is given, but no value, and no alias has been defined for the
|
|
.IR name\^ .
|
|
.TP
|
|
\f3bg\fP \*(OK \f2job\^\fP.\|.\|. \*(CK
|
|
This command is only on systems that support job control.
|
|
Puts each specified
|
|
.I job\^
|
|
into the background.
|
|
The current job is put in the background
|
|
if
|
|
.I job\^
|
|
is not specified.
|
|
See
|
|
.I Jobs
|
|
for a description of the format of
|
|
.IR job .
|
|
.TP
|
|
\(dg \f3break\fP \*(OK \f2n\^\fP \*(CK
|
|
Exit from the enclosing
|
|
.BR for\^ ,
|
|
.BR while\^ ,
|
|
.BR until\^ ,
|
|
or
|
|
.B select\^
|
|
loop, if any.
|
|
If
|
|
.I n\^
|
|
is specified then break
|
|
.I n\^
|
|
levels.
|
|
.TP
|
|
\f3builtin\fP \*(OK \f3\-ds\fP \*(CK \*(OK \f3\-f\fP \f2file\^\fP \*(CK \*(OK \f2name\^\fP .\|.\|. \*(CK
|
|
If
|
|
.I name\^
|
|
is not specified, the built-ins are printed on standard output.
|
|
The
|
|
.B \-s
|
|
option prints only the special built-ins.
|
|
Otherwise, each
|
|
.I name\^
|
|
represents the pathname whose basename is the name of the built-in.
|
|
The entry point function name is determined by prepending
|
|
.B b_
|
|
to the built-in name.
|
|
Special built-ins cannot be bound to a pathname or deleted.
|
|
The
|
|
.B \-d
|
|
option deletes each of the given built-ins.
|
|
On systems that support dynamic loading, the
|
|
.B \-f
|
|
option names a shared library containing the code for built-ins.
|
|
Once a library is loaded, its symbols become available
|
|
for subsequent invocations of
|
|
.BR builtin .
|
|
Multiple libraries can be specified with separate invocations
|
|
of the
|
|
.B builtin
|
|
command.
|
|
Libraries are searched in the reverse order in which they are specified.
|
|
.TP
|
|
.PD 0
|
|
\f3cd\fP \*(OK \f3\-LP\fP \*(CK \*(OK \f2arg\^\fP \*(CK
|
|
.TP
|
|
\f3cd\fP \*(OK \f3\-LP\fP \*(CK \f2old\^\fP \f2new\^\fP
|
|
.PD
|
|
This command can be in either of two forms.
|
|
In the first form it
|
|
changes the current directory to
|
|
.IR arg .
|
|
If
|
|
.I arg\^
|
|
is
|
|
.B \-
|
|
the directory is changed to the previous
|
|
directory.
|
|
The shell
|
|
variable
|
|
.B
|
|
.SM HOME
|
|
is the default
|
|
.IR arg .
|
|
The variable
|
|
.SM
|
|
.B PWD
|
|
is set to the current directory.
|
|
The shell variable
|
|
.B
|
|
.SM CDPATH
|
|
defines the search path for
|
|
the directory containing
|
|
.IR arg .
|
|
Alternative directory names are separated by
|
|
a colon
|
|
.RB ( : ).
|
|
The default path is
|
|
.B <null>
|
|
(specifying the current directory).
|
|
Note that the current directory is specified by a null path name,
|
|
which can appear immediately after the equal sign
|
|
or between the colon delimiters anywhere else in the path list.
|
|
If
|
|
.I arg
|
|
begins with a \f3/\fP then the search path
|
|
is not used.
|
|
Otherwise, each directory in the path is
|
|
searched for
|
|
.IR arg .
|
|
.P
|
|
The obsolete second form of
|
|
.B cd
|
|
substitutes the string
|
|
.I new
|
|
for the string
|
|
.I old
|
|
in the current directory name,
|
|
.SM
|
|
.B PWD
|
|
and tries to change to this new directory.
|
|
.P
|
|
By default, symbolic links are not followed when
|
|
finding the directory name.
|
|
This is equivalent to the
|
|
.B \-L
|
|
option.
|
|
The
|
|
.B \-P
|
|
option causes
|
|
symbolic links to be followed when determining the directory.
|
|
The last instance of
|
|
.B \-L
|
|
or
|
|
.B \-P
|
|
determines which method is used.
|
|
.P
|
|
The
|
|
.B cd\^
|
|
command may not be executed by
|
|
.if \nZ=0 .B rsh\^.
|
|
.if \nZ=1 .B rksh\^.
|
|
.TP
|
|
\f3command\fP \*(OK \f3\-pvV\fP \*(CK \f2name\^\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
|
|
Without the
|
|
.B \-v
|
|
or
|
|
.B \-V
|
|
options,
|
|
.B command
|
|
executes
|
|
.I name\^
|
|
with the arguments given by
|
|
.IR arg .
|
|
The
|
|
.B \-p
|
|
option causes
|
|
a default path to be searched
|
|
rather than the one defined by the value of
|
|
.SM
|
|
.BR PATH .
|
|
Functions will not be searched for when finding
|
|
.IR name .
|
|
In addition, if
|
|
.I name\^
|
|
refers to a special built-in,
|
|
none of the special properties associated with the leading
|
|
daggers will be honored.
|
|
(
|
|
For example, the predefined alias
|
|
.B "redirect=\(fmcommand exec\(fm"
|
|
prevents a script from terminating when an invalid
|
|
redirection is given.)
|
|
With the
|
|
.B \-v
|
|
option,
|
|
.B command
|
|
is equivalent to the built-in
|
|
.B whence
|
|
command described below.
|
|
The
|
|
.B \-V
|
|
options, causes
|
|
.B command
|
|
to
|
|
.BR "whence \-v" .
|
|
.TP
|
|
\(dg \f3continue\fP \*(OK \f2n\^\fP \*(CK
|
|
Resume the next iteration of the enclosing
|
|
.BR for\^ ,
|
|
.BR while\^ ,
|
|
.BR until\^ ,
|
|
or
|
|
.B select\^
|
|
loop.
|
|
If
|
|
.I n\^
|
|
is specified then resume at the
|
|
.IR n -th
|
|
enclosing loop.
|
|
.TP
|
|
\f3disown\fP \*(OK \f2job\^\fP.\|.\|. \*(CK
|
|
Causes the shell not to send a HUP signal to
|
|
each given
|
|
.IR job ,
|
|
or all active jobs if
|
|
.I job
|
|
is omitted,
|
|
when a login shell terminates.
|
|
.TP
|
|
\f3echo\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
|
|
When the first
|
|
.I arg\^
|
|
does not begin with a \-, and
|
|
none of the arguments contain a \e,
|
|
then
|
|
.B echo
|
|
prints each of its arguments separated by a space
|
|
and terminated by a new-line.
|
|
Otherwise, the behavior of
|
|
.B echo
|
|
is system dependent
|
|
and
|
|
.B print
|
|
or
|
|
.B printf
|
|
described below should be used.
|
|
See
|
|
.IR echo (1)
|
|
for usage and description.
|
|
.TP
|
|
\(dg \f3eval\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
|
|
The arguments are read as input
|
|
to the shell
|
|
and the resulting command(s) executed.
|
|
.TP
|
|
\(dg \f3exec\fP \*(OK \f3\-c\fP \*(CK \*(OK \f3\-a\fP \f2name\^\fP \*(CK \*(OK \f2arg\^\fP .\|.\|. \*(CK
|
|
If
|
|
.I arg\^
|
|
is given,
|
|
the command specified by
|
|
the arguments is executed in place of this shell
|
|
without creating a new process.
|
|
The
|
|
.B \-c
|
|
option causes the environment to be cleared before applying
|
|
variable assignments associated with the
|
|
.B exec
|
|
invocation.
|
|
The
|
|
.B \-a
|
|
option
|
|
causes
|
|
.I name\^
|
|
rather than the first
|
|
.IR arg ,
|
|
to become
|
|
.B argv[0]
|
|
for the new process.
|
|
Input/output arguments may appear and
|
|
affect the current process.
|
|
If
|
|
.I arg\^
|
|
is not given
|
|
the effect of this command is to
|
|
modify file descriptors
|
|
as prescribed by the input/output redirection list.
|
|
In this case,
|
|
any file descriptor numbers greater than 2 that are
|
|
opened with this mechanism are closed when invoking
|
|
another program.
|
|
.TP
|
|
\(dg \f3exit\fP \*(OK \f2n\^\fP \*(CK
|
|
Causes the shell to exit
|
|
with the exit status specified by
|
|
.IR n .
|
|
The value will be the least significant 8 bits of the specified status.
|
|
If
|
|
.I n\^
|
|
is omitted then the exit status is that of the last command executed.
|
|
An end-of-file will also cause the shell to exit
|
|
except for a
|
|
shell which has the
|
|
.I ignoreeof
|
|
option (see
|
|
.B set
|
|
below) turned on.
|
|
.TP
|
|
\(dg\(dg \f3export\fP \*(OK \f3\-p\fP \*(CK \*(OK \f2name\^\fP\*(OK\f3=\fP\f2value\^\fP\*(CK \*(CK .\|.\|.
|
|
If
|
|
.I name\^
|
|
is not given,
|
|
the names and values of each variable with
|
|
the export attribute are printed with the values
|
|
quoted in a manner that allows them to be re-inputed.
|
|
The
|
|
.B \-p
|
|
option
|
|
causes the word
|
|
.B export
|
|
to be inserted before each one.
|
|
Otherwise, the given
|
|
.IR name s
|
|
are marked for automatic
|
|
export to the
|
|
.I environment\^
|
|
of subsequently-executed commands.
|
|
.TP
|
|
\f3fg\fP \*(OK \f2job\^\fP.\|.\|. \*(CK
|
|
This command is only on systems that support job control.
|
|
Each
|
|
.I job\^
|
|
specified is brought to the foreground and waited for in
|
|
the specified order.
|
|
Otherwise, the current job is
|
|
brought into the foreground.
|
|
See
|
|
.I Jobs
|
|
for a description of the format of
|
|
.IR job .
|
|
.TP
|
|
\f3getconf\fP \f2name\^\fP \*(OK \f2pathname\^\fP \*(CK
|
|
Prints the current value of the configuration parameter given by
|
|
.IR name .
|
|
.TP
|
|
\f3getopts\fP \f2optstring vname\^\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
|
|
Checks
|
|
.I arg
|
|
for legal options.
|
|
If
|
|
.I arg
|
|
is omitted,
|
|
the positional parameters are used.
|
|
An option argument begins with a
|
|
.B +
|
|
or a
|
|
.BR \- .
|
|
An option not beginning with
|
|
.B +
|
|
or
|
|
.B \-
|
|
or the argument
|
|
.B \-\|\-
|
|
ends the options.
|
|
.I optstring
|
|
contains the letters that
|
|
.I getopts
|
|
recognizes.
|
|
If a letter is followed by a
|
|
.BR : ,
|
|
that option is expected to have an argument.
|
|
The options can be separated from the argument by blanks.
|
|
.P
|
|
.B
|
|
getopts
|
|
places the next option letter it finds inside variable
|
|
.I vname\^
|
|
each time it is invoked with a
|
|
.B +
|
|
prepended when
|
|
.I arg
|
|
begins with a
|
|
.BR + .
|
|
The index of the next
|
|
.I arg
|
|
is stored in
|
|
.SM
|
|
.BR OPTIND .
|
|
The option argument,
|
|
if any,
|
|
gets stored in
|
|
.SM
|
|
.BR OPTARG .
|
|
.P
|
|
A leading
|
|
.B :
|
|
in
|
|
.I optstring
|
|
causes
|
|
.B getopts
|
|
to store the letter of an invalid
|
|
option in
|
|
.SM
|
|
.BR OPTARG ,
|
|
and to set
|
|
.I vname
|
|
to
|
|
.B ?
|
|
for an unknown option and to
|
|
.B :
|
|
when a required option is missing.
|
|
Otherwise,
|
|
.B getopts
|
|
prints an error message.
|
|
The exit status is non-zero when there are no more options.
|
|
.P
|
|
There is no way to specify any of the options
|
|
.BR : ,
|
|
.BR + ,
|
|
.BR \- ,
|
|
.BR ? ,
|
|
.BR [ ,
|
|
and
|
|
.BR ] .
|
|
The option
|
|
.B #
|
|
can only be specified as the first option.
|
|
.TP
|
|
.PD 0
|
|
\f3hist\fP \*(OK \f3\-e\fP \f2ename\^\fP \ \*(CK \*(OK \f3\-nlr\^\fP \*(CK \*(OK \f2first\^\fP \*(OK \f2last\^\fP \*(CK \*(CK
|
|
.TP
|
|
\f3hist \-s \fP \*(OK \f2old\fP\f3\=\fP\f2new\^\fP \*(CK \*(OK \f2command\^\fP \*(CK
|
|
.PD
|
|
In the first form,
|
|
a range of commands from
|
|
.I first\^
|
|
to
|
|
.I last\^
|
|
is selected from the last
|
|
.SM
|
|
.B HISTSIZE
|
|
commands that were typed at the terminal.
|
|
The arguments
|
|
.I first\^
|
|
and
|
|
.I last\^
|
|
may 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
|
|
.B \-l
|
|
option
|
|
is selected,
|
|
the commands are listed on standard output.
|
|
Otherwise, the editor program
|
|
.I ename\^
|
|
is invoked on a file containing these
|
|
keyboard commands.
|
|
If
|
|
.I ename\^
|
|
is not supplied, then the value of the variable
|
|
.SM
|
|
.B HISTEDIT
|
|
is used.
|
|
If
|
|
.SM
|
|
.B HISTEDIT
|
|
is not set then
|
|
.SM
|
|
.B FCEDIT
|
|
(default
|
|
.BR /bin/ed\^ )
|
|
is used as the editor.
|
|
When editing is complete, the edited command(s)
|
|
is executed if the changes have been saved.
|
|
If
|
|
.I last\^
|
|
is not specified
|
|
then it will be set to
|
|
.IR first .
|
|
If
|
|
.I first\^
|
|
is not specified
|
|
the default is the previous command
|
|
for editing and \-16 for listing.
|
|
The option
|
|
.B \-r
|
|
reverses the order of the commands and
|
|
the option
|
|
.B \-n
|
|
suppresses command numbers when listing.
|
|
In the second form the
|
|
.I command\^
|
|
is re-executed after the substitution
|
|
\f2old\^\fP\f3=\fP\f2new\^\fP
|
|
is performed.
|
|
.TP
|
|
\f3jobs\fP \*(OK \f3\-lnp\^\fP \*(CK \*(OK \f2job\^\fP \.\|.\|. \*(CK
|
|
Lists information about each given job; or all active jobs if
|
|
.I job
|
|
is omitted.
|
|
The
|
|
.B \-l
|
|
option lists process ids in addition to the normal information.
|
|
The
|
|
.B \-n
|
|
option only displays jobs that have stopped or exited since last
|
|
notified.
|
|
The
|
|
.B \-p
|
|
option causes only the process group to be listed.
|
|
See
|
|
.I Jobs
|
|
for a description of the format of
|
|
.IR job .
|
|
.TP
|
|
.PD 0
|
|
\f3kill\fP \*(OK \f3\-s\fP \f2signame\^\fP \*(CK \f2job\^\fP .\|.\|.
|
|
.TP
|
|
.PD 0
|
|
\f3kill\fP \*(OK \f3\-n\fP \f2signum\^\fP \*(CK \f2job\^\fP .\|.\|.
|
|
.TP
|
|
\f3kill\fP \f3\-l\fP \*(OK \f2sig\^\fP .\|.\|. \*(CK
|
|
.PD
|
|
Sends either the TERM (terminate) signal or the
|
|
specified signal to the specified jobs or processes.
|
|
Signals are either given by number with the
|
|
.B \-n
|
|
option or by name with the
|
|
.B \-s
|
|
option
|
|
(as given in
|
|
.BR <signal.h> ,
|
|
stripped of the prefix ``SIG'' with
|
|
the exception that SIGCLD is named CHLD).
|
|
For backward compatibility, the
|
|
.B n
|
|
and
|
|
.B s
|
|
can be omitted and the number or name placed immediately
|
|
after the
|
|
.BR \- .
|
|
If the signal being sent is TERM (terminate) or HUP (hangup),
|
|
then the job or process will be sent a CONT (continue) signal
|
|
if it is stopped.
|
|
The argument
|
|
.I job\^
|
|
can be the process id of a process that is not a member of one of the
|
|
active jobs.
|
|
See
|
|
.I Jobs
|
|
for a description of the format of
|
|
.IR job .
|
|
In the third form,
|
|
.BR "kill \-l" ,
|
|
if
|
|
.I sig\^
|
|
is not specified,
|
|
the signal names are listed.
|
|
Otherwise, for each
|
|
.I sig\^
|
|
that is a name, the corresponding signal number is listed.
|
|
For each
|
|
.I sig\^
|
|
that is a number, the signal name corresponding to the
|
|
least significant 8 bits of
|
|
.I sig\^
|
|
is listed.
|
|
.TP
|
|
\f3let\fP \f2arg\^\fP .\|.\|.
|
|
Each
|
|
.I arg
|
|
is a separate
|
|
.I "arithmetic expression"
|
|
to be evaluated.
|
|
See
|
|
.I "Arithmetic Evaluation"
|
|
above, for a description of arithmetic expression evaluation.
|
|
.P
|
|
The exit status is
|
|
0 if the value of the last expression
|
|
is non-zero, and 1 otherwise.
|
|
.TP
|
|
\(dg \f3newgrp\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
|
|
Equivalent to
|
|
.BI "exec /bin/newgrp" " arg\^"
|
|
\&.\|.\|.\^.
|
|
.TP
|
|
\f3print\fP \*(OK \f3\-Rnprs\^\fP \*(CK \*(OK \f3\-u\fP \f2unit\^\fP\*(CK \*(OK \f3\-f\fP \f2format\^\fP \*(CK \*(OK \f2arg\^\fP .\|.\|. \*(CK
|
|
With no options or with option
|
|
.B \-
|
|
or
|
|
.BR \-\|\- ,
|
|
Each
|
|
.I arg
|
|
is printed
|
|
on standard output.
|
|
The
|
|
.B \-f
|
|
option causes the arguments to be printed as
|
|
described by
|
|
.BR printf .
|
|
In this case any
|
|
.BR n ,
|
|
.BR r ,
|
|
.B R
|
|
options are ignored.
|
|
Otherwise,
|
|
unless the
|
|
.B \-R
|
|
or
|
|
.BR \-r ,
|
|
are specified, the following
|
|
escape conventions will be applied:
|
|
.RS
|
|
.PD 0
|
|
.TP
|
|
.B \ea
|
|
The alert character (ascii
|
|
.BR 07 ).
|
|
.TP
|
|
.B \eb
|
|
The backspace character (ascii
|
|
.BR 010 ).
|
|
.TP
|
|
.B \ec
|
|
Causes
|
|
.B print
|
|
to end without processing more arguments and
|
|
not adding a new-line.
|
|
.TP
|
|
.B \ef
|
|
The formfeed character (ascii
|
|
.BR 014 ).
|
|
.TP
|
|
.B \en
|
|
The new-line character (ascii
|
|
.BR 012 ).
|
|
.TP
|
|
.B \er
|
|
The carriage return character (ascii
|
|
.BR 015 ).
|
|
.TP
|
|
.B \et
|
|
The tab character (ascii
|
|
.BR 011 ).
|
|
.TP
|
|
.B \ev
|
|
The vertical tab character (ascii
|
|
.BR 013 ).
|
|
.TP
|
|
.B \eE
|
|
The escape character (ascii
|
|
.BR 033 ).
|
|
.TP
|
|
.B \e\e
|
|
The backslash character \e.
|
|
.PD
|
|
.PP
|
|
The
|
|
.B \-R
|
|
option will print all subsequent arguments and options
|
|
other than
|
|
.BR \-n .
|
|
The
|
|
.B \-p
|
|
option causes the
|
|
arguments to be written onto the pipe
|
|
of the process spawned with
|
|
.B \(bv&
|
|
instead of standard output.
|
|
The
|
|
.B \-s
|
|
option causes the
|
|
arguments to be written onto the history file
|
|
instead of standard output.
|
|
The
|
|
.B \-u
|
|
option can be used to specify a one digit
|
|
file descriptor unit number
|
|
.I unit\^
|
|
on which the
|
|
output will be placed.
|
|
The default is 1.
|
|
If the option
|
|
.B \-n
|
|
is used, no
|
|
.B new-line\^
|
|
is added to the output.
|
|
.RE
|
|
.TP
|
|
\f3printf\fP \f2format\^\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
|
|
The arguments
|
|
.I arg\^
|
|
are printed on standard output
|
|
in accordance with the ANSI-C
|
|
formatting rules associated with the format string
|
|
.IR format .
|
|
The following extensions can also be used:
|
|
.BL
|
|
.LI
|
|
A
|
|
.B %b
|
|
format can be used instead of
|
|
.B %s
|
|
to cause escape sequences in the corresponding
|
|
.I arg\^
|
|
to be expanded as described in
|
|
.BR print.
|
|
.LI
|
|
A
|
|
.B %P
|
|
format can be used instead of
|
|
.B %s
|
|
to cause
|
|
.I arg\^
|
|
to be interpreted as an extended regular
|
|
expression and be printed as a shell pattern.
|
|
.LI
|
|
A
|
|
.B %q
|
|
format can be used instead of
|
|
.B %s
|
|
to cause the resulting string to be quoted in a manner than can
|
|
be reinput to the shell.
|
|
.LI
|
|
The precision field of the
|
|
.B %d
|
|
format can be followed by a
|
|
.B .
|
|
and the output base.
|
|
.LE
|
|
.TP
|
|
\f3pwd\fP \*(OK \f3\-LP\fP \*(CK
|
|
Outputs the value of the current working
|
|
directory.
|
|
If the
|
|
.B \-P
|
|
option is given,
|
|
all symbolic links are resolved from the name.
|
|
.TP
|
|
\f3read\fP \*(OK \f3\-Aprs\^\fP \*(CK \*(OK \f3\-d\fP \f2delim\^\fP\*(CK \*(OK \f3\-t\fP \f2timeout\^\fP\*(CK \*(OK \f3\-u\fP \f2unit\^\fP\*(CK \*(OK \f2vname\f3?\f2prompt\^\f1 \*(CK \*(OK \f2vname\^\fP .\|.\|. \*(CK
|
|
The shell input mechanism.
|
|
One line is read and
|
|
is broken up into fields using the characters in
|
|
.B
|
|
.SM IFS
|
|
as separators.
|
|
The escape character,
|
|
.BR \e ,
|
|
is used to remove any special meaning for the next
|
|
character and for line continuation.
|
|
The
|
|
.B \-d
|
|
option
|
|
causes the read to continue to the first character of
|
|
.I delim\^
|
|
rather than new-line.
|
|
In raw mode,
|
|
.B \-r,
|
|
the
|
|
.B \e
|
|
character is not treated specially.
|
|
The first
|
|
field is assigned to the first
|
|
.IR vname ,
|
|
the second field
|
|
to the second
|
|
.IR vname ,
|
|
etc., with leftover fields assigned to the last
|
|
.IR vname .
|
|
The
|
|
.B \-A
|
|
option causes the variable
|
|
.I vname\^
|
|
to be unset and each field that is read to be stored in
|
|
successive elements of the indexed array
|
|
.IR vname.
|
|
The
|
|
.B \-p
|
|
option causes the input line
|
|
to be taken from the input pipe
|
|
of a process spawned by the shell
|
|
using
|
|
.BR \(bv& .
|
|
If the
|
|
.B \-s
|
|
option is present,
|
|
the input will be saved as a command in the history file.
|
|
The option
|
|
.B \-u
|
|
can be used to specify a one digit file
|
|
descriptor unit
|
|
.I unit\^
|
|
to read from.
|
|
The file descriptor can be opened with the
|
|
.B exec\^
|
|
special built-in command.
|
|
The default value of unit
|
|
.I n\^
|
|
is 0.
|
|
The option
|
|
.B \-t
|
|
is used to specify a timeout in decimal
|
|
seconds when reading from a terminal or pipe.
|
|
If
|
|
.I vname\^
|
|
is omitted then
|
|
.SM
|
|
.B REPLY
|
|
is used as the default
|
|
.IR vname .
|
|
An end-of-file with the
|
|
.B \-p
|
|
option causes cleanup for this process
|
|
so that another can be spawned.
|
|
If the first argument contains a
|
|
.BR ? ,
|
|
the remainder of this word is used as a
|
|
.I prompt\^
|
|
on standard error
|
|
when the shell is interactive.
|
|
The exit status is 0 unless an end-of-file is encountered
|
|
or read has timed out.
|
|
.TP
|
|
\(dg\(dg \f3readonly\fP \*(OK \f3\-p\fP \*(CK \*(OK \f2vname\fP\*(OK\f3=\fP\f2value\^\fP\*(CK \*(CK .\|.\|.
|
|
If
|
|
.I vname\^
|
|
is not given
|
|
the names and values of each variable with
|
|
the readonly attribute is printed with the values
|
|
quoted in a manner that allows them to be re-inputed.
|
|
The
|
|
.B \-p
|
|
option
|
|
causes the word
|
|
.B readonly
|
|
to be inserted before each one.
|
|
Otherwise, the given
|
|
.IR vname s
|
|
are marked
|
|
readonly and these
|
|
names cannot be changed
|
|
by subsequent assignment.
|
|
.TP
|
|
\(dg \f3return\fP \*(OK \f2n\^\fP \*(CK
|
|
Causes a shell
|
|
.I function
|
|
or
|
|
\f3\|.\fP
|
|
script to return
|
|
to the invoking script
|
|
with the return status specified by
|
|
.IR n .
|
|
The value will be the least significant 8 bits of the specified status.
|
|
If
|
|
.I n\^
|
|
is omitted then the return status is that of the last command executed.
|
|
If
|
|
.B return
|
|
is invoked while not in a
|
|
.I function
|
|
or a
|
|
\f3\|.\fP
|
|
script,
|
|
then it behaves the same as
|
|
.BR exit .
|
|
.TP
|
|
\(dg \f3set\fP \*(OK \f3\(+-CPabefhkmnopstuvx\fP \*(CK \*(OK \f3\(+-o\fP \f2option\^\fP \*(CK.\|.\|. \*(OK \f3\(+-A\fP \f2vname\^\fP \*(CK \*(OK \f2arg\^\fP .\|.\|. \*(CK
|
|
The options for this command have meaning as follows:
|
|
.RS
|
|
.PD 0
|
|
.TP 8
|
|
.B \-A
|
|
Array assignment.
|
|
Unset the variable
|
|
.I vname
|
|
and assign values sequentially from the
|
|
list
|
|
.IR arg .
|
|
If
|
|
.B +A
|
|
is used, the variable
|
|
.I vname
|
|
is not unset first.
|
|
.TP 8
|
|
.B \-C
|
|
Prevents redirection
|
|
.B >
|
|
from truncating existing files.
|
|
Files that are created are opened with the O_EXCL mode.
|
|
Require
|
|
.B >\(bv
|
|
to truncate a file when turned on.
|
|
.TP 8
|
|
.B \-P
|
|
Causes the
|
|
.B cd
|
|
and
|
|
.B pwd
|
|
built-in commands to default to physical mode.
|
|
.TP 8
|
|
.B \-a
|
|
All subsequent variables that are defined are automatically exported.
|
|
.TP 8
|
|
.B \-b
|
|
Prints job completion messages as soon as a background job changes
|
|
state rather than waiting for the next prompt.
|
|
.TP 8
|
|
.B \-e
|
|
If a command has a non-zero exit status,
|
|
execute the
|
|
.SM
|
|
.B ERR
|
|
trap, if set,
|
|
and exit.
|
|
This mode is disabled while reading profiles.
|
|
.TP 8
|
|
.B \-f
|
|
Disables file name generation.
|
|
.TP 8
|
|
.B \-h
|
|
Each command
|
|
becomes a tracked alias when first encountered.
|
|
.TP 8
|
|
.B \-k
|
|
(Obsolete). All variable assignment arguments are placed in the environment for a command,
|
|
not just those that precede the command name.
|
|
.TP 8
|
|
.B \-m
|
|
Background jobs will run in a separate process group
|
|
and a line will print upon completion.
|
|
The exit status of background jobs is reported in a completion message.
|
|
On systems with job control,
|
|
this option is turned on automatically for
|
|
interactive shells.
|
|
.TP 8
|
|
.B \-n
|
|
Read commands and check them for syntax errors, but do not execute them.
|
|
Ignored for interactive shells.
|
|
.TP 8
|
|
.B \-o
|
|
The following argument can be one of the following option names:
|
|
.RS
|
|
.TP 8
|
|
.B allexport
|
|
Same as
|
|
.BR \-a .
|
|
.TP 8
|
|
.B errexit
|
|
Same as
|
|
.BR \-e .
|
|
.TP 8
|
|
.B bgnice
|
|
All background jobs are run at a lower priority.
|
|
This is the default mode.
|
|
.TP 8
|
|
.B emacs
|
|
Puts you in an
|
|
.I emacs
|
|
style in-line editor for command entry.
|
|
.TP 8
|
|
.B gmacs
|
|
Puts you in a
|
|
.I gmacs
|
|
style in-line editor for command entry.
|
|
.TP 8
|
|
.B ignoreeof
|
|
The shell will not exit on end-of-file.
|
|
The command
|
|
.B exit
|
|
must be used.
|
|
.TP 8
|
|
.B keyword
|
|
Same as
|
|
.BR \-k .
|
|
.TP 8
|
|
.B markdirs
|
|
All directory names resulting from file name generation have a trailing
|
|
.B /
|
|
appended.
|
|
.TP 8
|
|
.B monitor
|
|
Same as
|
|
.BR \-m .
|
|
.TP 8
|
|
.B noclobber
|
|
Same as
|
|
.BR \-C .
|
|
.TP 8
|
|
.B noexec
|
|
Same as
|
|
.BR \-n .
|
|
.TP 8
|
|
.B noglob
|
|
Same as
|
|
.BR \-f .
|
|
.TP 8
|
|
.B nolog
|
|
Do not save function definitions in history file.
|
|
.TP 8
|
|
.B notify
|
|
Same as
|
|
.BR \-b .
|
|
.TP 8
|
|
.B nounset
|
|
Same as
|
|
.BR \-u .
|
|
.TP 8
|
|
.B physical
|
|
Same as
|
|
.BR \-P .
|
|
.TP 8
|
|
.B privileged
|
|
Same as
|
|
.BR \-p .
|
|
.TP 8
|
|
.B verbose
|
|
Same as
|
|
.BR \-v .
|
|
.TP 8
|
|
.B trackall
|
|
Same as
|
|
.BR \-h .
|
|
.TP 8
|
|
.B vi
|
|
Puts you in insert mode of a
|
|
.I vi\^
|
|
style in-line editor
|
|
until you hit escape character
|
|
.BR 033 .
|
|
This puts you in control mode.
|
|
A return sends the line.
|
|
.TP 8
|
|
.B viraw
|
|
Each character is processed as it is typed
|
|
in
|
|
.I vi\^
|
|
mode.
|
|
.TP 8
|
|
.B xtrace
|
|
Same as
|
|
.BR \-x .
|
|
.TP 8
|
|
If no option name is supplied then the current option settings are printed.
|
|
.RE
|
|
.TP 8
|
|
.B \-p
|
|
Disables processing of the
|
|
.B \s-1$HOME\s+1/.profile
|
|
file and uses the file
|
|
.B /etc/suid_profile
|
|
instead of the
|
|
.SM
|
|
.B ENV
|
|
file.
|
|
This mode is on whenever the effective uid (gid)
|
|
is not equal to the real uid (gid).
|
|
Turning this off causes the effective uid and gid to be
|
|
set to the real uid and gid.
|
|
.TP 8
|
|
.B \-s
|
|
Sort the positional parameters lexicographically.
|
|
.TP 8
|
|
.B \-t
|
|
(Obsolete). Exit after reading and executing one command.
|
|
.TP 8
|
|
.B \-u
|
|
Treat unset parameters as an error when substituting.
|
|
.TP 8
|
|
.B \-v
|
|
Print shell input lines as they are read.
|
|
.TP 8
|
|
.B \-x
|
|
Print commands and their arguments as they are executed.
|
|
.TP 8
|
|
.B \-\|\-
|
|
Do not change any of the options; useful in setting
|
|
.B $1
|
|
to a value beginning with
|
|
.BR \- .
|
|
If no arguments follow this option then the positional parameters are unset.
|
|
.PD
|
|
.PP
|
|
As an obsolete feature,
|
|
if the first
|
|
.I arg\^
|
|
is
|
|
.B \-
|
|
then the
|
|
.B \-x
|
|
and
|
|
.B \-v
|
|
options are turned off and the next
|
|
.I arg
|
|
is treated as the first argument.
|
|
Using
|
|
.B \+
|
|
rather than
|
|
.B \-
|
|
causes these options to be turned off.
|
|
These options can also be used upon invocation of the shell.
|
|
The current set of options may be found in
|
|
.BR $\- .
|
|
Unless
|
|
.B \-A
|
|
is specified,
|
|
the remaining arguments are positional
|
|
parameters and are assigned, in order, to
|
|
.B $1
|
|
.B $2
|
|
\&.\|.\|.\^.
|
|
If no arguments are given then the names and values
|
|
of all variables are printed on the standard output.
|
|
.RE
|
|
.TP
|
|
\(dg \f3shift\fP \*(OK \f2n\^\fP \*(CK
|
|
.br
|
|
The positional parameters from
|
|
\f3$\fP\f2n\fP\f3+1\fP
|
|
\&.\|.\|.
|
|
are renamed
|
|
.B $1
|
|
\&.\|.\|.\^
|
|
, default
|
|
.I n\^
|
|
is 1.
|
|
The parameter
|
|
.I n\^
|
|
can be any arithmetic expression that evaluates to a non-negative
|
|
number less than or equal to
|
|
.BR $# .
|
|
.TP
|
|
\f3sleep\fP \f2seconds\^\fP
|
|
Suspends execution for the number of decimal seconds or fractions of a
|
|
second given by
|
|
.IR seconds .
|
|
.TP
|
|
\(dg \f3trap\fP \*(OK \f3\-p\fP \*(CK \*(OK \f2action\^\fP \*(CK \*(OK \f2sig\^\fP \*(CK .\|.\|.
|
|
The \-p
|
|
option causes the trap
|
|
action associated with each trap as specified by the arguments
|
|
to be printed with appropriate quoting.
|
|
Otherwise,
|
|
.I action\^
|
|
will be processed as if it were an argument to
|
|
.B eval
|
|
when the shell
|
|
receives signal(s)
|
|
.IR sig .
|
|
Each
|
|
.I sig\^
|
|
can be given as a number or as the name of the signal.
|
|
Trap commands are executed in order of signal number.
|
|
Any attempt to set a trap on a signal that
|
|
was ignored on entry to the current shell
|
|
is ineffective.
|
|
If
|
|
.I action\^
|
|
is omitted and the first
|
|
.I sig\^
|
|
is a number, or if
|
|
.I action\^
|
|
is
|
|
.BR \- ,
|
|
then the trap(s) for each
|
|
.I sig\^
|
|
are reset
|
|
to their original values.
|
|
If
|
|
.I action\^
|
|
is the null
|
|
string then this signal is ignored by the shell and by the commands
|
|
it invokes.
|
|
If
|
|
.I sig\^
|
|
is
|
|
.SM
|
|
.B ERR
|
|
then
|
|
.I action\^
|
|
will be executed whenever a command has a non-zero exit status.
|
|
If
|
|
.I sig\^
|
|
is
|
|
.SM
|
|
.B DEBUG
|
|
then
|
|
.I action\^
|
|
will be executed before each command.
|
|
If
|
|
.I sig\^
|
|
is
|
|
.B 0
|
|
or
|
|
.SM
|
|
.B EXIT
|
|
and the
|
|
.B trap
|
|
statement is executed inside the body of a function,
|
|
then the command
|
|
.I action\^
|
|
is executed
|
|
after the function completes.
|
|
If
|
|
.I sig\^
|
|
is
|
|
.B 0
|
|
or
|
|
.SM
|
|
.B EXIT
|
|
for a
|
|
.B trap
|
|
set outside any function
|
|
then the command
|
|
.I action\^
|
|
is executed
|
|
on exit from the shell.
|
|
If
|
|
.I sig\^
|
|
is
|
|
.SM
|
|
.B KEYBD
|
|
then
|
|
.I action\^
|
|
will be executed whenever a key is read
|
|
while in
|
|
.BR emacs ,
|
|
.BR gmacs ,
|
|
or
|
|
.B vi\^
|
|
mode.
|
|
The
|
|
.B trap
|
|
command
|
|
with no arguments prints a list
|
|
of commands associated with each signal number.
|
|
.TP
|
|
\(dg\(dg \f3typeset\fP \*(OK \f3\(+-AHflnprtux\^\fP \*(CK \*(OK \f3\(+-EFLRZi\*(OK\f2n\^\fP\*(CK \*(CK \*(OK \f2vname\^\fP\*(OK\f3=\fP\f2value\^\fP \*(CK \^ \*(CK .\|.\|.
|
|
Sets attributes and values for shell variables and functions.
|
|
When invoked inside a function,
|
|
a new instance of the variables
|
|
.I vname\^
|
|
is created.
|
|
The variables' value and type are restored
|
|
when the function completes.
|
|
The following list of attributes may be specified:
|
|
.RS
|
|
.PD 0
|
|
.TP
|
|
.B \-A
|
|
Declares
|
|
.I vname\^
|
|
to be an associate array.
|
|
Subscripts are strings rather than arithmetic
|
|
expressions.
|
|
.TP
|
|
.B \-E
|
|
Declares
|
|
.I vname\^
|
|
to be a double precision floating point number.
|
|
If
|
|
.I n\^
|
|
is non-zero it defines the number of significant figures
|
|
that are used when expanding
|
|
.IR vname .
|
|
Otherwise ten significant figures will be used.
|
|
.TP
|
|
.B \-F
|
|
Declares
|
|
.I vname\^
|
|
to be a double precision floating point number.
|
|
If
|
|
.I n\^
|
|
is non-zero it defines the number of places after the
|
|
decimal point that are used when expanding
|
|
.IR vname .
|
|
Otherwise ten places after the decimal point will be used.
|
|
.TP
|
|
.B \-H
|
|
This option provides UNIX to host-name file mapping on non-UNIX
|
|
machines.
|
|
.TP
|
|
.B \-L
|
|
Left justify and remove leading blanks from
|
|
.IR value .
|
|
If
|
|
.I n\^
|
|
is non-zero it defines the width
|
|
of the field,
|
|
otherwise it is determined by the width of the value of
|
|
first assignment.
|
|
When the variable is assigned to, it is
|
|
filled on the right with blanks or truncated, if necessary, to
|
|
fit into the field.
|
|
The
|
|
.B \-R
|
|
option is turned off.
|
|
.TP
|
|
.B \-R
|
|
Right justify and fill with leading blanks.
|
|
If
|
|
.I n\^
|
|
is non-zero it defines the width
|
|
of the field,
|
|
otherwise it is determined by the width of the value of
|
|
first assignment.
|
|
The field is left filled with blanks or
|
|
truncated from the end if the
|
|
variable is reassigned.
|
|
The
|
|
.B \-L
|
|
option is turned off.
|
|
.TP
|
|
.B \-Z
|
|
Right justify and fill with leading zeros if
|
|
the first non-blank character is a digit and the
|
|
.B \-L
|
|
option has not been set.
|
|
Remove leading zeros if the
|
|
.B \-L
|
|
option is also set.
|
|
If
|
|
.I n\^
|
|
is non-zero it defines the width
|
|
of the field,
|
|
otherwise it is determined by the width of the value of
|
|
first assignment.
|
|
.TP
|
|
.B \-f
|
|
The names refer to function names rather than
|
|
variable names.
|
|
No assignments can be made and the only other
|
|
valid options are
|
|
.BR \-t ,
|
|
.B \-u
|
|
and
|
|
.BR \-x .
|
|
The option
|
|
.B \-t
|
|
turns on execution tracing for this function.
|
|
The option
|
|
.B \-u
|
|
causes this function to be marked undefined.
|
|
The
|
|
.SM
|
|
.B FPATH
|
|
variable will be searched to find the function definition
|
|
when the function is referenced.
|
|
.TP
|
|
.B \-i
|
|
Declares
|
|
.I vname\^
|
|
to be represented internally as integer.
|
|
The right hand side of an assignment is evaluated as an
|
|
arithmetic expression when assigning to an integer.
|
|
If
|
|
.I n\^
|
|
is non-zero it defines the output arithmetic base,
|
|
otherwise the the output base will be ten.
|
|
.TP
|
|
.B \-l
|
|
All upper-case characters are
|
|
converted to lower-case.
|
|
The upper-case option,
|
|
.B \-u
|
|
is turned off.
|
|
.TP
|
|
.B \-n
|
|
Declares
|
|
.I vname\^
|
|
to be a reference to the variable whose name is
|
|
defined by the value of variable
|
|
.IR vname .
|
|
This is usually used to reference a variable inside
|
|
a function whose name has been passed as an argument.
|
|
.TP
|
|
.B \-r
|
|
The given
|
|
.IR vname s
|
|
are marked
|
|
readonly and these
|
|
names cannot be changed
|
|
by subsequent assignment.
|
|
.TP
|
|
.B \-t
|
|
Tags the variables.
|
|
Tags are user definable and have no special
|
|
meaning to the shell.
|
|
.TP
|
|
.B \-u
|
|
All lower-case characters are converted
|
|
to upper-case characters.
|
|
The lower-case option,
|
|
.BR \-l ,
|
|
is turned off.
|
|
.TP
|
|
.B \-x
|
|
The given
|
|
.IR vname s
|
|
are marked for automatic
|
|
export to the
|
|
.I environment\^
|
|
of subsequently-executed commands.
|
|
Variables whose names contain a \fB\s+2.\s-2\fP
|
|
can not be exported.
|
|
.PD
|
|
.PP
|
|
The
|
|
.B \-i
|
|
attribute can not be specified along with
|
|
.BR \-R ,
|
|
.BR \-L ,
|
|
.BR \-Z ,
|
|
or
|
|
.BR \-f .
|
|
.PP
|
|
Using
|
|
.B \+
|
|
rather than
|
|
.B \-
|
|
causes these options to be turned off.
|
|
If no
|
|
.I vname\^
|
|
arguments are given
|
|
a list of
|
|
.I vnames\^
|
|
(and optionally the
|
|
.IR values\^ )
|
|
of the
|
|
.I variables\^
|
|
is printed.
|
|
(Using
|
|
.B \+
|
|
rather than
|
|
.B \-
|
|
keeps the
|
|
values from being printed.)
|
|
The
|
|
.B \-p
|
|
option causes
|
|
.B typeset
|
|
followed by the the option letters
|
|
to be printed before each name
|
|
rather than the names of the options.
|
|
If any option other than
|
|
.B \-p
|
|
is given,
|
|
only those variables
|
|
which have all of the given
|
|
options are printed.
|
|
Otherwise, the
|
|
.IR vname s
|
|
and
|
|
.I attributes\^
|
|
of all
|
|
.I variables\^
|
|
are printed.
|
|
.RE
|
|
.TP
|
|
\f3ulimit\fP \*(OK \f3\-HSacdfmnpstv\fP \*(CK \*(OK \f2limit\^\fP \*(CK
|
|
Set or display a resource limit.
|
|
The available resources limits are listed below.
|
|
Many systems do not contain one or more of these limits.
|
|
The limit for a specified resource is set when
|
|
.I limit\^
|
|
is specified.
|
|
The value of
|
|
.I limit\^
|
|
can be a number in the unit specified below with each resource,
|
|
or the value
|
|
.BR unlimited .
|
|
The
|
|
.B \-H
|
|
and
|
|
.B \-S
|
|
options specify whether the hard limit or the
|
|
soft limit for the given resource is set.
|
|
A hard limit cannot be increased once it is set. A soft
|
|
limit can be increased up to the value of the hard limit.
|
|
If neither the
|
|
.B H
|
|
or
|
|
.B S
|
|
options is specified, the limit applies to both.
|
|
The current resource limit is printed when
|
|
.I limit\^
|
|
is omitted.
|
|
In this case the soft limit is printed unless
|
|
.B H
|
|
is specified.
|
|
When more that one resource is specified, then the limit
|
|
name and unit is printed before the value.
|
|
.RS
|
|
.PD 0
|
|
.TP
|
|
.B \-a
|
|
Lists all of the current resource limits.
|
|
.TP
|
|
.B \-c
|
|
The number of 512-byte blocks on the size of core dumps.
|
|
.TP
|
|
.B \-d
|
|
The number of K-bytes on the size of the data area.
|
|
.TP
|
|
.B \-f
|
|
The number of 512-byte blocks on files that can be written the
|
|
current process or by child processes (files of any size may be read).
|
|
.TP
|
|
.B \-m
|
|
The number of K-bytes on the size of physical memory.
|
|
.TP
|
|
.B \-n
|
|
The number of file descriptors plus 1.
|
|
.TP
|
|
.B \-p
|
|
The number of 512-byte blocks for pipe buffering.
|
|
.TP
|
|
.B \-s
|
|
The number of K-bytes on the size of the stack area.
|
|
.TP
|
|
.B \-t
|
|
The number of seconds to be used by each process.
|
|
.TP
|
|
.B \-v
|
|
The number of K-bytes for virtual memory.
|
|
.PD
|
|
.PP
|
|
If no option is given,
|
|
.B \-f
|
|
is assumed.
|
|
.RE
|
|
.TP
|
|
\f3umask\fP \*(OK \f3\-S\fP \*(CK \*(OK \f2mask\^\fP \*(CK
|
|
The user file-creation mask is set to
|
|
.I mask\^
|
|
(see
|
|
.IR umask (2)).
|
|
.I mask
|
|
can either be an octal number or
|
|
a symbolic value as described in
|
|
.IR chmod (1).
|
|
If a symbolic value is given,
|
|
the new
|
|
umask value is the complement of the result of
|
|
applying
|
|
.I mask\^
|
|
to the complement of the previous umask value.
|
|
If
|
|
.I mask\^
|
|
is omitted, the current value of the mask is printed.
|
|
The
|
|
.B \-S
|
|
option causes the mode to be printed as a symbolic
|
|
value. Otherwise, the
|
|
mask is printed in octal.
|
|
.TP
|
|
\(dg \f3unalias\fP \*(OK \f3\-a\fP \*(CK \f2name\^\fP .\|.\|.
|
|
The
|
|
.I aliases\^
|
|
given by the list of
|
|
.IR name s
|
|
are removed from the
|
|
.I alias\^
|
|
list.
|
|
The
|
|
.B \-a
|
|
option causes all the
|
|
aliases to be unset.
|
|
.TP
|
|
\(dg\f3unset\fP \*(OK \f3\-fv\fP \*(CK \f2vname\^\fP .\|.\|.
|
|
The variables given by the list of
|
|
.IR vname s
|
|
are unassigned,
|
|
i.e.,
|
|
their values and attributes are erased.
|
|
Readonly variables cannot be unset.
|
|
If the
|
|
.B \-f
|
|
option
|
|
is set, then the names refer to
|
|
.I function\^
|
|
names.
|
|
If the
|
|
.B \-v
|
|
option is set, then the names refer to
|
|
.I variable\^
|
|
names.
|
|
The default is equivalent to
|
|
.BR \-v .
|
|
Unsetting
|
|
.SM
|
|
.BR ERRNO ,
|
|
.SM
|
|
.BR LINENO ,
|
|
.SM
|
|
.BR MAILCHECK ,
|
|
.SM
|
|
.BR OPTARG ,
|
|
.SM
|
|
.BR OPTIND ,
|
|
.SM
|
|
.BR RANDOM ,
|
|
.SM
|
|
.BR SECONDS ,
|
|
.SM
|
|
.BR TMOUT ,
|
|
and
|
|
.SM
|
|
.B _
|
|
removes their special meaning even if they are
|
|
subsequently assigned to.
|
|
.TP
|
|
\f3wait\fP \*(OK \f2job\^\fP .\|.\|. \*(CK
|
|
Wait for the specified
|
|
.I job
|
|
and
|
|
report its termination status.
|
|
If
|
|
.I job\^
|
|
is not given then all currently active child processes are waited for.
|
|
The exit status from this command is that of
|
|
the last process waited for.
|
|
See
|
|
.I Jobs
|
|
for a description of the format of
|
|
.IR job .
|
|
.TP
|
|
\f3whence\fP \*(OK \f3\-apv\fP \*(CK \f2name\^\fP .\|.\|.
|
|
For each
|
|
.IR name ,
|
|
indicate how it
|
|
would be interpreted if used as a command name.
|
|
.P
|
|
The
|
|
.B \-v
|
|
option
|
|
produces a more verbose report.
|
|
.P
|
|
The
|
|
.B \-p
|
|
option
|
|
does a path search for
|
|
.I name\^
|
|
even if name is an alias, a function, or a reserved word.
|
|
The
|
|
.B \-a
|
|
is similar to the
|
|
.B \-v
|
|
option but causes
|
|
all interpretations of the given name to be reported.
|
|
.SS Invocation.
|
|
If the shell is invoked by
|
|
.IR exec (2),
|
|
and the first character of argument zero
|
|
.RB ( $0 )
|
|
is
|
|
.BR \- ,
|
|
then the shell is assumed to be a
|
|
.I login
|
|
shell and
|
|
commands are read from
|
|
.B /etc/profile
|
|
and then from either
|
|
.B .profile
|
|
in the current directory or
|
|
.BR \s-1$HOME\s+1/.profile ,
|
|
if either file exists.
|
|
Next, commands are read from
|
|
the file named by
|
|
performing parameter expansion, command substitution,
|
|
and arithmetic substitution on
|
|
the value of the environment variable
|
|
.SM
|
|
.B ENV
|
|
if the file exists.
|
|
If the
|
|
.B \-s
|
|
option is not present and
|
|
.I arg\^
|
|
is, then a path search is performed on the first
|
|
.I arg\^
|
|
to determine the name of the script to execute.
|
|
The script
|
|
.I arg\^
|
|
must have read permission and any
|
|
.I setuid
|
|
and
|
|
.I getgid
|
|
settings will be ignored.
|
|
If the script is not found on the path,
|
|
.I arg\^
|
|
is processed as if it named a built-in command or function.
|
|
Commands are then read as described below;
|
|
the following option are interpreted by the shell
|
|
when it is invoked:
|
|
.PP
|
|
.PD 0
|
|
.TP 10
|
|
.BI \-c
|
|
If the
|
|
.B \-c
|
|
option is present then
|
|
commands are read from the first
|
|
.IR arg .
|
|
Any remaining arguments become
|
|
position parameters starting at
|
|
.B 0 .
|
|
.TP
|
|
.B \-s
|
|
If the
|
|
.B \-s
|
|
option is present or if no
|
|
arguments remain
|
|
then commands are read from the standard input.
|
|
Shell output,
|
|
except for the output of the
|
|
.I Special Commands\^
|
|
listed above,
|
|
is written to
|
|
file descriptor 2.
|
|
.TP
|
|
.B \-i
|
|
If the
|
|
.B \-i
|
|
option is present or
|
|
if the shell input and output are attached to a terminal (as told by
|
|
.IR ioctl (2))
|
|
then this shell is
|
|
.IR interactive .
|
|
In this case \s-1TERM\s+1 is ignored (so that \f3kill 0\fP
|
|
does not kill an interactive shell) and \s-1INTR\s+1 is caught and ignored
|
|
(so that
|
|
.B wait
|
|
is interruptible).
|
|
In all cases, \s-1QUIT\s+1 is ignored by the shell.
|
|
.TP
|
|
.B \-r
|
|
If the
|
|
.B \-r
|
|
option is present the shell is a restricted shell.
|
|
.PD
|
|
.PP
|
|
The
|
|
.B \-I
|
|
.I filename\^
|
|
option is used
|
|
to generate a cross reference database
|
|
that can be used by a separate utility
|
|
to find definitions and references for variables and commands.
|
|
.PP
|
|
The remaining options and arguments are described under the
|
|
.B set
|
|
command above.
|
|
An optional
|
|
.B \-
|
|
as the first argument is ignored.
|
|
.if \nZ=0 \{.SS Rsh Only.
|
|
.I Rsh\}
|
|
.if \nZ=1 \{.SS Rksh Only.
|
|
.I Rksh\}
|
|
is used to set up login names and execution environments whose
|
|
capabilities are more controlled than those of the standard shell.
|
|
The actions of
|
|
.if \nZ=0 .B rsh\^
|
|
.if \nZ=1 .B rksh\^
|
|
are identical to those of
|
|
.if \nZ=0 .BR sh\^ ,
|
|
.if \nZ=1 .BR ksh\^ ,
|
|
except that the following are disallowed:
|
|
.RS
|
|
.PD 0
|
|
.PP
|
|
changing directory (see
|
|
.IR cd (1)),
|
|
.br
|
|
setting or unsetting the value or attributes of
|
|
.SM
|
|
.BR SHELL ,
|
|
.SM
|
|
.BR ENV ,
|
|
or
|
|
.SM
|
|
.BR PATH\*S,
|
|
.br
|
|
specifying path or
|
|
command names containing
|
|
.BR / ,
|
|
.br
|
|
redirecting output
|
|
.RB ( > ,
|
|
.BR >| ,
|
|
.BR <> ,
|
|
and
|
|
.BR >> ).
|
|
.PD
|
|
.RE
|
|
.PP
|
|
The restrictions above are enforced
|
|
after \f3.profile\fP and the
|
|
.SM
|
|
.B ENV
|
|
files are interpreted.
|
|
.PP
|
|
When a command to be executed is found to be a shell procedure,
|
|
.if \nZ=0 \{.B rsh\^
|
|
invokes
|
|
.I sh\^\}
|
|
.if \nZ=1 \{.B rksh\^
|
|
invokes
|
|
.I ksh\^\}
|
|
to execute it.
|
|
Thus, it is possible to provide to the end-user shell procedures
|
|
that have access to the full power of
|
|
the standard shell,
|
|
while imposing a limited menu of commands;
|
|
this scheme assumes that the end-user does not have write and
|
|
execute permissions in the same directory.
|
|
.PP
|
|
The net effect of these rules is that the writer of the
|
|
.B .profile
|
|
has complete control over user actions,
|
|
by performing guaranteed setup actions
|
|
and leaving the user in an appropriate directory
|
|
(probably
|
|
.I not\^
|
|
the login directory).
|
|
.PP
|
|
The system administrator often sets up a directory
|
|
of commands
|
|
(i.e.,
|
|
.BR /usr/rbin )
|
|
that can be safely invoked by
|
|
.if \nZ=0 .BR rsh .
|
|
.if \nZ=1 .BR rksh .
|
|
.SH EXIT STATUS
|
|
Errors detected by the shell, such as syntax errors,
|
|
cause the shell
|
|
to return a non-zero exit status.
|
|
Otherwise, the shell returns the exit status of
|
|
the last command executed (see also the
|
|
.B exit
|
|
command above).
|
|
If the shell is being used non-interactively
|
|
then execution of the shell file is abandoned.
|
|
Run time errors detected by the shell are reported by
|
|
printing the command or function name and the error condition.
|
|
If the line number that the error occurred on is greater than one,
|
|
then the line number is also printed in square brackets
|
|
.RB ( "[]" )
|
|
after the command or function name.
|
|
.SH FILES
|
|
/etc/passwd
|
|
.br
|
|
/etc/profile
|
|
.br
|
|
/etc/suid_profile
|
|
.br
|
|
\s-1$HOME\s+1/\f3.\fPprofile
|
|
.br
|
|
/tmp/sh\(**
|
|
.br
|
|
/dev/null
|
|
.SH SEE ALSO
|
|
cat(1),
|
|
cd(1),
|
|
chmod(1),
|
|
cut(1),
|
|
echo(1),
|
|
emacs(1),
|
|
env(1),
|
|
gmacs(1),
|
|
newgrp(1),
|
|
stty(1),
|
|
test(1),
|
|
umask(1),
|
|
vi(1),
|
|
dup(2),
|
|
exec(2),
|
|
fork(2),
|
|
ioctl(2),
|
|
lseek(2),
|
|
paste(1),
|
|
pipe(2),
|
|
umask(2),
|
|
ulimit(2),
|
|
wait(2),
|
|
rand(3),
|
|
a.out(5),
|
|
profile(5),
|
|
environ(7).
|
|
.PP
|
|
Morris I. Bolsky and David G. Korn,
|
|
.IR "The KornShell Command and Programming Language" ,
|
|
Prentice Hall, 1989, ISBN 0-13-516972-0.
|
|
.SH CAVEATS
|
|
.PP
|
|
If a command
|
|
is executed, and then a command with the same name is
|
|
installed in a directory in the search path before the directory where the
|
|
original command was found, the shell will continue to
|
|
.I exec\^
|
|
the original command.
|
|
Use the
|
|
.B \-t
|
|
option of the
|
|
.B alias\^
|
|
command to correct this situation.
|
|
.PP
|
|
Some very old shell scripts contain a
|
|
.B ^
|
|
as a synonym for the pipe character
|
|
.BR \(bv .
|
|
.PP
|
|
Using the
|
|
.B hist\^
|
|
built-in command within a compound command will cause the whole
|
|
command to disappear from the history file.
|
|
.PP
|
|
The built-in command \f3\|.\fP \f2file\^\fP
|
|
reads the whole file before any commands are executed.
|
|
Therefore,
|
|
.B alias
|
|
and
|
|
.B unalias
|
|
commands in the file
|
|
will not apply to any commands defined in the file.
|
|
.PP
|
|
Traps are not processed while a job is waiting for a foreground process.
|
|
Thus, a trap on
|
|
.B CHLD
|
|
won't be executed until the foreground job terminates.
|
|
|