ksh(1) ksh(1)
NAME [Toc] [Back]
ksh, rksh - shell, the standard/restricted command programming
language
SYNOPSIS [Toc] [Back]
ksh [-aefhikmnoprstuvx] [+aefhikmnoprstuvx] [-o option] ... [+o
option] ... [-c string] [arg ...]
rksh [-aefhikmnoprstuvx] [+aefhikmnoprstuvx] [-o option] ... [+o
option] ... [-c string] [arg ...]
DESCRIPTION [Toc] [Back]
ksh is a command programming language that executes commands read from
a terminal or a file. rksh is a restricted version of the command
interpreter ksh, used to set up login names and execution environments
whose capabilities are more controlled than those of the standard
shell. See Invoking ksh and Special Commands sections later in this
entry for details about command line options and arguments,
particularly the set command.
Definitions [Toc] [Back]
metacharacter One of the following characters:
; & ( ) | < > new-line space tab
blank A tab or space character.
identifier A sequence of letters, digits, or underscores starting
with a letter or underscore. Identifiers are used as
names for functions and named parameters.
word A sequence of characters separated by one or more nonquoted
metacharacters .
command 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.
special command
A command that is carried out by the shell without
creating a separate process. Often called ``built-in
commands''. Except for documented side effects, most
special commands can be implemented as separate
utilities.
# The # character is interpreted as the beginning of a
comment. See Quoting below.
Commands [Toc] [Back]
A simple-command is a sequence of blank-separated words that can be
Hewlett-Packard Company - 1 - HP-UX 11i Version 2: August 2003
ksh(1) ksh(1)
preceded by a parameter assignment list. (See 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
exec(2)). The value of a simple-command is its exit status if it
terminates normally, or (octal) 200+status if it terminates abnormally
(see signal(5) for a list of status values).
A pipeline is a sequence of one or more commands separated by |. The
standard output of each command except the last is connected by a pipe
(see pipe(2)) to the standard input of the next command. Each command
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 in the pipeline.
A list is a sequence of one or more pipelines separated by ;, &, &&,
or ||, and optionally terminated by ;, &, or |&. Of these five
symbols, ;, &, and |& have equal precedence. && and || have a higher
but also equal precedence. A semicolon (;) causes sequential
execution of the preceding pipeline; an ampersand (&) causes
asynchronous execution of the preceding pipeline (that is, the shell
does not wait for that pipeline to finish). The symbol |& causes
asynchronous execution of the preceding command or pipeline with a
two-way pipe established to the parent shell (known as a co-process).
The standard input and output of the spawned command can be written to
and read from by the parent shell using the -p option of the special
commands read and print described later. The symbol && (||) causes
the list following it to be executed only if the preceding pipeline
returns a zero (non-zero) value. An arbitrary number of new-lines can
appear in a list, instead of semicolons, to delimit commands.
A 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.
for identifier [in word ...] do list done
Each time for is executed, identifier is set to the
next word taken from the in word list. If in word ...
is omitted, for executes the do list once for each
positional parameter set (see Parameter Substitution
below). Execution ends when there are no more words in
the list.
select identifier [in word...] do list done
A select command prints on standard error (file
descriptor 2), the set of words, each preceded by a
number. If in word ... is omitted, the positional
parameters are used instead (see Parameter Substitution
below). The PS3 prompt is printed and a line is read
from the standard input. If this line starts with the
number of one of the listed words, the value of the
Hewlett-Packard Company - 2 - HP-UX 11i Version 2: August 2003
ksh(1) ksh(1)
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 identifier is set to null. The contents of
the line read from standard input is saved in the
parameter REPLY. The list is executed for each
selection until a break or end-of-file (eof) is
encountered.
case word in [[ (] pattern [ | pattern] ... ) list ;; ] ... esac
A case command executes the list associated with the
first pattern that matches word. The form of the
patterns is identical to that used for file name
generation (see File Name Generation below).
if list then list [ elif list then list] ... [ else list] fi
The list following if is executed and, if it returns a
zero exit status, the list following the first then is
executed. Otherwise, the list following elif is
executed and, if its value is 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,
if returns a zero exit status.
while list do list done
until list do list done
A while command repeatedly executes the while list, and
if the exit status of the last command in the list is
zero, executes the do list; otherwise the loop
terminates. If no commands in the do list are
executed, while returns a zero exit status; until can
be used in place of while to negate the loop
termination test.
(list) Execute 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 below.
{ list;} Execute list, but not in a separate environment. Note
that { is a keyword and requires a trailing blank to be
recognized.
[[ expression ]]
Evaluates expression and returns a zero exit status
when expression is true. See Conditional Expressions
below, for a description of expression. Note that [[
and ]] are keywords and require blanks between them and
expression.
Hewlett-Packard Company - 3 - HP-UX 11i Version 2: August 2003
ksh(1) ksh(1)
function identifier {list;}
identifier () {list;}
Define a function referred to by identifier. The body
of the function is the list of commands between { and }
(see Functions below).
time pipeline pipeline is executed and the elapsed time, user time,
and system time are printed on standard error. Note
that the time keyword can appear anywhere in the
pipeline to time the entire pipeline. To time a
particular command in a pipeline, see time(1).
The following keywords are recognized only as the first word of a
command and when not quoted:
if then else elif fi case esac for while
until do done { } function select time [[ ]]
Comments [Toc] [Back]
A word beginning with # causes that word and all subsequent characters
up to a new-line to be ignored.
Aliasing [Toc] [Back]
The first word of each command is replaced by the text of an alias, if
an alias for this word has been defined. An alias name consists of
any number of characters excluding metacharacters, quoting characters,
file expansion characters, parameter and command substitution
characters, and =. 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, is tested for additional aliases. If the
last character of the alias value is a blank, the word following the
alias is also checked for alias substitution. Aliases can be used to
redefine special built-in commands, but cannot be used to redefine the
keywords listed above. 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 subshells but must be
reinitialized for separate invocations of the shell (see Invoking ksh
below).
Aliasing is performed when scripts are read, not while they are
executed. Therefore, for it to take effect, alias must be executed
before the command referring to the alias is read.
Aliases are frequently used as a 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 identifier is read and becomes
undefined each time the PATH variable is reset. These aliases remain
tracked so that the next reference redefines the value. Several
Hewlett-Packard Company - 4 - HP-UX 11i Version 2: August 2003
ksh(1) ksh(1)
tracked aliases are compiled into the shell. The -h option of the set
command converts each command name that is an identifier 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 -'
stop='kill -STOP'
suspend='kill -STOP $$'
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 ~. If it does, the word up to a / is
checked to see if it matches a user name in the /etc/passwd file. If
a match is found, the ~ 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 ~, alone or before a /, is replaced by the value of the
HOME parameter. A ~ followed by a + or - is replaced by the value of
the parameter PWD and OLDPWD, respectively. In addition, tilde
substitution is attempted when the value of a parameter assignment
begins with a ~.
Command Substitution [Toc] [Back]
The standard output from a command enclosed in parenthesis preceded by
a dollar sign ($(command)) or a pair of back single quotes (accent
grave) (`command`) can be used as part or all of a word; trailing
new-lines are removed. In the second (archaic) form, the string
between the quotes is processed for special quoting characters before
the command is executed (see Quoting below). The command substitution
$(cat file) can be replaced by the equivalent but faster $(<file).
Command substitution of most special commands (built-ins) that do not
perform I/O redirection are carried out without creating a separate
process. However, command substitution of a function creates a
separate process to execute the function and all commands (built-in or
otherwise) in that function.
An arithmetic expression enclosed in double parenthesis preceded by a
dollar sign ($((expression))) is replaced by the value of the
arithmetic expression within the double parenthesis (see Arithmetic
Evaluation below for a description of arithmetic expressions).
Hewlett-Packard Company - 5 - HP-UX 11i Version 2: August 2003
ksh(1) ksh(1)
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 zero or more attributes.
Named parameters can be assigned values and attributes by using the
typeset special command. Attributes supported by ksh are described
later with the typeset special command. Exported parameters pass
values and attributes to the environment.
The shell supports a limited one-dimensional array facility. An
element of an array parameter is referenced by a subscript. A
subscript is denoted by a [ followed by an arithmetic expression (see
Arithmetic Evaluation below) followed by a ]. To assign values to an
array, use set -A name value .... The value of all subscripts must be
in the range of 0 through 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 first element.
The value of a named parameter can also be assigned by writing:
name=value [name=value] ...
If the -i integer attribute is set for name, the value is subject to
arithmetic evaluation as described below.
Positional parameters, parameters denoted by a number, can be assigned
values with the set special command. Parameter $0 is set from
argument zero when the shell is invoked.
The character $ is used to introduce substitutable parameters.
${parameter} Substitute the value of the parameter, if
any. Braces are required when parameter is
followed by a letter, digit, or underscore
that should not 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
* or @ 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 element is substituted
(separated by a field separator character).
The shell reads all the characters from ${ to
the matching } as part of the same word even
if it contains braces or metacharacters.
Hewlett-Packard Company - 6 - HP-UX 11i Version 2: August 2003
ksh(1) ksh(1)
${#parameter} If parameter is * or @, the number of
positional parameters is substituted.
Otherwise, the length of the value of the
parameter is substituted.
${#identifier[*]} Substitute the number of elements in the
array identifier.
${parameter:-word} If parameter is set and is non-null,
substitute its value; otherwise substitute
word.
${parameter:=word} If parameter is not set or is null, set it to
word; then substitute the value of the
parameter. Positional parameters cannot be
assigned in this way.
${parameter:?word} If parameter is set and is non-null,
substitute its value; otherwise, print word
and exit from the shell. If word is omitted,
a standard message is printed.
${parameter:+word} If parameter is set and is non-null,
substitute word; otherwise substitute
nothing.
${parameter#pattern}
${parameter##pattern}
If the shell pattern matches the beginning of
the value of parameter, the value of this
substitution is the value of the parameter
with the matched portion deleted; otherwise
the value of this parameter substituted. In
the former case, the smallest matching
pattern is deleted; in the latter case, the
largest matching pattern is deleted.
${parameter%pattern}
${parameter%%pattern}
If the shell pattern matches the end of the
value of parameter, the value of parameter
with the matched part is deleted; otherwise
substitute the value of parameter. In the
former, the smallest matching pattern is
deleted; in the latter, the largest matching
pattern is deleted.
In the above, word is not evaluated unless it is used as the
substituted string. Thus, in the following example, pwd is
executed only if d is not set or is null:
Hewlett-Packard Company - 7 - HP-UX 11i Version 2: August 2003
ksh(1) ksh(1)
echo ${d:-$(pwd)}
If the colon (:) is omitted from the above expressions, the shell
only checks to determine whether or not parameter is set.
The following parameters are set automatically 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 _ is an absolute pathname
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 which 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.
COLUMNS If this variable is set, its value is used to
define the width of the edit window for the shell
edit modes and for printing select lists. In a
windowed environment, if the shell detects that
the window size has changed, the shell updates the
value of COLUMNS.
ERRNO The value of errno as set by the most recently
failed system call. This value is system
dependent and is intended for debugging purposes.
LINENO The line number of the current line within the
script or function being executed.
LINES If this variable is set, the value is used to
determine the column length for printing select
lists. select lists print vertically until about
two-thirds of LINES lines are filled. In a
windowed environment, if the shell detects that
the window size has changed, the shell updates the
value of LINES.
OLDPWD The previous working directory set by the cd
command.
OPTARG The value of the last option argument processed by
the getopts special command.
OPTIND The index of the last option argument processed by
the getopts special command.
PPID The process number of the parent of the shell.
PWD The present working directory set by the cd
command.
Hewlett-Packard Company - 8 - HP-UX 11i Version 2: August 2003
ksh(1) ksh(1)
RANDOM Each time this parameter is evaluated, 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.
REPLY This parameter is set by the select statement and
by the read special command when no arguments are
supplied.
SECONDS Each time this parameter is referenced, the number
of seconds since shell invocation is returned. If
this parameter is assigned a value, 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:
CDPATH The search path for the cd command.
EDITOR If the value of this variable ends in emacs,
gmacs, or vi and the VISUAL variable is not set,
the corresponding option is turned on (see set in
Special Commands below).
ENV If this parameter is set, parameter substitution
is performed on the value to generate the path
name of the script to be executed when the shell
is invoked (see Invoking ksh below). This file is
typically used for alias and function definitions.
FCEDIT The default editor name for the fc command.
FPATH 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.
IFS Internal field separators, normally space, tab,
and new-line that are used to separate command
words resulting from command or parameter
substitution, and for separating words with the
special command read. The first character of the
IFS parameter is used to separate arguments for
the "$*" substitution (see Quoting below).
HISTFILE If this parameter is set when the shell is
invoked, its value is the path name of the file
that is used to store the command history. The
default value is $HOME/.sh_history. If the user
has appropriate privileges and no HISTFILE is
given, then no history file is used (see Command
Re-entry below).
HISTSIZE If this parameter is set when the shell is
invoked, the number of previously entered commands
accessible to this shell will be greater than or
equal to this number. The default is 128.
Hewlett-Packard Company - 9 - HP-UX 11i Version 2: August 2003
ksh(1) ksh(1)
HOME The default argument (home directory) for the cd
command.
MAIL If this parameter is set to the name of a mail
file and the MAILPATH parameter is not set, the
shell informs the user of arrival of mail in the
specified file.
MAILCHECK 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.
MAILPATH A list of file names separated by colons (:). If
this parameter is set, the shell informs the user
of any modifications to the specified files that
have occurred within the last MAILCHECK seconds.
Each file name can be followed by a ? and a
message to be printed, in which case the message
undergoes parameter and command substitution with
the parameter $_ defined as the name of the
changed file. The default message is you have
mail in $_.
PATH The search path for commands (see Execution
below). The user cannot change PATH if executing
rksh (except in the .profile file).
PS1 The value of this parameter is expanded for
parameter substitution, to define the primary
prompt string which, by default, is $ followed by
a space character. The character ! in the primary
prompt string is replaced by the command number
(see Command Re-entry below). To include a ! in
the prompt, use !!.
PS2 Secondary prompt string, by default > followed by
a space character.
PS3 Selection prompt string used within a select loop,
by default #? followed by a space character.
PS4 The value of this variable is expanded for
parameter substitution and precedes each line of
an execution trace. If PS4 is unset, the
execution trace prompt is + followed by a space
character.
SHELL The path name of the shell is kept in the
environment. When invoked, the shell is
restricted if the value of this variable contains
an r in the basename.
TMOUT If set to a value greater than zero, the shell
terminates if a command is not entered within the
prescribed number of seconds after issuing the PS1
prompt.
VISUAL Invokes the corresponding option when the value of
this variable ends in emacs, gmacs, or vi (see set
Hewlett-Packard Company - 10 - HP-UX 11i Version 2: August 2003
ksh(1) ksh(1)
in Special Commands below).
The shell gives default values to PATH, PS1, PS2, MAILCHECK, TMOUT,
and IFS. HOME, SHELL, ENV, and MAIL are never set automatically by
the shell (although HOME, SHELL, and MAIL are set by login(1)).
Blank Interpretation [Toc] [Back]
After parameter and command substitution, the results of substitution
are scanned for field separator characters (found in IFS), and split
into distinct arguments where such characters are found. ksh retains
explicit null arguments ( or '') but removes implicit null arguments
(those resulting from parameters that have no values).
File Name Generation [Toc] [Back]
Following substitution, each command word is processed as a pattern
for file name expansion unless the -f option has been set. The form
of the patterns is the Pattern Matching Notation defined by regexp(5).
The word is replaced with sorted file names matching the pattern. If
no file name is found that matches the pattern, the word is left
unchanged.
In addition to the notation described in regexp(5), ksh recognizes
composite patterns made up of one or more pattern lists separated from
each other with a |. Composite patterns can be formed with one or
more of the following:
?(pattern-list) Optionally matches any one of the given
patterns.
*(pattern-list) Matches zero or more occurrences of the given
patterns.
+(pattern-list) Matches one or more occurrences of the given
patterns.
@(pattern-list) Matches exactly one of the given patterns.
!(pattern-list) Matches anything, except one of the given
patterns.
Quoting [Toc] [Back]
Each of the metacharacters listed above (See Definitions above) has a
special meaning to the shell and causes termination of a word unless
quoted. A character can be quoted (i.e., made to stand for itself) by
preceding it with a \. The pair \new-line is ignored. All characters
enclosed between a pair of single quote marks (''), are quoted. A
single quote cannot appear within single quotes. Inside double quote
marks (""), parameter and command substitution occurs and \ quotes the
characters \, `, ", and $. $* and $@ have identical meanings 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
Hewlett-Packard Company - 11 - HP-UX 11i Version 2: August 2003
ksh(1) ksh(1)
"$1d$2d...", where d is the first character of the IFS parameter,
whereas "$@" is equivalent to "$1" "$2" .... Inside back single quote
(accent grave) marks (``) \ quotes the characters \, `, and $. If the
back single quotes occur within double quotes, \ also quotes the
character ".
The special meaning of keywords or aliases can be removed by quoting
any character of the keyword. The recognition of function names or
special command names listed below cannot be altered by quoting them.
Arithmetic Evaluation [Toc] [Back]
The ability to perform integer arithmetic is provided with the special
command let. Evaluations are performed using long arithmetic.
Constants take the form [base#]n, where base is a decimal number
between two and thirty-six representing the arithmetic base and n is a
number in that base. If base is omitted, base 10 is used.
An arithmetic expression uses the same syntax, precedence, and
associativity of expression of the C language. All the integral
operators, other than ++, --, ?:, and , are supported. Variables can
be referenced by name within an arithmetic expression without using
the parameter substitution syntax. When a variable is referenced, its
value is evaluated as an arithmetic expression.
An internal integer representation of a variable can be specified with
the -i option of the typeset special command. Arithmetic evaluation
is performed on the value of each assignment to a variable with the -i
attribute. If you do not specify an arithmetic base, the first
assignment to the variable determines the arithmetic base. This base
is used when parameter substitution occurs.
Since many of the arithmetic operators require quoting, an alternative
form of the let command is provided. For any command beginning with
((, all characters until the matching )) are treated as a quoted
expression. More precisely, ((...)) is equivalent to let "...".
Prompting [Toc] [Back]
When used interactively, the shell prompts with the value of PS1
before reading a command. If at any time a new-line is typed and
further input is needed to complete a command, the secondary prompt
(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:
-a file True if file exists.
Hewlett-Packard Company - 12 - HP-UX 11i Version 2: August 2003
ksh(1) ksh(1)
-b file True if file exists and is a block special
file.
-c file True if file exists and is a character
special file.
-d file True if file exists and is a directory.
-f file True if file exists and is an ordinary file.
-g file True if file exists and is has its setgid bit
set.
-h file True if file exists and is a a symbolic link.
-k file True if file exists and is has its sticky bit
set.
-n string True if length of string is non-zero.
-o option True if option named option is on.
-p file True if file exists and is a fifo special
file or a pipe.
-r file True if file exists and is readable by
current process.
-s file True if file exists and has size greater than
zero.
-t fildes True if file descriptor number fildes is open
and associated with a terminal device.
-u file True if file exists and is has its setuid bit
set.
-w file True if file exists and is writable by
current process.
-x file True if file exists and is executable by
current process. If file exists and is a
directory, the current process has permission
to search in the directory.
-z string True if length of string is zero.
-L file True if file exists and is a symbolic link.
-O file True if file exists and is owned by the
effective user ID of this process.
-G file True if file exists and its group matches the
effective group ID of this process.
-S file True if file exists and is a socket.
file1 -nt file2 True if file1 exists and is newer than file2.
file1 -ot file2 True if file1 exists and is older than file2.
file1 -ef file2 True if file1 and file2 exist and refer to
the same file.
string = pattern True if string matches pattern.
string != pattern True if string does not match pattern.
string1 < string2 True if string1 comes before string2 based on
ASCII value of their characters.
string1 > string2 True if string1 comes after string2 based on
ASCII value of their characters.
exp1 -eq exp2 True if exp1 is equal to exp2.
exp1 -ne exp2 True if exp1 is not equal to exp2.
exp1 -lt exp2 True if exp1 is less than exp2.
exp1 -gt exp2 True if exp1 is greater than exp2.
Hewlett-Packard Company - 13 - HP-UX 11i Version 2: August 2003
ksh(1) ksh(1)
exp1 -le exp2 True if exp1 is less than or equal to exp2.
exp1 -ge exp2 True if exp1 is greater than or equal to
exp2.
A compound expression can be constructed from these primitives by
using any of the following, listed in decreasing order of precedence.
(expression) True, if expression is true.
Used to group expressions.
! expression True if expression is false.
expression1 && expression2 True, if expression1 and
expression2 are both true.
expression1 || expression2 True, if either expression1 or
expression2 is true.
Input/Output
Before a command is executed, its input and output can be redirected
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
below. File name generation occurs only if the pattern matches a
single file and blank interpretation is not performed.
<word Use file word as standard input (file descriptor
0).
>word 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, an error occurs; otherwise, the file is
truncated to zero length.
>|word Sames as >, except that it overrides the noclobber
option.
>>word Use file word as standard output. If the file
exists, output is appended to it (by first
searching for the end-of-file); otherwise, the
file is created.
<>word Open file word for reading and writing as standard
input. If the file does not exist it is created.
<<[-]word The shell input is read up to a line that matches
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, no interpretation is placed upon the
Hewlett-Packard Company - 14 - HP-UX 11i Version 2: August 2003
ksh(1) ksh(1)
characters of the document. Otherwise, parameter
and command substitution occurs, \new-line is
ignored, and \ must be used to quote the
characters \, $, `, and the first character of
word. If - is appended to <<, all leading tabs
are stripped from word and from the document.
<&digit The standard input is duplicated from file
descriptor digit (see dup(2)).
>&digit The standard output is duplicated to file
descriptor digit (see dup(2)).
<&- The standard input is closed.
>&- The standard output is closed.
<&p The input from the co-process is moved to standard
input.
>&p The output to the co-process is moved to standard
output.
If one of the above is preceded by a digit, the file descriptor number
cited 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.
Redirection order is significant because the shell evaluates
redirections referencing file descriptors in terms of the currently
open file associated with the specified file descriptor at the time of
evaluation. For example:
... 1>fname 2>&1
first assigns file descriptor 1 (standard output) to file fname ,
then assigns file descriptor 2 (standard error) to the file assigned
to file descriptor 1; i.e., fname. On the other hand, if the order of
redirection is reversed as follows:
... 2>&1 1>fname
file descriptor 2 is assigned to the current standard output (user
terminal unless a different assignment is inherited). File descriptor
1 is then reassigned to file fname without changing the assignment of
file descriptor 2.
Hewlett-Packard Company - 15 - HP-UX 11i Version 2: August 2003
ksh(1) ksh(1)
The input and output of a co-process can be moved to a numbered file
descriptor allowing other commands to write to them and read from them
using the above redirection operators. If the input of the current
co-process is moved to a numbered file descriptor, another co-process
can be started.
If a command is followed by & and job control is inactive, the default
standard input for the command is the empty file /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.
Environment [Toc] [Back]
The environment (see environ(5)) is a list of name-value pairs passed
to an executed program much like a normal argument list. The names
must be identifiers and the values are character strings. The shell
interacts with the environment in several ways. When invoked, the
shell scans the environment and creates a parameter for each name
found, gives it the corresponding value, and marks it export.
Executed commands inherit the environment. If the user modifies the
values of these parameters or creates new ones by using the export or
typeset -x commands, the values 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 which must be noted
in export or typeset -x commands.
The environment for any simple-command or function can be augmented by
prefixing it with one or more parameter assignments. A parameter
assignment argument takes the form identifier=value. For example,
TERM=450 cmd args
and
(export TERM; TERM=450; cmd args)
are equivalent (as far as the above execution of cmd is concerned
except for special commands listed below that are preceded by a
percent sign).
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 echo statement prints a=b c. After the -k option is set,
the second echo statement prints only c:
echo a=b c
set -k
echo a=b c
Hewlett-Packard Company - 16 - HP-UX 11i Version 2: August 2003
ksh(1) ksh(1)
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.
Functions [Toc] [Back]
The function keyword (described in the Commands section above) is used
to define shell functions. Shell functions are read 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 below).
Functions execute in the same process as the caller except that
command substitution of a function creates a new process. Functions
share all files and present working directory with the caller. Traps
caught by the caller are reset to their default action inside the
function. If a function does not catch or specifically ignore a trap
condition, the function terminates and the condition is 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 typeset special command 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 option of the typeset
special command. Function identifiers and the associated text of the
functions can be listed with the -f option. Functions 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 reinvoking the shell.
Functions that must be defined across separate invocations of the
shell should be placed in the ENV file.
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 resembling:
[1] 1234
indicating that job number 1 was started asynchronously and had one
(top-level) process whose process ID was 1234.
Hewlett-Packard Company - 17 - HP-UX 11i Version 2: August 2003
ksh(1) ksh(1)
If you are running a job and want to do something else, type the
suspend character (usually ^Z (Ctrl-Z)) to send a STOP signal to the
current job. The shell then indicates that the job has been
`Stopped', and prints another prompt. The state of this job can be
manipulated by using the bg command to put it in the background,
running other commands (while it is stopped or running in the
background), and eventually restarting or returning the job to the
foreground by using the fg command. A ^Z takes effect immediately and
resembles an interrupt, since pending output and unread input are
discarded when ^Z is typed.
A job run in the background stops if it tries to read from the
terminal. Background jobs normally are allowed to produce output, but
can be disabled by giving the stty tostop command. If the user s
|