ksh and rksh — KornShell, a standard/restricted command and programming language.
ksh [ +-abcefhiklmnprstuvxBCDEGH ] [ +-o option ] ... [ - ] [ arg ... ]
rksh [ +-abcefhiklmnpstuvxBCDEGH ] [ +-o option ] ... [ - ] [ arg ... ]
Ksh is a command and programming language that executes commands read from a terminal or a file. Rksh is a restricted version of the command interpreter ksh; it is used to set up login names and execution environments whose capabilities are more controlled than those of the standard shell. See Invocation below for the meaning of arguments to the shell.
A metacharacter is one of the following characters:
; & ( ) | < > new-line space tab
A blank is a tab or a space. An identifier is a sequence of letters, digits, or underscores starting with a letter or underscore. Identifiers are used as components of variable names. A vname is a sequence of one or more identifiers separated by a . and optionally preceded by a .. Vnames are used as function and variable names. A word is a sequence of characters from the character set defined by the current locale, excluding non-quoted metacharacters.
A 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 Execution below) are documented here. For historical reasons, some of these built-ins behave differently than other built-ins and are called special built-ins.
A simple-command is a list of variable assignments (see Variable Assignments below) or a sequence of blank separated words which may be preceded by a list of variable assignments (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; 0-255 if it terminates normally; 256+signum if it terminates abnormally (the name of the signal corresponding to the exit status can be obtained via the -l option of the kill built-in utility).
A pipeline is a sequence of one or more commands separated by |. The standard output of each command but the last is connected by a 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 unless the pipefail option is enabled. Each pipeline can be preceded by the reserved word ! which causes the exit status of the pipeline to become 0 if the exit status of the last command is non-zero, and 1 if the exit status of the last command is 0.
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, which is lower than that of && and ||. The symbols && and || also have equal precedence. A semicolon (;) causes sequential execution of the preceding pipeline; an ampersand (&) causes asynchronous execution of the preceding pipeline (i.e., the shell does not wait for that pipeline to finish). The symbol |& 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 <& and >& with arg p to commands and by using -p option of the built-in 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.
One or more new-lines may appear in a list instead of a semicolon, to delimit a command. The first item of the first pipeline of a list that is a simple command not beginning with a redirection, and not occurring within a while, until, or if list, can be preceded by a semicolon. This semicolon is ignored unless the showme option is enabled as described with the set built-in below.
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 vname [ in word ... ] ;do list ;done
Each time a for command is executed, vname is set to the next word taken from the in word list. If in word ... is omitted, then the for command executes the do list once for each positional parameter that is set starting from 1 (see Parameter Expansion below). Execution ends when there are no more words in the list.
for (( [expr1] ; [expr2] ; [expr3] )) ;do list ;done
The arithmetic expression expr1 is evaluated first (see Arithmetic Evaluation below). The arithmetic expression expr2 is repeatedly evaluated until it evaluates to zero and when non-zero, list is executed and the arithmetic expression expr3 evaluated. If any expression is omitted, then it behaves as if it evaluated to 1.
select vname [ 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, then the positional parameters starting from 1 are used instead (see Parameter Expansion below). 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 variable vname 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 variable vname is set to null. The contents of the line read from standard input is saved in the variable REPLY. The list is executed for each selection until a break or end-of-file is encountered. If the REPLY variable is set to null by the execution of list, then the selection list is printed before displaying the PS3 prompt for the next selection.
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 the same as that used for pathname expansion (see Pathname Expansion below). The ;; operator causes execution of case to terminate. If ;& is used in place of ;; the next subsequent list, if any, is executed.
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 each successive elif list, the else list is executed. If the if list has non-zero exit status and there is no else list, then the if command 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, then the while command returns a zero exit status; until may be used in place of while to negate the loop termination test.
((expression))
The expression is evaluated using the rules for arithmetic evaluation described below. If the value of the arithmetic expression is non-zero, the exit status is 0, otherwise the exit status is 1.
(list)
Execute 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.
{ list;}
list is simply executed. Note that unlike the metacharacters ( and ), { and } are reserved words and must occur at the beginning of a line or after a ; in order 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.
function varname { list ;}
varname () { list ;}
Define a function which is referenced by varname. A function whose varname contains a . is called a discipline function and the portion of the varname preceding the last . must refer to an existing variable. The body of the function is the list of commands between { and }. A function defined with the function varname syntax can also be used as an argument to the . special built-in command to get the equivalent behavior as if the varname() syntax were used to define it. (See Functions below.)
namespace identifier { list ;}
Defines or uses the name space identifier and runs the commands in list in this name space. (See Name Spaces below.)
& [ name [ arg... ] ]
Causes subsequent list commands terminated by & to be placed in the background job pool name. If name is omitted a default unnamed pool is used. Commands in a named background pool may be executed remotely.
time [ pipeline ]
If pipeline is omitted the user and system time for the current shell and completed child processes is printed on standard error. Otherwise, pipeline is executed and the elapsed time as well as the user and system time are printed on standard error. The TIMEFORMAT variable may be set to a format string that specifies how the timing information should be displayed. See Shell Variables below for a description of the TIMEFORMAT variable.
The following reserved words are recognized as reserved only when they are the first word of a command and are not quoted:
if then else elif fi case esac for while until do done { } function select time [[ ]] !
One or more variable assignments can start a simple command or can be arguments to the typeset, enum, export, or readonly special built-in commands as well as to other declaration commands created as types. The syntax for an assignment is of the form:
varname=word
varname[word]=word
No space is permitted between varname and the = or between = and word.
varname=(assign_list)
No space is permitted between varname and the =. The variable varname is unset before the assignment. An assign_list can be one of the following:
word ... Indexed array assignment.
[word]=word ... Associative array assignment. If preceded by typeset -a this will create an indexed array instead.
assignment ... Compound variable assignment. This creates a compound variable varname with subvariables of the form varname.name, where name is the name portion of assignment. The value of varname will contain all the assignment elements. Additional assignments made to subvariables of varname will also be displayed as part of the value of varname. If no assignments are specified, varname will be a compound variable allowing subsequence child elements to be defined.
typeset [options] assignment ... Nested variable assignment. Multiple assignments can be specified by separating each of them with a ;. The previous value is unset before the assignment. Other declaration commands such as readonly, enum, and other declaration commands can be used in place of typeset.
. filename
Include the assignment commands contained in filename.
In addition, a += can be used in place of the = to signify adding to or appending to the previous value. When += is applied to an arithmetic type, word is evaluated as an arithmetic expression and added to the current value. When applied to a string variable, the value defined by word is appended to the value. For compound assignments, the previous value is not unset and the new values are appended to the current ones provided that the types are compatible.
The right hand side of a variable assignment undergoes all the expansion listed below except word splitting, brace expansion, and pathname expansion. When the left hand side is an assignment is a compound variable and the right hand is the name of a compound variable, the compound variable on the right will be copied or appended to the compound variable on the left.
A word beginning with # causes that word and all the following characters up to a new-line to be ignored.
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 expansion and command substitution characters, the 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, will be tested for aliases. If the last character of the alias value is a 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 alias command and can be removed with the unalias command.
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 which references the alias is read.
The following aliases are automatically preset when the shell is invoked as an interactive shell, unless invoked in POSIX compliance mode (see Invocation below). Preset aliases can be unset or redefined.
history='hist -l'
r='hist -s'
After alias substitution is performed, each word is checked to see if it begins with an unquoted ~. For tilde expansion, word also refers to the word portion of parameter expansion (see Parameter Expansion below). If a word is preceded by a tilde, then it is checked up to a / to see if it matches a user name in the password database (see getpw-name(3)). If a match is found, the ~ 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 ~ by itself, or in front of a /, is replaced by $HOME, unless the HOME variable is unset, in which case the current user's home directory as configured in the operating system is used. A ~ followed by a + or - is replaced by $PWD or $OLDPWD respectively.
In addition, when expanding a variable assignment (see Variable Assignments above), tilde expansion is attempted when the value of the assignment begins with a ~, and when a ~ appears after a :. A : also terminates a user name following a ~.
The tilde expansion mechanism may be extended or modified by defining one of the discipline functions .sh.tilde.set or .sh.tilde.get (see Functions and Discipline Functions below). If either exists, then upon encountering a tilde word to expand, that function is called with the tilde word assigned to either .sh.value (for the .sh.tilde.set function) or .sh.tilde (for the .sh.tilde.get function). Performing tilde expansion within a discipline function will not recursively call that function, but default tilde expansion remains active, so literal tildes should still be quoted where required. Either function may assign a replacement string to .sh.value. If this value is non-empty and does not start with a ~, it replaces the default tilde expansion when the function terminates. Otherwise, the tilde expansion is left unchanged.
The standard output from a command list enclosed in parentheses preceded by a dollar sign ( $(list) ), or in a brace group preceded by a dollar sign ( ${ list;} ), or in a pair of grave accents (``) may be used as part or all of a word; trailing new-lines are removed. In the second case, the { and } are treated as a reserved words so that { must be followed by a blank and } must appear at the beginning of the line or follow a ;. In the third (obsolete) 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). The command substitution $(n<#) will expand to the current byte offset for file descriptor n. Except for the second form, the command list is run in a subshell so that no side effects are possible. For the second form, the final } will be recognized as a reserved word after any token.
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.
Each command argument of the form <(list) or >(list) will run process list asynchronously connected to some file in /dev/fd if this directory exists, or else a fifo a temporary directory. The name of this file will become the argument to the command. If the form with > is selected then writing on this file will provide input for list. If < is used, then the file passed as an argument will contain the output of the list process. For example,
paste <(cut -f1 file1) <(cut -f3 file2) | tee >(process1) >(process2)
cuts fields 1 and 3 from the files file1 and file2 respectively, pastes the results together, and sends it to the processes process1 and 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 pipe(2) so programs that expect to lseek(2) on the file will not work. Process substitution of the form <(list) can also be used with the < redirection operator which causes the output of list to be standard input or the input for whatever file descriptor is specified.
A parameter is a variable, one or more digits, or any of the characters *, @, #, ?, -, $, and !. A variable is denoted by a vname. To create a variable whose vname contains a ., a variable whose vname consists of everything before the last . must already exist. A variable has a value and zero or more attributes. Variables can be assigned values and attributes by using the typeset special built-in command. The attributes supported by the shell are described later with the typeset special built-in command. Exported variables pass their attributes to the environment so that a newly invoked ksh that is a child or exec'd process of the current shell will automatically import them, unless the posix shell option is on.
The shell supports both indexed and associative arrays. An element of an array variable is referenced by a subscript. A subscript for an indexed array is denoted by an arithmetic expression (see Arithmetic Evaluation below) between a [ and a ]. To assign values to an indexed array, use vname=(value ...) or set -A vname value ... . The value of all non-negative subscripts must be in the range of 0 through 4,194,303. A negative subscript is treated as an offset from the maximum current index +1 so that -1 refers to the last element. Indexed arrays can be declared with the -a option to typeset. 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.
An associative array is created with the -A option to typeset. A subscript for an associative array is denoted by a string enclosed between [ and ].
Referencing any array without a subscript is equivalent to referencing the array with subscript 0.
The value of a variable may be assigned by writing:
vname=value [ vname=value ] ...
or
vname[subscript]=value [ vname[subscript]=value ] ...
Note that no space is allowed before or after the =.
Attributes assigned by the typeset special built-in command apply to all elements of the array. An array element can be a simple variable, a compound variable or an array variable. An element of an indexed array can be either an indexed array or an associative array. An element of an associative array can also be either. To refer to an array element that is part of an array element, concatenate the subscript in brackets. For example, to refer to the foobar element of an associative array that is defined as the third element of the indexed array, use ${vname[3][foobar]}
A nameref is a variable that is a reference to another variable. A nameref is created with the -n attribute of typeset. The value of the variable at the time of the typeset command becomes the variable that will be referenced whenever the nameref variable is used. The name of a nameref cannot contain a .. When a variable or function name contains a ., and the portion of the name up to the first . 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. If a nameref is used as the index of a for loop, a name reference is established for each item in the list. 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
typeset -n var=$1
inside the function causes references and assignments to var to be references and assignments to the variable whose name has been passed to the function.
If any of the floating point attributes, -E, -F, or -X, or the integer attribute, -i, is set for vname, then the value is subject to arithmetic evaluation as described below.
Positional parameters, parameters denoted by a number, may be assigned values with the set special built-in command. Parameter $0 is set from argument zero when the shell is invoked. The character $ is used to introduce substitutable parameters.
The shell reads all the characters from ${ to the matching } 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, when the variable name contains a .. The braces are also required when a variable is subscripted unless it is part of an Arithmetic Expression or a Conditional Expression. If 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 parameter is * or @, then all the positional parameters, starting with $1, are substituted (separated by a field separator character). If an array vname with last subscript * @, or for indexed arrays of the form sub1 .. sub2. is used, then the value for each of the elements between sub1 and sub2 inclusive (or all elements for * and @) is substituted, separated by the first character of the value of IFS.
If parameter is * or @, the number of positional parameters is substituted. Otherwise, the length of the value of the parameter is substituted.
The number of elements in the array vname is substituted.
Expands to the type name (See Type Variables below) or attributes of the variable referred to by vname.
Expands to the name of the variable referred to by vname. This will be vname except when vname is a name reference.
Expands to name of the subscript unless subscript is *, @. or of the form sub1 .. sub2. When subscript is *, the list of array subscripts for vname is generated. For a variable that is not an array, the value is 0 if the variable is set. Otherwise it is null. When subscript is @, same as above, except that when used in double quotes, each array subscript yields a separate argument. When subscript is of the form sub1 .. sub2 it expands to the list of subscripts between sub1 and sub2 inclusive using the same quoting rules as @.
These both expand to the names of the variables whose names begin with prefix. The expansions otherwise work like $@ and $*, respectively (see under Quoting below).
If parameter is set and is non-null then substitute its value; otherwise substitute word.
If parameter is not set or is null then set it to word; the value of the parameter is then substituted. Positional parameters may not be assigned to in this way.
If parameter is set and is non-null then substitute its value; otherwise, print word and exit from the shell (if not interactive). If word is omitted then a standard message is printed.
If parameter is set and is non-null then substitute word; otherwise substitute nothing.
In the above, 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:
print ${d:-$(pwd)}
If the colon ( : ) is omitted from the above expressions, then the shell only checks whether parameter is set or not.
Expands to the portion of the value of parameter starting at the character (counting from 0) determined by expanding offset as an arithmetic expression and consisting of the number of characters determined by the arithmetic expression defined by length. In the second form, the remainder of the value is used. If A negative offset counts backwards from the end of parameter. Note that one or more blanks is required in front of a minus sign to prevent the shell from interpreting the operator as :-. If parameter is * or @, or is an array name indexed by * or @, then offset and length refer to the array index and number of elements respectively. A negative offset is taken relative to one greater than the highest subscript for indexed arrays. The order for associative arrays is unspecified.
If the shell pattern matches the beginning of the value of parameter, then the value of this expansion is the value of the parameter with the matched portion deleted; otherwise the value of this 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 parameter is @, *, or an array variable with subscript @ or *, the substring operation is applied to each element in turn.
If the shell pattern matches the end of the value of parameter, then the value of this expansion is the value of the parameter with the matched part deleted; 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. When parameter is @, *, or an array variable with subscript @ or *, the substring operation is applied to each element in turn.
Expands parameter and replaces the longest match of pattern with the given string. Each occurrence of \n in string is replaced by the portion of parameter that matches the n-th subpattern. In the first form, only the first occurrence of pattern is replaced. In the second form, each match for pattern is replaced by the given string. The third form restricts the pattern match to the beginning of the string while the fourth form restricts the pattern match to the end of the string. When string is null, the pattern will be deleted and the / in front of string may be omitted. When parameter is @, *, or an array variable with subscript @ or *, the substitution operation is applied to each element in turn. In this case, the string portion of word will be re-evaluated for each element.
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 exit status returned by the last executed command. Its meaning depends on the command or function that defines it, but there are conventions that other commands often depend on: zero typically means 'success' or 'true', one typically means 'non-success' or 'false', and a value greater than one typically indicates some kind of error. Only the 8 least significant bits of $? (values 0 to 255) are preserved when the exit status is passed on to a parent process, but within the same (sub)shell environment, it is a signed integer value with a range of possible values as shown by the commands getconf INT_MIN and getconf INT_MAX. Shell functions that run in the current environment may return status values in this range. $The process ID of the main shell process. Note that this value will not change in a subshell, even if the subshell runs in a different process. See also .sh.pid. _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. While defining a compound variable or a type, _ is initialized as a reference to the compound variable or type. When a discipline function is invoked, _ is initialized as a reference to the variable associated with the call to this function. Finally when _ is used as the name of the first variable of a type definition, the new type is derived from the type of the first variable. (See Type Variables below.) !The process id or the pool name and job number of the last background command invoked or the most recent job put in the background with the bg built-in command. Background jobs started in a named pool will be in the form pool.number where pool is the pool name and number is the job number within that pool. .sh.commandWhen processing a DEBUG trap, this variable contains the current command line that is about to run. The value is in the same format as the output generated by the xtrace option (minus the preceding PS4 prompt). .sh.edcharThis variable contains the value of the keyboard character (or sequence of characters if the first character is an ESC, ASCII 033) that has been entered when processing a KEYBD trap (see Key Bindings below). 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. .sh.edcolThe character position of the cursor at the time of the most recent KEYBD trap. .sh.edmodeThe value is set to ESC when processing a KEYBD trap while in vi insert mode. (See Vi Editing Mode below.) Otherwise, .sh.edmode is null when processing a KEYBD trap. .sh.edtextThe characters in the input buffer at the time of the most recent KEYBD trap. The value is null when not processing a KEYBD trap. .sh.fileThe pathname of the file that contains the current command. .sh.funThe name of the current function that is being executed. .sh.levelSet to the current function depth. This can be changed inside a DEBUG trap and will set the context to the specified level. .sh.linenoSet during a DEBUG trap to the line number for the caller of each function. .sh.matchAn indexed array which stores the most recent match and subpattern matches after conditional pattern matches that match and after variables expansions using the operators #, %, or /. The 0-th element stores the complete match and the i-th. element stores the i-th submatch. The .sh.match variable becomes unset when the variable that has expanded is assigned a new value. .sh.mathUsed for defining arithmetic functions (see Arithmetic Evaluation below) and stores the list of user defined arithmetic functions. .sh.nameSet to the name of the variable at the time that a discipline function is invoked. .sh.subscriptSet to the name subscript of the variable at the time that a discipline function is invoked. .sh.subshellThe current depth for subshells and command substitution. .sh.pidSet to the process ID of the current shell. This is distinct from $$ as in forked subshells this is set to the process ID of the subshell instead of the parent shell's process ID. In virtual subshells .sh.pid retains its previous value. .sh.valueSet to the value of the variable at the time that the set or append discipline function is invoked. When a user defined arithmetic function is invoked, the value of .sh.value is saved and .sh.value is set to long double precision floating point. .sh.value is restored when the function returns. .sh.versionSet to a value that identifies the version of this shell. KSH_VERSIONA name reference to .sh.version. LINENOThe current line number within the script or function being executed. OLDPWDThe previous working directory set by the cd command. OPTARGThe value of the last option argument processed by the getopts built-in command. OPTINDThe index of the last option argument processed by the getopts built-in command. PPIDThe process id of the parent of the shell. PWDThe present working directory set by the cd command. RANDOMEach 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 RANDOM. REPLYThis variable is set by the select statement and by the read built-in command when no arguments are supplied. SECONDSEach 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. SHLVLAn integer variable that is incremented and exported each time the shell is invoked. If SHLVL is not in the environment when the shell is invoked, it is set to 1.The following variables are used by the shell:
CDPATHThe search path for the cd command. COLUMNSIf 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. EDITORIf the VISUAL variable is not set, the value of this variable will be checked for the patterns as described with VISUAL below and the corresponding editing option (see Special Command set below) will be turned on. ENVIf this variable is set, then parameter expansion, command substitution, and arithmetic expansion are performed on the value to generate the pathname of the script that will be executed when the shell is invoked interactively (see Invocation below). This file is typically used for alias and function definitions. The default value is $HOME/.kshrc. On systems that support a system wide /etc/ksh.kshrc initialization file, if the filename generated by the expansion of ENV begins with /./ or ./. the system wide initialization file will not be executed. FCEDITObsolete name for the default editor name for the hist command. FCEDIT is not used when HISTEDIT is set. FIGNOREA pattern that defines the set of filenames that will be ignored when performing filename matching. FPATHThe search path for function definitions. The directories in this path are searched for a file with the same name as the function or command when a function with the -u attribute is referenced and when a command is not found. If an executable file with the name of that command is found, then it is read and executed in the current environment. Unlike PATH, the current directory must be represented explicitly by . rather than by adjacent : characters or a beginning or ending :. HISTCMDNumber of the current command in the history file. HISTEDITName for the default editor name for the hist command. HISTFILEIf 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 Command Re-entry below). HISTSIZEIf 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 512. HOMEThe default argument (home directory) for the cd command. IFSInternal field separators, normally space, tab, and new-line that are used to separate the results of command substitution or parameter expansion and to separate fields with the built-in command read. The first character of the IFS variable is used to separate arguments for the "$*" expansion (see Quoting below). Each single occurrence of an IFS character in the string to be split, that is not in the isspace character class, and any adjacent characters in IFS that are in the isspace character class, delimit a field. One or more characters in IFS that belong to the isspace character class, delimit a field. In addition, if the same isspace character appears consecutively inside IFS, this character is treated as if it were not in the isspace class, so that if IFS consists of two tab characters, then two adjacent tab characters delimit a null field. JOBMAXThis variable defines the maximum number running background jobs that can run at a time. When this limit is reached, the shell will wait for a job to complete before starting a new job. LANGThis variable determines the locale category for any category not specifically selected with a variable starting with LC_ or LANG. LC_ALLThis variable overrides the value of the LANG variable and any other LC_ variable. LC_COLLATEThis variable determines the locale category for character collation information. LC_CTYPEThis variable determines the locale category for character handling functions. It determines the character classes for pattern matching (see Pathname Expansion below). LC_NUMERICThis variable determines the locale category for the decimal point character. LINESIf 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. MAILIf this variable is set to the name of a mail file and the MAILPATH variable is not set, then the shell informs the user of arrival of mail in the specified file. MAILCHECKThis variable specifies how often (in seconds) the shell will check for changes in the modification time of any of the files specified by the MAILPATH or MAIL variables. The default value is 600 seconds. When the time has elapsed the shell will check before issuing the next prompt. MAILPATHA colon ( : ) 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 MAILCHECK seconds. Each file name can be followed by a ? and a message that will be printed. The message will undergo parameter expansion, command substitution, and arithmetic expansion with the variable $_ defined as the name of the file that has changed. The default message is you have mail in $_. PATHThe search path for commands (see Execution below). The user may not change PATH if executing under rksh (except in .profile). PS1Every time a new command line is started on an interactive shell, the value of this variable is expanded to resolve backslash escaping, parameter expansion, command substitution, and arithmetic expansion. The result defines the primary prompt string for that command line. The default is ``$ ''. The character ! in the primary prompt string is replaced by the command number (see Command Re-entry below). Two successive occurrences of ! will produce a single ! when the prompt string is printed. Note that any terminal escape sequences used in the PS1 prompt thus need every instance of ! in them to be changed to !!. PS2Secondary prompt string, by default ``> ''. PS3Selection prompt string used within a select loop, by default ``#? ''. PS4The value of this variable is expanded for parameter evaluation, command substitution, and arithmetic expansion and precedes each line of an execution trace. By default, PS4 is ``+ ''. In addition when PS4 is unset, the execution trace prompt is also ``+ ''. SHELLThe pathname of the shell is kept in the environment. At invocation, if the basename of this variable is rsh, rksh, or krsh, then the shell becomes restricted. TIMEFORMATThe value of this parameter is used as a format string specifying how the timing information for pipelines prefixed with the time reserved word should be displayed. The % character introduces a format sequence that is expanded to a time value or other information. The format sequences and their meanings are as follows.The shell gives default values to PATH, PS1, PS2, PS3, PS4, MAILCHECK, FCEDIT, TMOUT and IFS, while HOME, SHELL, ENV, and MAIL are not set at all by the shell (although HOME is set by login(1)). On some systems MAIL and SHELL are also set by login(1).
After parameter expansion and command substitution, the results of substitutions are scanned for the field separator characters (those found in IFS) and split into distinct fields where such characters are found. Explicit null fields ("" or '') are retained. Implicit null fields (those resulting from parameters that have no values or command substitutions with no output) are removed.
If the braceexpand (-B) option is set then each of the fields resulting from IFS are checked to see if they contain one or more of the brace patterns {*,*}, {l1..l2} , {n1..n2} , {n1..n2% fmt} , {n1..n2 ..n3} , or {n1..n2 ..n3%fmt} , where * represents any character, l1,l2 are letters and n1,n2,n3 are signed numbers and fmt is a format specified as used by printf. In each case, fields are created by prepending the characters before the { and appending the characters after the } to each of the strings generated by the characters between the { and }. The resulting fields are checked to see if they have any brace patterns. In the first form, a field is created for each string between { and ,, between , and ,, and between , and }. The string represented by * can contain embedded matching { and } without quoting. Otherwise, each { and } with * must be quoted.
In the seconds form, l1 and l2 must both be either upper case or both be lower case characters in the C locale. In this case a field is created for each character from l1 thru l2.
In the remaining forms, a field is created for each number starting at n1 and continuing until it reaches n2 incrementing n1 by n3. The cases where n3 is not specified behave as if n3 where 1 if n1 N Search for next match of the last pattern to / or ?, but in reverse direction. Text Modification Edit Commands These commands will modify the line. a Enter input mode and enter text after the current character. A Append text to the end of the line. Equivalent to $a. [count]cmotion c[count]motion Delete current character through the character that motion would move the cursor to and enter input mode. If motion is c, the entire line will be deleted and input mode entered. C Delete the current character through the end of line and enter input mode. Equivalent to c$. S Equivalent to cc. [count]s Replace characters under the cursor in input mode. D Delete the current character through the end of line. Equivalent to d$. [count]dmotion d[count]motion Delete current character through the character that motion would move to. If motion is d , the entire line will be deleted. i Enter input mode and insert text before the current character. I Insert text before the beginning of the line. Equiva- lent to 0i. [count]P Place the previous text modification before the cur- sor. [count]p Place the previous text modification after the cursor. R Enter input mode and replace characters on the screen with characters you type overlay fashion. [count]rc Replace the count character(s) starting at the current cursor position with c, and advance the cursor. [count]x Delete current character. [count]^[[3~ (Forward delete) Same as x. [count]X Delete preceding character. [count]. Repeat the previous text modification command. [count]~ Invert the case of the count character(s) starting at the current cursor position and advance the cursor. [count]_ Causes the count word of the previous command to be appended and input mode entered. The last word is used if count is omitted. * Causes an * to be appended to the current word and pathname expansion attempted. If no match is found, it rings the bell. Otherwise, the word is replaced by the matching pattern and input mode is entered. \ Command or file name completion as described above. Other Edit Commands Miscellaneous commands. [count]ymotion y[count]motion Yank current character through character that motion would move the cursor to and puts them into the delete buffer. The text and cursor are unchanged. yy Yanks the entire line. Y Yanks from current position to end of line. Equiva- lent to y$. u Undo the last text modifying command. U Undo all the text modifying commands performed on the line. [count]v Returns the command hist -e ${VISUAL:-${EDITOR:-vi}} count in the input buffer. If count is omitted, then the current line is used. ^L Line feed and print current line. Has effect only in control mode. ^J (New line) Execute the current line, regardless of mode. ^M (Return) Execute the current line, regardless of mode. # If the first character of the command is a #, then this command deletes this # and each # that follows a newline. Otherwise, sends the line after inserting a # 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. [count]= If count is not specified, it generates the list of matching commands or file names as described above. Otherwise, the word under the cursor is replaced by the count item from the most recently generated com- mand or file list. If the cursor is not on a word, it is inserted instead. @letter Your alias list is searched for an alias by the name _letter and if an alias of this name is defined, its value will be inserted on the input queue for process- ing. ^V Display version of the shell. Built-in Commands. The simple-commands listed below are built in to the shell and are exe- cuted in the same process as the shell. The effects of any added In- put/Output redirections are local to the command, except for the exec and redirect commands. Unless otherwise indicated, the output is writ- ten on standard output (file descriptor 1) and the exit status, when there is no syntax error, is zero. Except for :, true, false, and echo, all built-in commands accept -- to indicate end of options, and are self-documenting. The self-documenting commands interpret the option --man as a request to display that command's own manual page, --help as a request to dis- play the OPTIONS section from their manual page, and -? as a request to print a brief usage message. All these are processed as error mes- sages, so they are written on standard error (file descriptor 2) and to pipe them into a pager such as more(1) you need to add a 2>&1 redirect- ion before the |. The display of boldface text depends on whether stan- dard error is on a terminal, so is disabled when using a pager. Export- ing the ERROR_OPTIONS environment variable with a value containing em- phasis will force this on; a value containing noemphasis forces it off. The test/[ command needs an additional -- argument to recognize self- documentation options, e.g. test --man --. The exec and redirect com- mands, as they make redirections permanent, should use self-documenta- tion options in a subshell when redirecting, for example: (redirect --man) 2>&1. There are advanced output options as well; see getopts --man for more information. Commands that are preceded by a <*> symbol below are special built- in commands and are treated specially in the following ways: 1. Variable assignment lists preceding the command remain in effect when the command completes. 2. I/O redirections are processed after variable assignments. 3. Errors cause a script that contains them to abort. 4. They are not valid function names. Commands that are preceded by a <**> symbol below are declaration com- mands. Any following words that are in the format of a variable as- signment are expanded with the same rules as a variable assignment. This means that tilde expansion is performed after the = sign, array assignments of the form varname=(assign_list) are supported, and field splitting and pathname expansion are not performed. <*> : [ arg ... ] The command only expands parameters. <*> . name [ arg ... ] If name is a function defined with the function name reserved word syntax, the function is executed in the current environment (as if it had been defined with the name() syntax). Otherwise if 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 PATH is used to find the directory con- taining the file. If any arguments arg are given, they become the positional parameters while processing the . command and the original positional parameters are restored upon completion. Otherwise the positional parameters are unchanged. The exit status is the exit status of the last command executed. [ expression ] The [ command is the same as test, with the exception that an additional closing ] argument is required. See test below. alias [ -ptx ] [ name[ =value ] ] ... alias with no arguments prints the list of aliases in the form name=value on standard output. The -p option causes the word alias to be inserted before each one. When one or more argu- ments are given, an alias is defined for each name whose value is given. A trailing space in value causes the next word to be checked for alias substitution. With the -t option, each name is looked up as a command in $PATH and its path is added to the hash table as a 'tracked alias'. If no name is given, this prints the hash table. See hash. Without the -t option, for each name in the argument list for which no value is given, the name and value of the alias is printed. The obsolete -x option has no effect. The exit status is non-zero if a name is given, but no value, and no alias has been defined for the name. autoload name ... Marks each name undefined so that the FPATH variable will be searched to find the function definition when the function is referenced. The same as typeset -fu. bg [ job... ] This command is only on systems that support job control. Puts each specified job into the background. The current job is put in the background if job is not specified. See Jobs for a de- scription of the format of job. <*> break [ n ] Exit from the enclosing for, while, until, or select loop, if any. If n is specified, then break n levels. builtin [ -ds ] [ -f file ] [ name ... ] If name is not specified, and no -f option is specified, the built-ins are printed on standard output. The -s option prints only the special built-ins. Otherwise, each name represents the pathname whose basename is the name of the built-in. The entry point function name is determined by prepending b_ to the built- in name. A built-in specified by a pathname will only be exe- cuted when that pathname would be found during the path search. Built-ins found in libraries loaded via the .paths file will as- sociate with the pathname of the directory containing the .paths file. The ISO C/C++ prototype is b_mycommand(int argc, char *argv[], void *context) for the builtin command mycommand where argv is array an of argc elements and context is an optional pointer to a Shell_t structure as described in <ast/shell.h>. Special built-ins cannot be bound to a pathname or deleted. The -d option deletes each of the given built-ins. On systems that support dynamic loading, the -f option names a shared library containing the code for built-ins. The shared library prefix and/or suffix, which depend on the system, can be omitted. Once a library is loaded, its symbols become available for subsequent invocations of builtin. Multiple libraries can be specified with separate invocations of the builtin command. Libraries are searched in the reverse order in which they are specified. When a library is loaded, it looks for a function in the library whose name is lib_init() and invokes this function with an argu- ment of 0. cd [ -L ] [ -eP ] [ arg ] cd [ -L ] [ -eP ] old new This command can be in either of two forms. In the first form it changes the current directory to arg. If arg is - the direc- tory is changed to the previous directory. The shell variable HOME is the default arg. The variable PWD is set to the current directory. The shell variable CDPATH defines the search path for the directory containing arg. Alternative directory names are separated by a colon (:). The default path is <null> (spec- ifying 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 arg begins with a / then the search path is not used. Otherwise, each directory in the path is searched for arg. The second form of cd substitutes the string new for the string old in the current directory name, PWD, and tries to change to this new directory. By default, symbolic link names are treated literally when find- ing the directory name. This is equivalent to the -L option. The -P option causes symbolic links to be resolved when deter- mining the directory. The last instance of -L or -P on the com- mand line determines which method is used. If -e and -P are both in effect and the correct PWD could not be determined after successfully changing the directory, cd will return with exit status one and produce no output. If any other error occurs while both flags are active, the exit status is greater than one. The cd command may not be executed by rksh. command [ -pvxV ] name [ arg ... ] With the -v option, command is equivalent to the built-in whence command described below. The -V option causes command to act like whence -v. Without the -v or -V options, command executes name with the ar- guments given by arg. Functions and aliases will not be searched for when finding name. If name refers to a special built-in, as marked with <*> in this manual, command disables the special properties described above for that mark, executing the command as a regular built-in. (For example, using command set -o option-name prevents a script from terminating when an invalid option name is given.) The -p option causes the operating system's standard utilities path (as output by getconf PATH) to be searched rather than the one defined by the value of PATH. The -x option runs name as an external command, bypassing built- ins. If the arguments contain at least one word that expands to multiple arguments, such as "$@" or *.txt, then the -x option also allows executing external commands with argument lists that are longer than the operating system allows. This functionality is similar to xargs(1) but is easier to use. The shell does this by invoking the external command multiple times if needed, di- viding the expanded argument list over the invocations. Any ar- guments that come before the first word that expands to multiple arguments, as well as any that follow the last such word, are considered static arguments and are repeated for each invoca- tion. This allows each invocation to use the same command op- tions, as well as the same trailing destination arguments for commands like cp(1) or mv(1). When all invocations are com- pleted, command -x exits with the status of the invocation that had the highest exit status. (Note that command -x may still fail with an "argument list too long" error if a single argument exceeds the maximum length of the argument list, or if a long arguments list contains no word that expands to multiple argu- ments.) <**> compound vname[=value] ... Causes each vname to be a compound variable. The same as type- set -C. <*> continue [ n ] Resume the next iteration of the enclosing for, while, until, or select loop. If n is specified, then resume at the n-th enclos- ing loop. disown [ job... ] Causes the shell not to send a HUP signal to each given job, or all active jobs if job is omitted, when a login shell termi- nates. echo [ arg ... ] When the first arg does not begin with a -, and none of the ar- guments contain a \, then echo prints each of its arguments sep- arated by a space and terminated by a new-line. Otherwise, the behavior of echo is system dependent and print or printf de- scribed below should be used. See echo(1) for usage and de- scription. <**> enum [ -i ] type[=(value ...) ] Creates a declaration command named type that allows one of the specified values as enumeration names. If =(value ...) is omit- ted, then type must be an indexed array variable with at least two elements and the values are taken from this array variable. If -i is specified the values are case-insensitive. Declaration commands are created as special builtins that cannot be removed or overridden by shell functions. Each created declaration com- mand has a --man option that shows documentation on its type's behavior and possible values. Within arithmetic expressions (see Arithmetic Evaluation above), enumeration type values translate to index numbers between 0 and the number of defined values minus 1. It is an error for an arithmetic expression to assign a value outside of that range. Decimal fractions are ignored. <*> eval [ arg ... ] The arguments are read as input to the shell and the resulting command(s) executed. <*> exec [ -c ] [ -a name ] [ arg ... ] If arg is given, the command specified by the arguments is exe- cuted in place of this shell without creating a new process. The value of the SHLVL environment variable is decreased by one, unless the shell replaced is a subshell. The -c option causes the environment to be cleared before applying variable assign- ments associated with the exec invocation. The -a option causes name rather than the first arg, to become argv[0] for the new process. If arg is not given and only I/O redirections are given, then this command persistently modifies file descriptors as in redirect. <*> exit [ n ] Causes the shell to exit with the exit status specified by n. The value will be the least significant 8 bits of n (if speci- fied) or of the exit status of the last command executed. An end-of-file will also cause the shell to exit, except for an in- teractive shell that has the ignoreeof option turned on (see set below). <*><**> export [ -p ] [ name[=value] ] ... If 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-input. The export command is the same as typeset -x except that if you use export within a function, no local variable is created. The -p option causes the word export to be inserted before each one. Otherwise, the given names are marked for automatic export to the environment of subsequently-executed commands. false Does nothing, and exits 1. Used with until for infinite loops. fc [ -e ename ] [ -N num ] [ -nlr ] [ first [ last ] ] fc -s [ old=new ] [ command ] The same as hist. fg [ job... ] This command is only on systems that support job control. Each job specified is brought to the foreground and waited for in the specified order. Otherwise, the current job is brought into the foreground. See Jobs for a description of the format of job. <**> float vname[=value] ... Declares each vname to be a long floating point number. The same as typeset -lE. functions [ -Stux ] [ name ... ] Lists functions. The same as typeset -f. getconf [ name [ pathname ] ] Prints the current value of the configuration parameter given by name. The configuration parameters are defined by the IEEE POSIX 1003.1 and IEEE POSIX 1003.2 standards. (See pathconf(2) and sysconf(3).) The pathname argument is required for parame- ters whose value depends on the location in the file system. If no arguments are given, getconf prints the names and values of the current configuration parameters. The pathname / is used for each of the parameters that requires pathname. getopts [ -a name ] optstring vname [ arg ... ] Checks arg for legal options. If arg is omitted, the positional parameters are used. An option argument begins with a + or a -. An option not beginning with + or - or the argument -- ends the options. Options beginning with + are only recognized when opt- string begins with a +. optstring contains the letters that getopts recognizes. If a letter is followed by a :, that option is expected to have an argument. The options can be separated from the argument by blanks. The option -? causes getopts to generate a usage message on standard error. The -a argument can be used to specify the name to use for the usage message, which defaults to $0. getopts places the next option letter it finds inside variable vname each time it is invoked. The option letter will be prepended with a + when arg begins with a +. The index of the next arg is stored in OPTIND. The option argument, if any, gets stored in OPTARG. A leading : in optstring causes getopts to store the letter of an invalid option in OPTARG, and to set vname to ? for an un- known option and to : when a required option argument is miss- ing. Otherwise, getopts prints an error message. The exit sta- tus is non-zero when there are no more options. There is no way to specify any of the options :, +, -, ?, [, and ]. The option # can only be specified as the first option. hash [ -r ] [ utility ] hash displays or modifies the hash table with the locations of recently used programs. If given no arguments, it lists all com- mand/path associations (a.k.a. 'tracked aliases') in the hash table. Otherwise, hash performs a PATH search for each utility supplied and adds the result to the hash table. The -r option empties the hash table. This can also be achieved by resetting PATH. hist [ -e ename ] [ -N num ] [ -nlr ] [ first [ last ] ] hist -s [ old=new ] [ command ] In the first form, a range of commands from first to last is se- lected from the last HISTSIZE commands that were typed at the terminal. The arguments first and last may be specified as a number or as a string. A string is used to locate the most re- cent command starting with the given string. A negative number is used as an offset to the current command number. If the -l option is selected, the commands are listed on standard output. Otherwise, the editor program ename is invoked on a file con- taining these keyboard commands. If ename is not supplied, then the value of the variable HISTEDIT is used. If HISTEDIT is not set, then FCEDIT (default /bin/ed) is used as the editor. When editing is complete, the edited command(s) is executed if the changes have been saved. If last is not specified, then it will be set to first. If first is not specified, the default is the previous command for editing and -16 for listing. The option -r reverses the order of the commands and the option -n suppresses command numbers when listing. In the second form, command is interpreted as first described above and defaults to the last command executed. The resulting command is executed after the optional substitution old=new is performed. The option -N causes hist to start num commands back. <**> integer vname[=value] ... Declares each vname to be a long integer number. The same as typeset -li. jobs [ -lnp ] [ job ... ] Lists information about each given job; or all active jobs if job is omitted. The -l option lists process ids in addition to the normal information. The -n option only displays jobs that have stopped or exited since last notified. The -p option causes only the process group to be listed. See Jobs for a de- scription of the format of job. kill [ -s signame ] job ... kill [ -n signum ] job ... kill -Ll [ sig ... ] Sends either the TERM (terminate) signal or the specified signal to the specified jobs or processes. Signals are either given by number with the -n option or by name with the -s option (as given in <signal.h>, stripped of the prefix ``SIG'' with the ex- ception that SIGCLD is named CHLD). For backward compatibility, the n and s can be omitted and the number or name placed immedi- ately after the -. 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 job can be the process id of a process that is not a member of one of the ac- tive jobs. See Jobs for a description of the format of job. In the third form, kill -l, or kill -L, if sig is not specified, the signal names are listed. The -l option list only the signal names. -L options lists each signal name and corresponding num- ber. Otherwise, for each sig that is a name, the corresponding signal number is listed. For each sig that is a number, the signal name corresponding to the least significant 8 bits of sig is listed. let arg ... Each arg is a separate arithmetic expression to be evaluated. let only recognizes octal numbers starting with 0 when the set option letoctal is on. See Arithmetic Evaluation above for a description of arithmetic expression evaluation. The exit status is 0 if the value of the last expression is non- zero, and 1 otherwise. <**> nameref vname[=refname] ... Declares each vname to be a variable name reference. The same as typeset -n. print [ -CRenprsv ] [ -u unit ] [ -f format ] [ arg ... ] With no options or with option - or --, each arg is printed on standard output. The -f option causes the arguments to be printed as described by printf. In this case, any e, n, r, R options are ignored. Otherwise, unless the -C, -R, -r, or -v are specified, the following escape conventions will be applied: \a The alert character (ASCII 07). \b The backspace character (ASCII 010). \c Causes print to end without processing more arguments and not adding a new-line. \f The formfeed character (ASCII 014). \n The newline character (ASCII 012). \r The carriage return character (ASCII 015). \t The tab character (ASCII 011). \v The vertical tab character (ASCII 013). \E The escape character (ASCII 033). \\ The backslash character \. \0x The character defined by the 1, 2, or 3-digit octal string given by x. The -R option will print all subsequent arguments and options other than -n. The -e causes the above escape conventions to be applied. This is the default behavior. It reverses the effect of an earlier -r. The -p option causes the arguments to be written onto the pipe of the process spawned with |& instead of standard output. The -v option treats each arg as a variable name and writes the value in the printf %B format. The -C op- tion treats each arg as a variable name and writes the value in the printf %#B format. The -s option causes the arguments to be written onto the history file instead of standard output. The -u option can be used to specify a one digit file descriptor unit number unit on which the output will be placed. The de- fault is 1. If the option -n is used, no new-line is added to the output. printf [ -v vname ] format [ arg ... ] The arguments arg are printed on standard output in accordance with the ANSI C formatting rules associated with the format string format. If the number of arguments exceeds the number of format specifications, the format string is reused to format re- maining arguments. The following extensions can also be used: %b A %b format can be used instead of %s to cause escape se- quences in the corresponding arg to be expanded as de- scribed in print. %B A %B option causes each of the arguments to be treated as variable names and the binary value of variable will be printed. The alternate flag # causes a compound variable to be output on a single line. This is most useful for compound variables and variables whose attribute is -b. %H A %H format can be used instead of %s to cause characters in arg that are special in HTML and XML to be output as their entity name. The alternate flag # formats the out- put for use as a URI. %p A %p format will convert the given number to hexadecimal. %P A %P format can be used instead of %s to cause arg to be interpreted as an extended regular expression and be printed as a shell pattern. %q A %q format can be used instead of %s to cause the re- sulting string to be quoted in a manner than can be rein- put to the shell. When q is preceded by the alternative format specifier, #, the string is quoted in manner suit- able as a field in a .csv format file. %(date-format)T A %(date-format)T format can be used to treat an argument as a date/time string and to format the date/time accord- ing to the date-format. %Q A %Q format will convert the given number of seconds to readable time. %R A %R format can be used instead of %s to cause arg to be interpreted as a shell pattern and to be printed as an extended regular expression. %Z A %Z format will output a byte whose value is 0. %d The precision field of the %d format can be followed by a . and the output base. In this case, the # flag charac- ter causes base# to be prepended. # The # flag, when used with the %d format without an out- put base, displays the output in powers of 1000 indicated by one of the following suffixes: k M G T P E, and when used with the %i format displays the output in powers of 1024 indicated by one of the following suffixes: Ki Mi Gi Ti Pi Ei. = The = flag centers the output within the specified field width. L The L flag, when used with the %c or %s formats, treats precision as character width instead of byte count. , The , flag, when used with the %d or %f formats, sepa- rates groups of digits with the grouping delimiter (, on groups of 3 in the C locale). The -v option assigns the output directly to a variable instead of writing it to standard output. This is faster than cap- turing the output using a command substitution and avoids the latter's stripping of final linefeed characters (\n). The vname argument should be a valid variable name, op- tionally with one or more array subscripts in square brackets. Note that square brackets should be quoted to avoid pathname expansion. pwd [ -LP ] Outputs the value of the current working directory. The -L op- tion is the default; it prints the logical name of the current directory. If the -P option is given, all symbolic links are resolved from the name. The last instance of -L or -P on the command line determines which method is used. read [ -ACSprsv ] [ -d delim ] [ -n n ] [ [ -N n ] [ -t timeout ] [ -u unit ] [ vname?prompt ] [ vname ... ] The shell input mechanism. One line is read and is broken up into fields using the characters in IFS as separators. The es- cape character, \, is used to remove any special meaning for the next character and for line continuation. The -d option causes the read to continue to the first character of delim rather than new-line. The -n option causes at most n bytes to read rather a full line but will return when reading from a slow device as soon as any characters have been read. The -N option causes ex- actly n to be read unless an end-of-file has been encountered or the read times out because of the -t option. In raw mode, -r, the \ character is not treated specially. The first field is assigned to the first vname, the second field to the second vname, etc., with leftover fields assigned to the last vname. When vname has the binary attribute and -n or -N is specified, the bytes that are read are stored directly into the variable. If the -v is specified, then the value of the first vname will be used as a default value when reading from a terminal device. The -A option causes the variable vname to be unset and each field that is read to be stored in successive elements of the indexed array vname. The -C option causes the variable vname to be read as a compound variable. Blanks will be ignored when finding the beginning open parenthesis. The -S option causes the line to be treated like a record in a .csv format file so that double quotes can be used to allow the delimiter character and the new-line character to appear within a field. The -p op- tion causes the input line to be taken from the input pipe of a process spawned by the shell using |&. If the -s option is present, the input will be saved as a command in the history file. The option -u can be used to specify a one digit file de- scriptor unit unit to read from. The file descriptor can be opened with the exec special built-in command. The default value of unit n is 0. The option -t is used to specify a time- out in seconds when reading from a terminal or pipe. If vname is omitted, then REPLY is used as the default vname. An end-of- file with the -p option causes cleanup for this process so that another can be spawned. If the first argument contains a ?, the remainder of this word is used as a 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. <*><**> readonly [ -p ] [ vname[=value] ] ... If vname is not given, the names and values of each variable with the read-only attribute is printed with the values quoted in a manner that allows them to be re-input. The -p option causes the word readonly to be inserted before each one. Other- wise, the given vnames are marked read-only and these names can- not be changed by subsequent assignment. Unlike typeset -r , readonly does not create a function-local scope and the given vnames are marked globally read-only by default. When defining a type, if the value of a read-only subvariable is not defined, the value is required when creating each instance. redirect This command only accepts input/output redirections. It can open and close files and modify file descriptors from 0 to 9 as specified by the input/output redirection list (see the In- put/Output section above), with the difference that the effect persists past the execution of the redirect command. When in- voking another program, file descriptors greater than 2 that were opened with this mechanism are only passed on if they are explicitly redirected to themselves as part of the invocation (e.g. 4>&4) or if the posix option is set. <*> return [ n ] Causes a shell function, dot script (see . and source), or pro- file script to return to the invoking shell environment with the exit status specified by n. This status value can use the full signed integer range as shown by the commands getconf INT_MIN and getconf INT_MAX. A value outside that range will produce a warning and an exit status of 128. If n is omitted, then the value of $? is assumed, i.e., the exit status of the last com- mand executed is passed on. If return is invoked while not in a function, dot script, or profile script, then it behaves the same as exit. <*> set [ +-BCGHabefhkmnprstuvx ] [ +-o [ option ] ] ... [ +-A vname ] [ arg ... ] The options for this command have meaning as follows: -A Array assignment. Unset the variable vname and assign values sequentially from the arg list. If +A is used, the variable vname is not unset first. -B Enable brace group expansion. On by default, except if ksh is invoked as sh or rsh. -C Prevents redirection > from truncating existing files. Files that are created are opened with the O_EXCL mode. Requires >| to truncate a file when turned on. -G Enables recursive pathname expansion. This adds the double-star pattern ** to the pathname expansion (see Pathname Expansion above). By itself, it matches the recursive contents of the current directory, which is to say, all files and directories in the current directory and in all its subdirectories, sub-subdirectories, and so on. If the pathname pattern ends in **/, only direc- tories and subdirectories are matched, including sym- bolic links that point to directories. A prefixed di- rectory name is not included in the results unless that directory was itself found by a pattern. For example, dir/** matches the recursive contents of dir but not dir itself, whereas di[r]/** matches both dir itself and the recursive contents of dir. Symbolic links to non-direc- tories are not followed. Symbolic links to directories are followed if they are specified literally or match a pattern as described under Pathname Expansion, but not if they result from a double-star pattern. -H Enable !-style history expansion similar to csh(1). -a All subsequent variables that are defined are automati- cally exported. -b Prints job completion messages as soon as a background job changes state rather than waiting for the next prompt. -e Unless contained in a || or && command, or the command following an if while or until command or in the pipe- line following !, if a command has a non-zero exit sta- tus, execute the ERR trap, if set, and exit. This mode is disabled while reading profiles. -f Disables pathname expansion. -h Each command becomes a tracked alias when first encoun- tered. -k (Obsolete). All variable assignment arguments are placed in the environment for a command, not just those that precede the command name. -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 auto- matically for interactive shells. -n Read commands and check them for syntax errors, but do not execute them. Ignored for interactive shells. -o The following argument can be one of the following op- tion names: allexport Same as -a. backslashctrl The backslash character \ escapes the next con- trol character in the emacs built-in editor and the next erase or kill character in the vi built-in editor. On by default. bgnice All background jobs are run at a lower priority. This is the default mode. braceexpand Same as -B. emacs Puts you in an emacs style in-line editor for command entry. errexit Same as -e. globcasedetect When this option is turned on, globbing (see Pathname Expansion above) and file name listing and completion (see In-line Editing Options above) automatically become case-insensitive on file systems where the difference between upper- and lowercase is ignored for file names. This is transparently determined for each directory, so a path pattern that spans multiple file systems can be part case-sensitive and part case-insen- sitive. In more precise terms, each slash-sepa- rated path name component pattern p is treated as ~(i:p) if its parent directory exists on a case-insensitive file system. This option is only present on operating systems that support case-insensitive file systems. globstar Same as -G. gmacs Puts you in a gmacs style in-line editor for command entry. histexpand Same as -H. ignoreeof An interactive shell will not exit on end-of- file. The command exit must be used. keyword Same as -k. letoctal The let command allows octal numbers starting with 0. On by default if ksh is invoked as sh or rsh. markdirs All directory names resulting from pathname ex- pansion have a trailing / appended. monitor Same as -m. multiline The built-in editors will use multiple lines on the screen for lines that are longer than the width of the screen. This may not work for all terminals. noclobber Same as -C. noexec Same as -n. noglob Same as -f. nolog Obsolete; has no effect. notify Same as -b. nounset Same as -u. pipefail A pipeline will not complete until all compo- nents of the pipeline have completed, and the return value will be the value of the last non- zero command to fail or zero if no command has failed. posix Enables the POSIX standard mode for maximum com- patibility with other compliant shells. At the moment that the posix option is turned on, it also turns on letoctal and turns off -B/braceex- pand; the reverse is done when posix is turned back off. (These options can still be controlled independently in between.) Furthermore, the posix option is automatically turned on upon in- vocation if ksh is invoked as sh or rsh. In that case, or if the option is turned on by specify- ing -o posix on the invocation command line, the invoked shell will not set the preset aliases even if interactive, and will not import type attributes for variables (such as integer or left/right justify) from the environment. In addition, while on, the posix option o disables exporting variable type attributes to the environment for other ksh processes to import; o causes file descriptors > 2 to be left open when invoking another program; o disables the &> redirection shorthand; o makes the <> redirection operator default to redirecting standard input if no file de- scriptor number precedes it; o disables the special floating point constants Inf and NaN in arithmetic evaluation so that, e.g., $((inf)) and $((nan)) refer to the variables by those names; o enables the recognition of a leading zero as introducing an octal number in all arithmetic evaluation contexts, except in the let built- in while letoctal is off; o stops the . command (but not source) from looking up functions defined with the func- tion syntax; o changes the test/[ built-in command to make its deprecated expr1 -a expr2 and expr1 -o expr2 operators work even if expr1 equals "!" or "(" (which means the nonstandard unary -a file and -o option operators cannot be di- rectly negated using ! or wrapped in paren- theses); and o disables a hack that makes test -t ([ -t ]) equivalent to test -t 1 ([ -t 1 ]). privileged Same as -p. showme When enabled, simple commands or pipelines pre- ceded by a semicolon (;) will be displayed as if the xtrace option were enabled but will not be executed. Otherwise, the leading ; will be ig- nored. trackall Same as -h. verbose Same as -v. vi Puts you in insert mode of a vi style in-line editor until you hit the escape character 033. This puts you in control mode. A return sends the line. viraw Each character is processed as it is typed in vi mode. The shell may have been compiled to force this option on at all times. Otherwise, canoni- cal processing (line-by-line input) is initially enabled and the command line 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 process- ing with the type-ahead echoing of raw mode. If the viraw option is set, the terminal will al- ways 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. xtrace Same as -x. If no option name is supplied, then the current option settings are printed. -p Disables processing of the $HOME/.profile file and uses the file /etc/suid_profile instead of the 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. -r Enables the restricted shell. This option cannot be un- set once set. -s Sort the positional parameters lexicographically. -t (Obsolete). Exit after reading and executing one com- mand. -u Treat unset parameters as an error when substituting. $@ and $* are exempt. -v Print shell input lines as they are read. -x Print commands and their arguments as they are executed. -- Do not change any of the options; useful in setting $1 to a value beginning with -. If no arguments follow this option then the positional parameters are unset. As an obsolete feature, if the first arg is - then the -x and -v options are turned off and the next arg is treated as the first argument. Using + rather than - 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 $-. Un- less -A is specified, the remaining arguments are positional pa- rameters and are assigned, in order, to $1 $2 .... If no argu- ments are given, then the names and values of all variables are printed on the standard output. <*> shift [ n ] The positional parameters from $n+1 ... are renamed $1 ... , default n is 1. The parameter n can be any arithmetic expres- sion that evaluates to a non-negative number less than or equal to $#. sleep [ -s ] duration Suspends execution for the number of decimal seconds or frac- tions of a second given by duration. duration can be an inte- ger, floating point value or ISO 8601 duration specifying the length of time to sleep. The option -s causes the sleep builtin to terminate when it receives any signal. If duration is not specified in conjunction with -s, sleep will wait for a signal indefinitely. source name [ arg ... ] Same as ., except it is not treated as a special built-in com- mand. stop job ... Sends a SIGSTOP signal to one or more processes specified by job, suspending them until they receive SIGCONT. The same as kill -s STOP. suspend Sends a SIGSTOP signal to the main shell process, suspending the script or child shell session until it receives SIGCONT (for in- stance, when typing fg in the parent shell). Equivalent to kill -s STOP "$$", except that it accepts no operands and re- fuses to suspend a login shell. test expression The test and [ commands execute conditional expressions similar to those specified for the [[ compound command under Conditional Expressions above, but with several important differences. The =, == and != operators test for string (in)equality without pat- tern matching; == is nonstandard and unportable. The f3&& and || operators are not available. Instead, the -a and -o binary oper- ators can be used, but they are fraught with pitfalls due to grammatical ambiguities and therefore deprecated in favor of in- voking separate test commands. Most importantly, as test and [ are simple regular commands, field splitting and pathname expan- sion are performed on all their arguments and all aspects of regular shell grammar (such as redirection) remain active. This is usually harmful, so care must be taken to quote arguments and expansions to avoid this. To avoid the many pitfalls arising from these issues, the [[ compound command should be used in- stead. The primary purpose of the test and [ commands is compat- ibility with other shells that lack [[. The test/[ command does not parse options except if there are two arguments and the second is --. To access the inline docu- mentation with an option such as --man, you need one of the forms test --man -- or [ --man -- ]. times Displays the accumulated user and system CPU times, one line with the times used by the shell and another with those used by all of the shell's child processes. No options are supported. <*> trap [ -p ] [ action ] [ sig ] ... The -p option causes the trap action associated with each trap as specified by the arguments to be printed with appropriate quoting. Otherwise, action will be processed as if it were an argument to eval when the shell receives signal(s) sig. Each 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 action is omitted and the first sig is a number, or if action is -, then the trap(s) for each sig are reset to their original values. If action is the null string then this signal is ignored by the shell and by the commands it invokes. If sig is ERR then action will be executed whenever a command has a non-zero exit status. If sig is DEBUG then action will be executed before each command. The variable .sh.command will contain the current command line when action is running, in the same format as the output generated by the xtrace option (minus the preceding PS4 prompt). If the exit status of the trap is 2 the command will not be executed. If the exit status of the trap is 255 and inside a function or a dot script, the function or dot script will return. If sig is 0 or EXIT and the trap statement is executed inside the body of a function defined with the function name syntax, then the command action is exe- cuted after the function completes. If sig is 0 or EXIT for a trap set outside any function then the command action is exe- cuted on exit from the shell. If sig is KEYBD, then action will be executed whenever a key is read while in emacs, gmacs, or vi mode. The trap command with no arguments prints a list of com- mands associated with each signal number. An exit or return without an argument in a trap action will preserve the exit status of the command that invoked the trap. true Does nothing, and exits 0. Used with while for infinite loops. type [ -afpq ] name ... The same as whence -v. <*><**> typeset [ +-ACHSbflmnprstux ] [ +-EFLRXZi[n] ] [ +-M [ map- name ] ] [ -T [ tname=(assign_list) ] ] [ -h str ] [ -a [type] ] [ vname[=value ] ] ... Sets attributes and values for shell variables and functions. When invoked inside a function defined with the function name syntax, a new instance of the variable vname is created, and the variable's value and type are restored when the function com- pletes. The following list of attributes may be specified: -A Declares vname to be an associative array. Subscripts are strings rather than arithmetic expressions. -C Causes each vname to be a compound variable. If value names a compound variable, it is copied into vname. Oth- erwise, the empty compound value is assigned to vname. -a Declares vname to be an indexed array. If type is speci- fied, it must be the name of an enumeration type created with the enum command and it allows enumeration constants to be used as subscripts. -E Declares vname to be a double precision floating point number. If n is non-zero, it defines the number of sig- nificant figures that are used when expanding vname. Otherwise, ten significant figures will be used. -F Declares vname to be a double precision floating point number. If n is non-zero, it defines the number of places after the decimal point that are used when expand- ing vname. Otherwise ten places after the decimal point will be used. -H This option provides UNIX to host-name file mapping on non-UNIX machines. -L Left justify and remove leading blanks from value. If n is non-zero, it defines the width of the field, otherwise it is determined by the width of the value of first as- signment. When the variable is assigned to, it is filled on the right with blanks or truncated, if necessary, to fit into the field. The -R option is turned off. -M Use the character mapping mapping defined by wctrans(3). such as tolower and toupper when assigning a value to each of the specified operands. When mapping is speci- fied and there are not operands, all variables that use this mapping are written to standard output. When map- ping is omitted and there are no operands, all mapped variables are written to standard output. -R Right justify and fill with leading blanks. If 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 -L option is turned off. -S When used within the assign_list of a type definition, it causes the specified subvariable to be shared by all in- stances of the type. When used inside a function defined with the function reserved word, the specified variables will have function static scope. Otherwise, the variable is unset prior to processing the assignment list. -T If followed by tname, it creates a type named by tname using the compound assignment assign_list to tname. Oth- erwise, it writes all the type definitions to standard output. -X Declares vname to be a double precision floating point number and expands using the %a format of ISO-C99. If n is non-zero, it defines the number of hex digits after the radix point that is used when expanding vname. The default is 10. -Z Right justify and fill with leading zeros if the first non-blank character is a digit and the -L option has not been set. Remove leading zeros if the -L option is also set. If n is non-zero, it defines the width of the field, otherwise it is determined by the width of the value of first assignment. -f The names refer to function names rather than variable names. No assignments can be made and the only other valid options are -S, -t, -u and -x. The -S can be used with discipline functions defined in a type to indicate that the function is static. For a static function, the same method will be used by all instances of that type no matter which instance references it. In addition, it can only use value of variables from the original type defi- nition. These discipline functions cannot be redefined in any type instance. The -t option turns on execution tracing for this function. The -u option causes this function to be marked undefined. The FPATH variable will be searched to find the function definition when the function is referenced. If no options other than -f is specified, then the function definition will be displayed on standard output. If +f is specified, then a line con- taining the function name followed by a shell comment containing the line number and path name of the file where this function was defined, if any, is displayed. The exit status can be used to determine whether the function is defined so that typeset -f .sh.math.name will return 0 when math function name is defined and non-zero otherwise. -b The variable can hold any number of bytes of data. The data can be text or binary. The value is represented by the base64 encoding of the data. If -Z is also speci- fied, the size in bytes of the data in the buffer will be determined by the size associated with the -Z. If the base64 string assigned results in more data, it will be truncated. Otherwise, it will be filled with bytes whose value is zero. The printf format %B can be used to out- put the actual data in this buffer instead of the base64 encoding of the data. -h Used within type definitions to add information when gen- erating information about the subvariable on the man page. It is ignored when used outside of a type defini- tion. When used with -f the information is associated with the corresponding discipline function. -i Declares 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 n is non-zero, it defines the output arithmetic base, oth- erwise the output base will be ten. -l Used with -i, -E or -F, to indicate long integer, or long float. Otherwise, all uppercase characters are converted to lowercase. The uppercase option, -u, is turned off. Equivalent to -M tolower . -m moves or renames the variable. The value is the name of a variable whose value will be moved to vname. The orig- inal variable will be unset. Cannot be used with any other options. -n Declares vname to be a reference to the variable whose name is defined by the value of variable vname. This is usually used to reference a variable inside a function whose name has been passed as an argument. Cannot be used with any other options. -p The name, attributes and values for the given vnames are written on standard output in a form that can be used as shell input. If +p is specified, then the values are not displayed. -r The given vnames are marked read-only and these names cannot be changed by subsequent assignment. -s When given along with -i, restricts integer size to short. -t Tags the variables. Tags are user definable and have no special meaning to the shell. -u When given along with -i, specifies unsigned integer. Otherwise, all lowercase characters are converted to up- percase. The lowercase option, -l, is turned off. Equivalent to -M toupper . -x The given vnames are marked for automatic export to the environment of subsequently-executed commands. Variables whose names contain a . cannot be exported. The -i, -F, -E, and -X options cannot be specified along with -R, -L, or -Z. The -b option cannot be specified along with -L, -u, or -l. The -f, -m, -n, and -T options cannot be used to- gether with any other option. Using + rather than - causes these options to be turned off. If no vname arguments are given, a list of vnames (and optionally the values) of the variables is printed. (Using + rather than - keeps the values from being printed.) The -p option causes typeset followed by the option letters to be printed before each name rather than the names of the options. If any option other than -p is given, only those variables which have all of the given options are printed. Otherwise, the vnames and attributes of all variables that have attributes are printed. ulimit [ -HSaMctdfxlqenupmrbiswTv ] [ limit ] Set or display a resource limit. The available resource limits are listed below. Many systems do not support one or more of these limits. The limit for a specified resource is set when limit is specified. The value of limit can be a number in the unit specified below with each resource, or the value unlimited. The -H and -S options specify whether the hard limit or the soft limit for the given resource is set. A hard limit cannot be in- creased once it is set. A soft limit can be increased up to the value of the hard limit. If neither the H nor S option is spec- ified, the limit applies to both. The current resource limit is printed when limit is omitted. In this case, the soft limit is printed unless H is specified. When more than one resource is specified, then the limit name and unit is printed before the value. -a Lists all of the current resource limits. -b The socket buffer size in bytes. -c The number of 512-byte blocks on the size of core dumps. -d The number of K-bytes on the size of the data area. -e The scheduling priority. -f The number of 512-byte blocks on files that can be writ- ten by the current process or by child processes (files of any size may be read). -i The signal queue size. -l The locked address space in K-bytes. -M The address space limit in K-bytes. -m The number of K-bytes on the size of physical memory. -n The number of file descriptors plus 1. -p The number of 512-byte blocks for pipe buffering. -q The message queue size in K-bytes. -r The max real-time priority. -s The number of K-bytes on the size of the stack area. -T The number of threads. -t The number of CPU seconds to be used by each process. -u The number of processes. -v The number of K-bytes for virtual memory. -w The swap size in K-bytes. -x The number of file locks. If no option is given, -f is assumed. umask [ -S ] [ mask ] The user file-creation mask is set to mask (see umask(2)). mask can either be an octal number or a symbolic value as described in chmod(1). If a symbolic value is given, the new umask value is the complement of the result of applying mask to the comple- ment of the previous umask value. If mask is omitted, the cur- rent value of the mask is printed. The -S option causes the mode to be printed as a symbolic value. Otherwise, the mask is printed in octal. unalias [ -a ] name ... The aliases given by the list of names are removed from the alias list. The -a option causes all the aliases to be unset. <*> unset [ -fnv ] vname ... The variables given by the list of vnames are unassigned, i.e., except for subvariables within a type, their values and at- tributes are erased. For subvariables of a type, the values are reset to the default value from the type definition. Readonly variables cannot be unset. If the -f option is set, then the names refer to function names. If the -v option is set, then the names refer to variable names. The -f option overrides -v. If -n is set and name is a name reference, then name will be un- set rather than the variable that it references. The default is equivalent to -v. Unsetting LINENO, MAILCHECK, OPTARG, OPTIND, RANDOM, SECONDS, TMOUT, and _ removes their special meaning even if they are subsequently assigned to. wait [ job ... ] Wait for the specified job and report its termination status. If 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 if job is specified; otherwise it is zero. See Jobs for a description of the format of job. whence [ -afpqv ] name ... For each name, indicate how it would be interpreted if used as a command name. The -v option produces a more verbose report. The -f option skips the search for functions. The -p option does a path search for name even if name is an alias, a function, or a re- served word. The -p option turns off the -v option. The -q op- tion causes whence to enter quiet mode. whence will return zero if all arguments are built-ins, functions, or are programs found on the path. The -a option is similar to the -v option but causes all interpretations of the given name to be reported. Invocation. If the shell is invoked by exec(2), initialization depends on argument zero ($0) as follows. If the first character of $0 is -, or the -l op- tion is given on the invocation command line, then the shell is assumed to be a login shell. If the basename of the command path in $0 is rsh, rksh, or krsh, then the shell becomes restricted. If the basename is sh or rsh, or the -o posix option is given on the invocation command line, then the shell is initialized in full POSIX compliance mode (see the set builtin command above for more information). After this, if the shell was assumed to be a login shell, commands are read from /etc/profile and then from $HOME/.profile if it exists. Alternatively, the option -l causes the shell to be treated as a login shell. Next, for interactive shells, commands are read from the file named by ENV if the file exists, its name being determined by performing parameter ex- pansion, command substitution, and arithmetic expansion on the value of that environment variable. If the -s option is not present and arg and a file by the name of arg exists, then it reads and executes this script. Otherwise, if the first arg does not contain a /, a path search is performed on the first arg to determine the name of the script to execute. The script arg must have execute permission and any setuid and setgid settings will be ignored. If the script is not found on the path, arg is processed as if it named a built-in command or function. Commands are then read as described below; the following op- tions are interpreted by the shell when it is invoked: -D A list of all double quoted strings that are preceded by a $ will be printed on standard output and the shell will exit. This set of strings will be subject to language translation when the locale is not C or POSIX. No commands will be exe- cuted. -E or -o rc or --rc Read the file named by the ENV variable or by $HOME/.kshrc if not defined after the profiles. On by default for interactive shells. Use +E, +o rc or --norc to turn off. -c Read and execute a script from the first arg instead of a file. The second arg, if present, becomes that script's command name ($0). Any third and further args become positional parameters starting at $1. -s Read and execute a script from standard input instead of a file. The command name ($0) cannot be set. Any args become the positional parameters starting at $1. This option is forced on if no arg is given and is ignored if -c is also spec- ified. -i or -o interactive or --interactive If the -i option is present or if the shell's standard input and standard error are attached to a terminal (as told by tcge- tattr(3)), then this shell is interactive. In this case TERM is ignored (so that kill 0 does not kill an interactive shell) and INTR is caught and ignored (so that wait is interruptible). In all cases, QUIT is ignored by the shell. -r or -o restricted or --restricted If the -r option is present, the shell is a restricted shell. The remaining options and arguments are described under the set command above. An optional - as the first argument is ignored. Rksh Only. Rksh is used to set up login names and execution environments whose ca- pabilities are more controlled than those of the standard shell. The actions of rksh are identical to those of ksh, except that the follow- ing are disallowed: unsetting the restricted option, changing directory (see cd(1)), setting or unsetting the value or attributes of SHELL, ENV, FPATH, or PATH, specifying path or command names containing /, redirecting output (>, >|, <>, and >>), adding or deleting built-in commands, using command -p to invoke a command. The restrictions above are enforced after .profile and the ENV files are interpreted. When a command to be executed is found to be a shell procedure, rksh invokes 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 stan- dard shell, while imposing a limited menu of commands; this scheme as- sumes that the end-user does not have write and execute permissions in the same directory. The net effect of these rules is that the writer of the .profile has complete control over user actions, by performing guaranteed setup ac- tions and leaving the user in an appropriate directory (probably not the login directory). The system administrator often sets up a directory of commands (e.g., /usr/rbin) that can be safely invoked by rksh.
⚠️ Errors detected by the shell, such as syntax errors, cause the shell to return a non-zero exit status. 🔄 If the shell is being used non-interactively, then execution of the shell file is abandoned unless the error occurs inside a subshell in which case the subshell is abandoned. Otherwise, the shell returns the exit status of the last command executed (see also the exit command above). 🛑 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 ([]) after the command or function name.
/etc/profile — The system wide initialization file, executed for login shells. 🖥️$HOME/.profile — The personal initialization file, executed for login shells after /etc/profile. 👤$HOME/.kshrc — Default personal initialization file, executed for interactive shells when ENV is not set. ⚙️/etc/suid_profile — Alternative initialization file, executed instead of the personal initialization file when the real and effective user or group id do not match. 🔐/dev/null — NULL device. 🗑️cat(1), cd(1), chmod(1), cut(1), date(1), egrep(1), echo(1), emacs(1), env(1), fgrep(1), gmacs(1), grep(1), stty(1), test(1), umask(1), vi(1),dup(2), exec(2), fork(2), getpwnam(3), ioctl(2), lseek(2), paste(1),pathconf(2), pipe(2), sysconf(3), umask(2), ulimit(2), wait(2), strftime(3), wctrans(3), rand(3), profile(5), environ(7).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 exec the original command. Use the hash command or the -t option of the alias command to correct this situation.
Some very old shell scripts contain a ^ as a synonym for the pipe character |.
Using the hist built-in command within a compound command will cause the whole command to disappear from the history file.
The built-in command . file reads the whole file before any commands are executed. Therefore, alias and unalias commands in the file will not apply to any commands defined in the file.
Traps are not processed while a job is waiting for a foreground process. Thus, a trap on CHLD won't be executed until the foreground job terminates.
It is a good idea to leave a space after the comma operator in arithmetic expressions to prevent the comma from being interpreted as the decimal point character in certain locales.
Generated by phpman v4.9.26-1-g511901d · Markdown · JSON · MCP Author: Che Dong Under GNU General Public License
2026-08-06 00:55 @216.73.216.192
CrawledBy Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
Enhanced by LLM: deepseek-v4-flash / taotoken.net / www.chedong.com - original format