ksh - Korn shell
ksh [-ir] [-c command_string | -s] [+|-abCefhkmnopstuvx] |
[+|-o] [option...] [+|-A name] [argument...] | [file]
[argument...]
The Korn shell is an interactive command interpreter and a
command programming language.
Causes ksh to read commands from command_string. Causes
ksh to run as an interactive shell. The SIGTERM signal is
thus ignored, and the SIGINT signal is caught, causing the
current command to be terminated and a new prompt to be
output. Causes ksh to run as a restricted shell. Causes
ksh to read commands from standard input. If you do not
specify the -c option or do not specify any arguments to
ksh other than options, ksh automatically invokes the -s
option. The -c option overrides the -s option, however.
The rest of the options that can be used with ksh are
described under the set subcommand in the subsection Special
ksh Commands.
The Korn shell carries out commands either interactively
from a terminal keyboard or from a file. The Korn shell
is backward compatible with the Bourne shell (invoked with
the sh command) and contains virtually all of the Bourne
shell features, as well as several of the best features of
the C shell. See the sh(1) reference page for additional
instructions on shell invocation.
Some important features of the Korn shell are as follows:
Command aliasing File name substitution Tilde substitution
Command substitution Parameter substitution Job control
Inline editing
A file from which the shell carries out commands is usually
called a shell script, a shell procedure, or a command
file.
A simple command is a sequence of words separated by
spaces or tabs. A word is a sequence of characters that
contains no unquoted spaces or tabs. The first word in
the sequence (numbered as 0), usually specifies the name
of a command. Any remaining words, with a few exceptions,
are passed to that command. A space refers to both spaces
and tabs.
The value of a simple command is its exit value if it ends
normally, or (octal) 200 added to the signal number if it
terminates due to a signal. For a list of status values,
see the signal(2) reference page.
A pipeline is a sequence of one or more commands separated
by a | (vertical bar) or, for historical compatibility, by
a ^ (circumflex). In a pipeline, the standard output of
each command becomes the standard input of the next command.
Each command runs as a separate process, and the
shell waits for the last command to end. A filter is a
command that reads its standard input, transforms it in
some way, then writes it to its standard output. A
pipeline normally consists of a series of filters.
Although the processes in a pipeline (except the first
process) can execute in parallel, they are synchronized to
the extent that each program needs to read the output of
its predecessor.
The exit value of a pipeline is the exit value of the last
command.
A list is a sequence of one or more pipelines separated by
; (semicolon), & (ampersand), && (two ampersands), or ||
(two vertical bars) and optionally ended by a ; (semicolon),
an & (ampersand), a |& (coprocess), or a newline.
These separators and terminators have the following
effects: Causes sequential execution of the preceding
pipeline; the shell waits for the pipeline to finish.
Causes asynchronous execution of the preceding pipeline;
the shell does not wait for the pipeline to finish.
Causes the list following it to be executed only if the
preceding pipeline returns a 0 (zero) exit value. Causes
the list following it to be executed only if the preceding
pipeline returns a nonzero exit value.
The cd command is an exception; if it returns a
nonzero exit value, no subsequent commands in a
list are executed, regardless of the separator
characters.
The ; and & separators have equal precedence, as do && and
||. The single-character separators have lower precedence
than the double-character separators. An unquoted newline
character following a pipeline functions the same as a ;
(semicolon).
Comments [Toc] [Back]
The shell treats as a comment any word that begins with a
# character and ignores that word and all characters following
up to the next newline character.
Shell Flow Control Statements [Toc] [Back]
Unless otherwise stated, the value returned by a command
is that of the last simple command executed in the command.
Each time a for command is executed, identifier is
set to the next word taken from the in word list. If in
word ... is omitted, the for command executes the do list
once for each positional parameter that is set. (See
Parameter Substitution.) Execution ends when there are no
more words in the list. Prints on standard error (file
descriptor 2), the set of words, each preceded by a number.
If in word... is omitted, then the positional
parameters are used instead. (See Parameter Substitution.)
The 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 words, then the value of the parameter
identifier is set to the word corresponding to this
number. If this line is empty, the selection list is
printed again. Otherwise, the value of the parameter
identifieris set to null. The contents of the line read
from standard input is saved in the REPLY parameter. The
list is executed for each selection until a break or Endof-File
is encountered. Executes the list associated with
the first pattern that matches word. The form of the patterns
is the same as that used for file name generation.
(See File name Generation.) Executes the list following
if and, if it returns a 0 (zero) exit status, executes the
list following the first then. Otherwise, the list following
elif is executed and, if its value is 0 (zero), the
list following the next then is executed. Failing that,
the else list is executed. If no else list or then list
is executed, then the if command returns a 0 (zero) exit
status. Executes the while list repeatedly, and if the
exit status of the last command in the list is 0 (zero),
executes the do list; otherwise the loop terminates. If
no commands in the do list are executed, then the while
command returns a 0 (zero) exit status; The keyword until
can be used in place of while to negate the loop termination
test. Executes list in a separate environment. If
two adjacent open parentheses are needed for nesting, a
space must be inserted to avoid arithmetic evaluation as
described later. Executes list. Unlike the metacharacters
( and ), { and } are reserved words and must be at
the beginning of a line or after a ; (semicolon) in order
to be recognized. Evaluates expression and returns a 0
(zero) exit status when expression is TRUE. See Conditional
Expressions for a description of expression.
Defines a function that is referenced by identifier. The
body of the function is the list of commands between { and
}. (See Functions.) Executes pipeline and prints the
elapsed time as well as the user and system time on standard
error.
The following reserved words are recognized only when they
appear, without single or double quotes, as the first word
of a command:
if for case then while esac else until function
elif do select fi done time { } [[ ]]
Command Aliasing [Toc] [Back]
The first word of each command is replaced by the text of
an alias (if an alias for this word was defined). The
first character of an alias name can be any nonspecial
printable character, but the rest of the characters must
be the same as for a valid identifier. The replacement
string can contain any valid shell script, including the
metacharacters previously listed. The first word of each
command in the replaced text, other than any that are in
the process of being replaced, is tested for aliases. If
the last character of the alias value is a space, the word
following the alias will also be checked for alias substitution.
Aliases can be used to redefine special built-in commands
but cannot be used to redefine the reserved words previously
listed. Aliases can be created, listed, and
exported with the alias command and can be removed with
the unalias command. Exported aliases remain in effect
for scripts invoked by name, but must be reinitialized for
separate invocations of the shell. (See Invocation.)
Aliasing is performed when scripts are read, not while
they are executed. Therefore, for an alias to take
effect, the alias definition command has to be executed
before the command that references the alias is read.
Aliases are frequently used as shorthand for full path
names. An option to the aliasing facility allows the value
of the alias to be automatically set to the full path name
of the corresponding command. These aliases are called
tracked aliases.
The value of a tracked alias is defined the first time the
corresponding command is looked up and becomes undefined
each time the PATH environment variable is reset. These
aliases remain tracked so that the next subsequent reference
will redefine the value. Several tracked aliases are
compiled into the shell. The -h option of the set command
makes each referenced command name into a tracked alias.
The following exported aliases are compiled into the
shell, but can be unset or redefined:
autoload='typeset -fu' false='let 0' functions='typeset
-f' hash='alias -t' history='fc -l' integer='typeset -i'
nohup='nohup ' r='fc -e -' true=':' type='whence -v'
Tilde Substitution [Toc] [Back]
After alias substitution is performed, each word is
checked to see if it begins with an unquoted ~ (tilde).
If it does, then the word up to a / (slash) is checked to
see if it matches a user name in the /etc/passwd file. If
a match is found, the tilde and the matched login name are
replaced by the login directory of the matched user. This
is called a tilde substitution. If no match is found, the
original text is left unchanged. A tilde by itself, or in
front of a /, is replaced by the value of the HOME parameter.
A tilde followed by a + (plus sign) or - (dash) is
replaced by $PWD and $OLDPWD, respectively.
In addition, tilde substitution is attempted when the
value of a variable assignment parameter begins with a
tilde.
Command Substitution [Toc] [Back]
The standard output from a command enclosed in parentheses
preceded by a dollar sign $( ) or a pair of `` (grave
accents) can be used as part or all of a word; trailing
newlines are removed. In the second (archaic) form, the
string between the grave accents is processed for special
quoting characters before the command is executed. (See
Quoting.) The command substitution $(cat file) can be
replaced by the equivalent but faster $(<file). Command
substitution of most special commands that do not perform
input/output redirection are carried out without creating
a separate process. An arithmetic expression enclosed in
double parentheses preceded by a dollar sign ( $(( )) ) is
replaced by the value of the arithmetic expression within
the double parentheses.
Parameter Substitution [Toc] [Back]
A parameter is an identifier, one or more digits, or any
of the characters *, @, #, ?, -, $, and !. A named parameter
(a parameter denoted by an identifier) has a value
and 0 (zero) or more attributes. Named parameters can be
assigned values and attributes by using the typeset special
command. The attributes supported by the shell are
described later with the typeset special command.
Exported parameters pass values and attributes to the
environment.
The shell supports a 1-dimensional array facility. An
element of an array parameter is referenced by a subscript.
A subscript is denoted by an arithmetic expression
enclosed within [ ] (brackets). To assign values to an
array, use set -A name value... The value of all subscripts
must be in the range of 0 to 1023. Arrays need
not be declared. Any reference to a named parameter with
a valid subscript is legal and an array is created if necessary.
Referencing an array without a subscript is
equivalent to referencing the element 0 (zero).
The value of a named parameter can be assigned by the following:
name=value[name=value]
If the integer attribute, -i, is set for name, the value
is subject to arithmetic evaluation, as described later.
Positional parameters, which are denoted by a number, can
be assigned values with the set special command. Parameter
$0 is set from argument 0 (zero) when the shell is
invoked. The $ (dollar sign) character is used to introduce
substitutable parameters. Reads all the characters
from the ${ (dollar sign left brace) to the matching }
(right brace) 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
parameter is followed by a letter, digit, or underscore
that is not to be interpreted as part of its name or when
a named parameter is subscripted. If parameter is one or
more digits, it is a positional parameter. A positional
parameter of more than one digit must be enclosed in
braces. If parameter is * (asterisk) or @ (at sign), all
the positional parameters, starting with $1, are substituted
(separated by a field separator character). If an
array identifier with subscript * or @is used, the value
for each of the elements is substituted (separated by a
field separator character). Substitutes the number of
positional parameters if parameter is * or @; otherwise,
the length of the value of the parameter is substituted.
Substitutes the number of elements in the array identifier.
Substitutes the value of parameter if it is set and
non-null; otherwise, substitute word. Sets parameter to
word if it is not set or is null; the value of the parameter
is then substituted. Positional parameters cannot be
assigned values in this way. Substitutes the value of
parameter if it is set and is non-null; otherwise, print
word and exit from the shell. If word is omitted, a standard
message is printed. Substitute word if parameteris
set and is non-null; otherwise, substitute nothing.
Causes the value of this substitution to be the value of
parameter with the matched portion deleted if the shell
pattern matches the beginning of the value of parameter;
otherwise the value of parameter is substituted. In the
first form, the smallest matching pattern is deleted and
in the second form, the largest matching pattern is
deleted. Causes the value of this substitution to be the
value of parameter with the matched part deleted if the
shell pattern matches the end of the value of parameter;
otherwise, substitute the value of parameter. In the first
form, the smallest matching pattern is deleted and in the
second form, the largest matching pattern is deleted.
If the : (colon) is omitted from the previous expressions,
then the shell checks only whether parameter is set or
not.
In the previous expressions, word is not evaluated unless
it is to be used as the substituted string, so that, in
the following example, pwd is executed only if d is not
set or is null: echo ${d:-$(pwd)}
The following parameters are automatically set by the
shell: The number of positional parameters in decimal.
options supplied to the shell on invocation or by the set
command. The decimal value returned by the last executed
command. The process number of this shell. Initially,
the value of _ (underscore) is an absolute path name of
the shell or script being executed as passed in the environment.
Subsequently, it is assigned the last argument of
the previous command. This parameter is not set for commands
that are asynchronous. This parameter is also used
to hold the name of the matching MAIL file when checking
for mail. The process number of the last background command
invoked. The value of errno as set by the most
recently failed system call. This value is system dependent
and is intended for debugging purposes. The line
number of the current line within the script or function
being executed. The previous working directory set by the
cd command. The value of the last option argument processed
by the getopts special command. The index of the
last option argument processed by the getopts special command.
The process number of the parent of the shell. The
present working directory set by the cd command. Each
time this parameter 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 RANDOM. This parameter is set by the
select statement and by the read special command when no
arguments are supplied. Each time this parameter is referenced,
the number of seconds since shell invocation is
returned. If this parameter is assigned a value, then the
value returned upon reference is the value that was
assigned plus the number of seconds since the assignment.
The following parameters are used by the shell: The search
path for the cd command. 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 select lists. If
the value of this variable ends in emacs, gmacs, or vi and
the VISUAL variable is not set, then the corresponding
option (see set under Special ksh Commands) is turned on.
If this parameter is set, then parameter substitution is
performed on the value to generate the path name of the
script that is executed when the shell is invoked. (See
Invocation.) This file is typically used for alias and
function definitions. The default editor name for the fc
command. The search path for function definitions. This
path is searched when a function with the -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. Internal field separators, normally
spaces, tabs, and newlines that are used to separate command
words which result from command or parameter substitution
and for separating words with the read special command.
The first character of the IFS parameter is used to
separate arguments for the $* substitution. (See Quoting.)
If this parameter is set when the shell is invoked,
then the value is the path name of the file that is used
to store the command history. (See Command Reentry.) If
this parameter is set when the shell is invoked, the number
of previously entered commands that are accessible by
this shell is greater than or equal to this number. The
default is 128. The default argument (home directory) for
the cd command. Specifies the locale of your system,
which is comprised of three parts: language, territory,
and codeset. The default locale is the C locale, which
specifies the value English for language, U.S. for territory,
and ASCII for codeset. The locale specified for the
LANG variable controls the language applied to messages.
Unless set explicitly, the LC_COLLATE, LC_CTYPE, LC_MESSAGES,
LC_MONETARY, LC_NUMERIC, and LC_TIME variables also
derive their settings from the locale set for LANG. Specifies
the collating sequence to use when sorting names and
when character ranges occur in patterns. The default
value is the collating sequence for American English. If
absent, the collating sequence can be taken from the LANG
parameter. If both LC_COLLATE and LANG are absent, the
ANSI C collating sequence is used. Specifies the character
classification information to use on your system. The
default value is American English. Specifies the language
that the system expects for user input of yes and no
strings. The default value is American English. Specifies
the monetary format for your system. The default value is
the monetary format for American English. Specifies the
numeric format for your system. The default value is the
numeric format for American English. Specifies the date
and time format for your system. The default value is the
date and time format for American English. If this variable
is set, the value is used to determine the column
length for printing select lists. Select lists will print
vertically until about two-thirds of LINES lines are
filled. The name of the user's login account corresponding
to the login name in the user database. If this
parameter is set to the name of a mail file and the MAILPATH
parameter is not set, the shell informs you of the
arrival of mail in the specified file. This variable
specifies how often (in seconds) the shell checks for
changes in the modification time of any of the files specified
by the MAILPATH or MAIL parameters. The default
value is 600 seconds. When the time has elapsed, the
shell checks before issuing the next prompt. A list of
file names separated by : (colons). If this parameter is
set, the shell informs you of any modifications to the
specified files that have occurred within the last
MAILCHECK seconds. Each file name can be followed by a ?
(question mark) and a message that is printed. The message
will undergo parameter substitution with the parameter,
$_ defined as the name of the file that has changed.
The default message is you have mail in $_. Specifies a
list of directories to search to find message catalogs.
The search path for commands. (See Execution.) The value
of this parameter is expanded for parameter substitution
to define the primary prompt string which by default is
the $ (dollar sign). The ! (exclamation point) in the
primary prompt string is replaced by the command number.
(See Command Reentry.) Secondary prompt string, by
default > (right angle bracket). Selection prompt string
used within a select loop, by default #? (number sign,
question mark). The value of this parameter is expanded
for parameter substitution and precedes each line of an
execution trace. If omitted, the execution trace prompt
is + (plus sign). The path name of the shell is kept in
the environment. If set to a value greater than 0 (zero),
the shell terminates if a command is not entered within
the prescribed number of seconds after issuing the PS1
prompt. (Note that the shell can be compiled with a maximum
bound for this value that cannot be exceeded.) If the
value of this variable ends in emacs, gmacs, or vi, the
corresponding option (see the set command in Special ksh
Commands) is turned on.
The shell gives default values to PATH, PS1, PS2,
MAILCHECK, TMOUT, and IFS, while HOME, SHELL, ENV, and
MAIL are not set by the shell (although HOME is set by the
login command). On some systems, MAIL and SHELL are also
set by the login command.
Interpretation of Spaces [Toc] [Back]
After parameter and command substitution, the results of
substitutions are scanned for the field separator characters
(those found in IFS), and split into distinct arguments
where such characters are found. Explicit null
arguments (`` or '') are retained. Implicit null arguments
(those resulting from parameters that have no values) are
removed.
File name Generation [Toc] [Back]
Following substitution, each command word is scanned for
the characters * (asterisk), ? (question mark), and [ ]
(brackets), unless the -f option was set. If one of these
characters appears, the word is regarded as a pattern.
The word is replaced with lexicographically sorted file
names that match the pattern. If no file name is found
that matches the pattern, the word is left unchanged.
When a pattern is used for file name generation, the (dot)
character at the start of a file name or immediately following
a / (slash), as well as the / character itself,
must be matched explicitly. In other instances of pattern
matching, the / and are not treated specially. Matches
any string, including the null string. Matches any single
character. Matches any one of the enclosed characters. In
an expression such as [a-z], the - (dash) means "through"
according to the current collating sequence. The collating
sequence is determined by the value of the LC_COLLATE
environment variable. If the first character following the
[ (left bracket) is a ! (exclamation point), then any
character not enclosed is matched. A - can be included in
the character set by putting it as the first or last character.
A pattern_list is a list of one or more patterns separated
from each other with a | (vertical bar). Composite patterns
can be formed with one or more of the following:
Optionally matches any one of the given patterns. Matches
zero or more occurrences of the given patterns. Matches
one or more occurrences of the given patterns. Matches
exactly one of the given patterns. Matches anything,
except one of the given patterns.
Character Classes [Toc] [Back]
You can use the following notation to match file names
within a range indication: [:charclass:]
This format instructs the system to match any single character
belonging to charclass; the defined classes correspond
to ctype() subroutines as follows:
alnum alpha cntrl digit graph lower print punct space
upper xdigit
Your locale might define additional character properties,
such as the following:
[:vowel:]
The preceding character class could be TRUE for a, e, i,
o, u, or y. You could then use [:vowel:] inside a set
construction to match any vowel. Refer to The LC_CTYPE
Category section of the locale file format reference page
for more information.
Quoting [Toc] [Back]
The following characters have a special meaning to the
shell and cause termination of a word unless quoted:
; & ( ) | ^ < > <newline> <space> <tab>
Each of the metacharacters previously listed has a special
meaning to the shell and causes termination of a word
unless quoted. A character can be quoted (that is, made
to stand for itself) by preceding it with a \ (backslash).
The pair \newline is ignored. All characters enclosed
between a pair of '' (single quotes) are quoted. A single
quote cannot appear within single quotes.
Inside "" (double quotes) parameter and command substitution
occurs and \ quotes the characters \, `, ', and $.
The meaning of $* and $@ is identical when not quoted or
when used as a parameter assignment value or as a file
name. However, when used as a command argument, '$*' is
equivalent to '$1d$2d. . .', where d is the first character
of the IFS parameter, whereas '$@' is equivalent to
'$1' '$2' . . . Inside `` (grave accents) \ (backslash)
quotes the characters \, `, and $. If the grave accents
occur within double quotes, then \ also quotes the ' (single
quote) character.
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 special command names
listed later cannot be altered by quoting them.
Arithmetic Evaluation [Toc] [Back]
An ability to perform integer arithmetic is provided with
the let special command. Evaluations are performed using
long arithmetic. Constants are of the form [base#]n, where
base is a decimal number between 2 and 36 representing the
arithmetic base and n is a number in that base. If base
is omitted, then base 10 is used.
An arithmetic expression uses the same syntax, precedence,
and associativity of expression as the C language. All
the integral operators, other than ++, --, ?:, and , are
supported. Named parameters can be referenced by name
within an arithmetic expression without using the parameter
substitution syntax. When a named parameter is referenced,
its value is evaluated as an arithmetic expression.
An internal integer representation of a named parameter
can be specified with the -i option of the typeset special
command. Arithmetic evaluation is performed on the value
of each assignment to a named parameter with the -i
attribute. If you do not specify an arithmetic base, the
first assignment to the parameter determines the arithmetic
base. This base is used when parameter substitution
occurs.
Because many of the arithmetic operators require quoting,
an alternative form of the let command is provided. For
any command that begins with a ((, all the characters
until a matching )) are treated as a quoted expression.
More precisely, ((...)) is equivalent to let "...".
Note that ((...)) is a command with a return value,
whereas $((...)) is the way to put the string representation
of the value of an arithmetic expression into the
command line (that is, it is like a $ variable).
Prompting [Toc] [Back]
When used interactively, the shell prompts with the value
of PS1 before reading a command. If at any time a newline
is typed and further input is needed to complete a command,
then the secondary prompt (that is, the value of
PS2) is issued.
Conditional Expressions [Toc] [Back]
A conditional expression is used with the [[ compound command
to test attributes of files and to compare strings.
Word splitting and file name generation are not performed
on the words between [[ and ]]. Each expression can be
constructed from one or more of the following unary or
binary expressions: TRUE, if file exists. TRUE, if file
exists and is a block-special file. TRUE, if file exists
and is a character-special file. TRUE, if file exists and
is a directory. TRUE, if file exists. TRUE, if file
exists and is an ordinary file. TRUE, if file exists and
has its setgid bit set. TRUE, if file exists and its
group matches the effective group ID of this process.
TRUE, if file exists and has its sticky bit set. TRUE, if
file exists and is a symbolic link. TRUE, if length of
string is nonzero. TRUE, if option named option is on.
TRUE, if file exists and is owned by the effective user ID
of this process. TRUE, if file exists and is a FIFO special
file or a pipe. TRUE, if file exists and is readable
by current process. TRUE, if file exists and has size
greater than 0 (zero). TRUE, if file exists and is a
socket. TRUE, if file descriptor number file_des is open
and associated with a terminal device. TRUE, if file
exists and has its setuid bit set. TRUE, if file exists
and is writable by current process. TRUE, if file exists
and is executable by current process. If file exists and
is a directory, then the current process has permission to
search in the directory. TRUE, if length of string is 0
(zero). TRUE, if file1 exists and is newer than file2.
TRUE, if file1 exists and is older than file2. TRUE, if
file1 and file2 exist and refer to the same file. TRUE,
if string matches pattern. TRUE, if string does not match
pattern. TRUE, if string1 collates before string2. TRUE,
if string1 collates after string2. TRUE, if expression1
is equal to expression2. TRUE, if expression1 is not
equal to expression2. TRUE, if expression1 is less than
expression2. TRUE, if expression1 is greater than expression2.
TRUE, if expression1 is less than or equal to
expression2. TRUE, if expression1 is greater than or
equal to expression2.
A compound expression can be constructed from these primitives
by using any of the following, listed in decreasing
order of precedence. TRUE, if expression is TRUE. Used
to group expressions. TRUE if expression is FALSE. TRUE,
if expression1 and expression2 are both TRUE. TRUE, if
either expression1 or expression2 is TRUE.
Input/Output
Before a command is executed, you can redirect its input
and output by using a special notation interpreted by the
shell. The following can appear anywhere in a simple command
or can precede or follow a command and are not passed
on to the invoked command. Command and parameter substitution
occurs before word or digit is used, except as
noted in the following text. File name generation occurs
only if the pattern matches a single file and interpretation
of spaces is not performed. Use file word as standard
input (file descriptor 0). Use file word as standard
output (file descriptor 1). If the file does not exist,
it is created. If the file exists, and the noclobber
option is on, this causes an error; otherwise, it is truncated
to 0 (zero) length. Same as >, except that it overrides
the noclobber option. Use file word as standard
output. If the file exists, output is appended to it (by
first seeking to the End-of-File); otherwise, the file is
created. Open file word for reading and writing as standard
input. The shell input is read up to a line that is
the same as word, or to an End-of-File. No parameter substitution,
command substitution, or file name generation
is performed on word. The resulting document, called a
here document, becomes the standard input. If any character
of word is quoted, then no interpretation is placed
upon the characters of the document; otherwise, parameter
and command substitution occurs, \newline is ignored, and
\ must be used to quote the characters \, $, `, and the
first character of word. If - is appended to <<, then all
leading tabs are stripped from word and from the document.
The standard input is duplicated from file descriptor
digit (see the dup(2) reference page). The standard output
is duplicated using >& digit. The standard input is
closed. The standard output is closed using >&-. The
input from the coprocess (or background process) is moved
to standard input. The output to the coprocess is moved
to standard output.
If one of the preceding redirections 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: ... 2>&1
means file descriptor 2 is to be opened for writing as a
duplicate of file descriptor 1.
The order in which redirections are specified is significant.
The shell evaluates each redirection in terms of the
(file descriptor, file) association at the time of evaluation.
For example: ... 1>fname 2>&1
first associates file descriptor 1 with file fname. It
then associates file descriptor 2 with the file associated
with file descriptor 1 (that is, fname). If the order of
redirections were reversed, file descriptor 2 is associated
with the terminal (assuming file descriptor 1 is) and
then file descriptor 1 is associated with file fname.
If a command is followed by & and job control is not
active, the default standard input for the command is the
empty /dev/null file. Otherwise, the environment for the
execution of a command contains the file descriptors of
the invoking shell as modified by input/output specifications.
Environment [Toc] [Back]
The environment 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 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 parameter for each
name found, giving it the corresponding value and marking
it export. Executed commands inherit the environment. If
you modify the values of these parameters or create new
ones, using the export or 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 can be
modified by the current shell, plus any additions that
must be noted in the export or typeset -x commands.
When the value of an exported parameter is changed, the
shell automatically exports the new value to all child
processes. This behavior is different from that of the
Bourne shell, sh(1b), which does not automatically reexport
a changed parameter.
You can augment the environment for any simple command or
function by prefixing it with one or more parameter
assignments. A parameter assignment argument is a word of
the form identifier=value.
Thus, the following two expressions are equivalent (as far
as the execution of command is concerned):
TERM=450 command argument ...
(export TERM; TERM=450; command argument ...)
If the -k option is set, all parameter assignment arguments
are placed in the environment, even if they occur
after the command name. The following first prints a=b c
and then c: echo a=b c set -k echo a=b c
This feature is intended for use with scripts written for
early versions of the shell; its use in new scripts is
strongly discouraged. It is likely to disappear someday.
Functions [Toc] [Back]
The function reserved word is used to define shell functions.
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 Execution.)
Functions execute in the same process as the caller and
share all files and the 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 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 special
command typeset used within a function defines local variables
whose scope includes the current function and all
functions it calls.
The special command return is used to return from function
calls. Errors within functions return control to the
caller.
Function identifiers can be listed with the -f or +f
option of the typeset special command. The text of functions
is also listed with -f. Function can be undefined
with the -f option of the unset special command.
Ordinarily, functions are unset when the shell executes a
shell script. The -xf option of the typeset command
allows a function to be exported to scripts that are executed
without a separate invocation of the shell. Functions
that need to be defined across separate invocations
of the shell should be specified in the ENV file with the
-xf option of typeset.
Jobs [Toc] [Back]
If the monitor option of the set command is turned on, an
interactive shell associates a job with each pipeline. It
keeps a table of current jobs, printed by the jobs command,
and assigns them small integer numbers. When a job
is started asynchronously with &, the shell prints a line
that looks like: [1] 1234
This line indicates that the job, which was started asynchronously,
was job number 1 and had one (top-level) process,
whose process ID was 1234.
If you are running a job and want to do something else,
you can enter the Suspend key sequence (normally <Ctrl-z>,
which sends a SIGTSTP signal to the current job. The
shell then normally indicates that the job has been
stopped, and it prints another prompt. You can then
manipulate the state of this job, putting it in the background
with the bg command, or run some other commands and
then eventually bring the job back into the foreground
with the foreground command fg. The job suspension takes
effect immediately, and corresponds to the Interrupt key
sequence in that pending output and unread input are discarded.
A special key sequence, <Ctrl-y>, does not generate
a SIGINT signal until a program attempts to read it.
(See the read(2) reference page for more information.)
This key sequence can be typed ahead when you have prepared
some commands for a job that you wish to stop after
it has read them.
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
issuing the stty tostop command. If you set this terminal
option, then background jobs will stop when they try to
produce output like they do when they try to read input.
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: The job with the
given number. Any job whose command line begins with
string. Any job whose command line contains string. Current
job. Equivalent to %%. Previous job.
This 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.
When the monitor mode is on, each background job that is
completed triggers any trap set for CHLD.
When you try to leave the shell while jobs are stopped or
running, you are warned that You have stopped(running)
jobs. You can use the jobs command to see what they are.
If you do this or immediately try to exit again, the shell
does not warn you a second time, and the stopped jobs are
terminated.
Signals [Toc] [Back]
The SIGINT and SIGQUIT signals for an invoked command are
ignored if the command is followed by & and job monitor
option is not active. Otherwise, signals have the values
inherited by the shell from its parent (but see also the
trap command).
Execution [Toc] [Back]
Each time a command is executed, the previous substitutions
are carried out. If the command name matches one of
the special commands listed later, it is executed within
the current shell process. Next, the command name is
checked to see if it matches one of the user-defined functions.
If it does, the positional parameters are saved
and then reset to the arguments of the function call. When
the function is completed or issues a return, the positional
parameter list is restored and any trap set on EXIT
within the function is executed. The value of a 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 special command or a user-defined function,
a process is created and an attempt is made to execute the
command via exec.
The PATH shell parameter defines the search path for the
directory containing the command. Alternative directory
names are separated by a : (colon). The default path is
:/usr/bin: (specifying /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 / (slash), then the search path is not used. Otherwise,
each directory in the path is searched for an executable
file.
If the file has execute permission but is not a directory
or an a.out file, it is assumed to be a file containing
shell commands. A subshell is spawned to read it. All
nonexported aliases, functions, and named parameters are
removed in this case. If the shell command file does not
have read permission, or if the setuid and/or setgid bits
are set on the file, 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
command in parentheses is executed in a subshell without
removing nonexported quantities.
Command Reentry [Toc] [Back]
The text of the last HISTSIZE (default 128) commands
entered from a terminal device is saved in a history file.
The $HOME/.sh_history file is used if the HISTFILE variable
is not set or is not writable. A shell can access
the commands of all interactive shells that use the same
named HISTFILE. The fc special command is used to list or
edit a portion of this file. The portion of the file to
be edited or listed can be selected by number or by giving
the first character or characters of the command. A single
command or range of commands can be specified. If you
do not specify an editor program as an argument to fc,
then the value of the FCEDIT parameter is used. If FCEDIT
is not defined, then /usr/bin/ed is used. The edited commands
are printed and reexecuted upon leaving the editor.
The editor name - (dash) is used to skip the editing phase
and to reexecute the command. In this case, a substitution
parameter of the form old=newcan be used to modify
the command before execution. For example, if r is
aliased to 'fc -e -', then typing `r bad=good c' reexecutes
the most recent command, which starts with the letter
c, replacing the first occurrence of the string bad
with the string good.
Inline Editing Options [Toc] [Back]
Normally, each command line entered from a terminal device
is simply typed followed by a newline (<Return> or linefeed).
If the emacs, gmacs, or vi option is active, you
can edit the command line. To be in any of these edit
modes, set the corresponding option. An editing option is
automatically selected each time the VISUAL or EDITOR
variable is assigned a value ending in either of these
option names.
The editing features require that the terminal accept
<Return> as carriage-return without linefeed and that a
space must overwrite the current character on the screen.
ADM terminal users should set the space-advance switch to
Space. Hewlett-Packard series 2621 terminal users should
set the straps to bcGHxZ etX.
The editing modes create the impression that the user is
looking through a window at the current line. The window
width is the value of COLUMNS if it is defined, otherwise
it is 80 bytes. If the line is longer than the window
width minus 2, 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 is centered about the
cursor. The mark is a > (right angle bracket) if the line
extends on the right side of the window, a < (left angle
bracket) if the line extends on the left side of the window,
and an * (asterisk) if the line extends on both sides
of the window.
The search commands in each edit mode provide access to
the history file. Only strings are matched, not patterns,
although if the leading character in the string is a ^
(circumflex), the match is restricted to begin at the
first character in the line.
The emacs Editing Mode [Toc] [Back]
This mode is entered by enabling either the emacs or gmacs
option. The only difference between these two modes is
the way they handle <Ctrl-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 ^ (circumflex) followed
by the character. For example, ^F is the notation for
<Ctrl-f>. This is entered by pressing f while holding
down <Ctrl>. <Shift> is not depressed. (The notation ^?
indicates <Delete>.)
The notation for escape sequences is M- followed by a
character. For example, M-f (pronounced Meta f) is
entered by pressing <Esc> (ASCII 033) followed by f. (M-F
would be the notation for <Esc> followed by <Shift> (capital)
F.)
All edit commands operate from any place on the line (not
just at the beginning). Do not press <Return> or linefeed
after edit commands except when noted. Moves the cursor
forward (right) one character. Moves the cursor forward
one word. (The emacs editor's definition of a word is a
string of characters, consisting of only letters, digits,
and underscores, and delimited with spaces or tabs.)
Moves the cursor backward (left) one character. Moves the
cursor backward one word. Moves the cursor to the start
of the line. Moves the cursor to the end of the line.
Moves the cursor forward on the current line to the character
indicated by the character argument. Moves the cursor
backward on the current line to the character indicated
by the character argument. Interchanges the cursor
and mark. Deletes the previous character. (User-defined
Erase character as defined by the stty command, often
<Ctrl-h> or #.) Deletes the current character. Deletes
the current word. Deletes the previous word. Deletes the
previous word. Deletes the previous word (if your Interrupt
character is <Delete>, this command does not work).
Transposes the current character with next character in
emacs mode. Transposes two previous characters in gmacs
mode. Capitalizes the current character. Capitalizes the
current word. Changes the current word to lowercase.
Deletes from the cursor to the end of the line. If preceded
by a numerical parameter whose value is less than
the current cursor position, deletes from given position
up to the cursor. If preceded by a numerical parameter
whose value is greater than the current cursor position,
deletes from the cursor up to given cursor position.
Deletes from the cursor to the mark. Pushes the region
from the cursor to the mark on the stack. Kills the
entire current line. If two Kill characters are entered
in succession, all Kill characters from then on cause a
linefeed (useful when using paper terminals). (Userdefined
Kill character as defined by the stty command,
often <Ctrl-g> or @.) Restores the last item removed from
the line. (Yanks the item back to the line.) Performs a
linefeed and prints the current line. (Null character.)
Sets the mark. Sets the mark. Executes the current line
(newline). Executes the current line (enter). The Endof-File
character is processed as an End-of-File only if
the current line is null. Fetches the previous command.
Each time <Ctrl-p> is entered, the previous command back
in time is accessed. Moves back one line when not on the
first line of a multiline command. Fetches the least
recent (oldest) history line. Fetches the most recent
(youngest) history line. Fetches the next command line.
Each time <Ctrl-n> is entered, the next command line forward
in time is accessed. Reverses the search history for
a previous command line containing string. If an argument
of 0 (zero) is given, the search is forward. The string
variable is terminated by a <Return> or newline character.
If string is preceded by a ^ (circumflex), the matched
line must begin with string. If string is omitted, then
the next command line containing the most recent string is
accessed. In this case, an argument of 0 (zero) reverses
the direction of the search. Executes the current line
and fetches the next line relative to current line from
the history file. (Operate) Defines the numeric parameter
(escape). The digits are taken as an argument to the next
command. The commands that accept a parameter are <Ctrlf>,
<Ctrl-b>, <Erase>, <Ctrl-c>, <Ctrl-d>, <Ctrl-k>,
<Ctrl-r>, <Ctrl-p>, <Ctrl-n>, <Ctrl-]>, <Esc-.>, <EscCtrl-]>,
<Esc-_>, <Esc-b>, <Esc-c>, <Esc-d>, <Esc-f>,
<Esc-h>, <Esc-l> and <Esc-Ctrl-h>. Your alias list is
searched for an alias by the name _letter and if an alias
of this name is defined, its value is inserted on the
input queue. The letter parameter must not be one of the
preceding metafunctions. (Soft-key) Your alias list is
searched for an alias by the name __letter and if an alias
of this name is defined, its value is inserted on the
input queue (Soft-key). This can be used to program functions
keys on many systems. Same as <Esc-]> letter. 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. Same as the <Esc-.> combination. Attempts
file name generation on the current word. An * (asterisk)
is appended if the word does not match any file or contain
any special pattern characters. File name compl
|