etc/protocols - sync with NetBSD-8
[minix.git] / bin / ksh / ksh.Man
blob92f2c466c7343c64d70f422cd77d0341935bb5c1
1 '\" t
2 .\" $NetBSD: ksh.Man,v 1.24 2015/04/12 17:05:03 jmcneill Exp $
3 .\"{{{}}}
4 .\"{{{  Notes about man page
5 .\"     - use the pseudo-macros .sh( and .sh) to begin and end sh-specific
6 .\"       text and .ksh( and .ksh) for ksh specific text.
7 .\"     - put i.e., e.g. and etc. in italics
8 .\"}}}
9 .\"{{{  To do
10 .\" todo: Things not covered that should be:
11 .\"     - distinguish (POSIX) special built-in's, (POSIX) regular built-in's,
12 .\"       and sh/ksh weirdo built-in's (put S,R,X superscripts after command
13 .\"       name in built-in commands section?)
14 .\"     - need to be consistent about notation for `See section-name', `
15 .\"       See description of foobar command', `See section section-name', etc.
16 .\"     - need to use the term `external command' meaning `a command that is
17 .\"       executed using execve(2)' (as opposed to a built-in command or
18 .\"       function) for more clear description.
19 .\"}}}
20 .\"{{{  Title
21 .ksh(
22 .TH KSH 1 "April 12, 2015" "" "User commands"
23 .ksh)
24 .sh(
25 .TH SH 1 "April 12, 2015" "" "User commands"
26 .sh)
27 .\"}}}
28 .\"{{{  Name
29 .SH NAME
30 .ksh(
31 ksh \- Public domain Korn shell
32 .ksh)
33 .sh(
34 sh \- Public domain Bourne shell
35 .sh)
36 .\"}}}
37 .\"{{{  Synopsis
38 .SH SYNOPSIS
39 .ad l
40 .ksh(
41 \fBksh\fP
42 .ksh)
43 .sh(
44 \fBsh\fP
45 .sh)
46 [\fB\(+-abCefhikmnprsuvxX\fP] [\fB\(+-o\fP \fIoption\fP] [ [ \fB\-c\fP \fIcommand-string\fP [\fIcommand-name\fP] | \fB\-s\fP | \fIfile\fP ] [\fIargument\fP ...] ]
47 .ad b
48 .\"}}}
49 .\"{{{  Description
50 .SH DESCRIPTION
51 .ksh(
52 \fBksh\fP is a command interpreter that is intended for both
53 interactive and shell script use.
54 Its command language is a superset of the \fIsh\fP(1) shell language.
55 .ksh)
56 .sh(
57 \fBsh\fP is a re-implementation of the Bourne shell, a command
58 interpreter for both interactive and script use.
59 .sh)
60 .\"{{{  Shell Startup
61 .SS "Shell Startup"
62 The following options can be specified only on the command line:
63 .IP "\fB\-c\fP \fIcommand-string\fP"
64 the shell executes the command(s) contained in \fIcommand-string\fP
65 .IP \fB\-i\fP
66 interactive mode \(em see below
67 .IP \fB\-l\fP
68 login shell \(em see below
69 interactive mode \(em see below
70 .IP \fB\-s\fP
71 the shell reads commands from standard input; all non-option arguments
72 are positional parameters
73 .IP \fB\-r\fP
74 restricted mode \(em see below
75 .PP
76 In addition to the above, the options described in the \fBset\fP built-in
77 command can also be used on the command line.
78 .PP
79 If neither the \fB\-c\fP nor the \fB\-s\fP options are specified, the
80 first non-option argument specifies the name of a file the shell reads
81 commands from; if there are no non-option arguments, the shell reads
82 commands from standard input.
83 The name of the shell (\fIi.e.\fP, the contents of the \fB$0\fP) parameter
84 is determined as follows: if the \fB\-c\fP option is used and there is
85 a non-option argument, it is used as the name; if commands are being
86 read from a file, the file is used as the name; otherwise the name
87 the shell was called with (\fIi.e.\fP, argv[0]) is used.
88 .PP
89 A shell is \fBinteractive\fP if the \fB\-i\fP option is used or
90 if both standard input and standard error are attached to a tty.
91 An interactive shell has job control enabled (if available),
92 ignores the INT, QUIT and TERM signals, and prints prompts before
93 reading input (see \fBPS1\fP and \fBPS2\fP parameters).
94 For non-interactive shells, the \fBtrackall\fP option is on by default
95 (see \fBset\fP command below).
96 .PP
97 A shell is \fBrestricted\fP if the \fB\-r\fP option is used or if either
98 the basename of the name the shell is invoked with or the \fBSHELL\fP
99 parameter match the pattern *r*sh (\fIe.g.\fP, rsh, rksh, rpdksh, \fIetc.\fP).
100 The following restrictions come into effect after the shell processes
101 any profile and \fB$ENV\fP files:
102 .nr P2 \n(PD
103 .nr PD 0
104 .IP \ \ \(bu
105 the \fBcd\fP command is disabled
106 .IP \ \ \(bu
107 the \fBSHELL\fP, \fBENV\fP and \fBPATH\fP parameters can't be changed
108 .IP \ \ \(bu
109 command names can't be specified with absolute or relative paths
110 .IP \ \ \(bu
111 the \fB\-p\fP option of the \fBcommand\fP built-in can't be used
112 .IP \ \ \(bu
113 redirections that create files can't be used (\fIi.e.\fP, \fB>\fP,
114 \fB>|\fP, \fB>>\fP, \fB<>\fP)
115 .nr PD \n(P2
117 A shell is \fBprivileged\fP if the \fB\-p\fP option is used or if
118 the real user-id or group-id does not match the effective user-id
119 or group-id (see \fIgetuid\fP(2), \fIgetgid\fP(2)).
120 A privileged shell does not process $HOME/.profile nor the \fBENV\fP
121 parameter (see below), instead the file /etc/suid_profile is processed.
122 Clearing the privileged option causes the shell to set its effective
123 user-id (group-id) to its real user-id (group-id).
125 If the basename of the name the shell is called with (\fIi.e.\fP, argv[0])
126 starts with \fB\-\fP or if the \fB\-l\fP option is used, the shell is assumed
127 to be a login shell and the shell reads and executes the contents of
128 \fB/etc/profile\fP, \fB$HOME/.profile\fP and \fB$ENV\fP if they exist and are
129 readable.
131 If the \fBENV\fP parameter is set when the shell starts (or, in the
132 case of login shells, after any profiles are processed), its value
133 is subjected to parameter, command, arithmetic and tilde substitution and
134 the resulting file (if any) is read and executed.
135 If the \fBENV\fP parameter is not set (and not null) the file \fB$HOME/.kshrc\fP 
136 is included (after the above mentioned substitutions have been performed).
138 The exit status of the shell is 127 if the command file specified
139 on the command line could not be opened, or non-zero if a fatal syntax
140 error occurred during the execution of a script.
141 In the absence of fatal errors, the exit status is that of the last
142 command executed, or zero, if no command is executed.
143 .\"}}}
144 .\"{{{  Command Syntax
145 .SS "Command Syntax"
146 .\"{{{  words and tokens
147 The shell begins parsing its input by breaking it into \fIword\fPs.
148 Words, which are sequences of characters, are delimited by unquoted
149 \fIwhite-space\fP characters (space, tab and newline) or \fImeta-characters\fP
150 (\fB<\fP, \fB>\fP, \fB|\fP, \fB;\fP, \fB&\fP, \fB(\fP and \fB)\fP).
151 Aside from delimiting words, spaces and tabs are ignored, while
152 newlines usually delimit commands.
153 The meta-characters are used in building the following tokens:
154 \fB<\fP, \fB<&\fP, \fB<<\fP, \fB>\fP, \fB>&\fP, \fB>>\fP, \fIetc.\fP are
155 used to specify redirections (see Input/Output Redirection below);
156 \fB|\fP is used to create pipelines;
157 .ksh(
158 \fB|&\fP is used to create co-processes (see Co-Processes below);
159 .ksh)
160 \fB;\fP is used to separate commands;
161 \fB&\fP is used to create asynchronous pipelines;
162 \fB&&\fP and \fB||\fP are used to specify conditional execution;
163 \fB;;\fP is used in \fBcase\fP statements;
164 .ksh(
165 \fB((\fP .. \fB))\fP are used in arithmetic expressions;
166 .ksh)
167 and lastly,
168 \fB(\fP .. \fB)\fP are used to create subshells.
170 White-space and meta-characters can be quoted individually using
171 backslash (\fB\e\fP), or in groups using double (\fB"\fP) or single (\fB'\fP)
172 quotes.
173 Note that the following characters are also treated specially by the shell and
174 must be quoted if they are to represent themselves:
175 \fB\e\fP, \fB"\fP, \fB'\fP, \fB#\fP, \fB$\fP, \fB`\fP, \fB~\fP, \fB{\fP,
176 \fB}\fP, \fB*\fP, \fB?\fP and \fB[\fP.
177 The first three of these are the above mentioned quoting characters
178 (see Quoting below);
179 \fB#\fP, if used at the beginning of a word, introduces a comment \(em everything
180 after the \fB#\fP up to the nearest newline is ignored;
181 \fB$\fP is used to introduce parameter, command and arithmetic substitutions
182 (see Substitution below);
183 \fB`\fP introduces an old-style command substitution
184 (see Substitution below);
185 \fB~\fP begins a directory expansion (see Tilde Expansion below);
186 \fB{\fP and \fB}\fP delimit \fIcsh\fP(1) style alternations
187 (see Brace Expansion below);
188 and, finally, \fB*\fP, \fB?\fP and \fB[\fP are used in file name generation
189 (see File Name Patterns below).
190 .\"}}}
191 .\"{{{  simple-command
193 As words and tokens are parsed, the shell builds commands, of which
194 there are two basic types: \fIsimple-commands\fP, typically programs
195 that are executed, and \fIcompound-commands\fP, such as \fBfor\fP and
196 \fBif\fP statements, grouping constructs and function definitions.
198 A simple-command consists of some combination of parameter assignments (see
199 Parameters below), input/output redirections (see Input/Output Redirections
200 below), and command words; the only restriction is that parameter assignments
201 come before any command words.
202 The command words, if any, define the command that is to be executed and its
203 arguments.
204 The command may be a shell built-in command, a function or an \fIexternal
205 command\fP, \fIi.e.\fP, a separate executable file that is located using the
206 \fBPATH\fP parameter (see Command Execution below).
207 Note that all command constructs have an \fIexit status\fP: for external
208 commands, this is related to the status returned by \fIwait\fP(2) (if the
209 command could not be found, the exit status is 127, if it could not be
210 executed, the exit status is 126);
211 the exit status of other command constructs (built-in commands, functions,
212 compound-commands, pipelines, lists, \fIetc.\fP) are all well defined and are
213 described where the construct is described.
214 The exit status of a command consisting only of parameter assignments is that
215 of the last command substitution performed during the parameter assignment
216 or zero if there were no command substitutions.
217 .\"}}}
218 .\"{{{  pipeline
220 Commands can be chained together using the \fB|\fP token to
221 form \fIpipelines\fP, in which the standard output of each command but
222 the last is piped (see \fIpipe\fP(2)) to the standard input of the following
223 command.
224 The exit status of a pipeline is that of its last command.
225 A pipeline may be prefixed by the \fB!\fP reserved word which
226 causes the exit status of the pipeline to be logically
227 complemented: if the original status was 0 the complemented status will
228 be 1, and if the original status was not 0, then the complemented
229 status will be 0.
230 .\"}}}
231 .\"{{{  lists
233 \fILists\fP of commands can be created by separating pipelines by
234 any of the following tokens: \fB&&\fP, \fB||\fP, \fB&\fP, \fB|&\fP and \fB;\fP.
235 The first two are for conditional execution: \fIcmd1\fP \fB&&\fP \fIcmd2\fP
236 executes \fIcmd2\fP only if the exit status of \fIcmd1\fP is zero;
237 \fB||\fP is the opposite \(em \fIcmd2\fP is executed only if the exit status
238 of \fIcmd1\fP is non-zero.
239 \fB&&\fP and \fB||\fP have equal precedence which is higher than that of
240 \fB&\fP, \fB|&\fP and \fB;\fP, which also have equal precedence.
241 The \fB&\fP token causes the preceding command to be executed asynchronously,
242 that is, the shell starts the command, but does not wait for it to complete
243 (the shell does keep track of the status of asynchronous commands \(em see
244 Job Control below).
245 When an asynchronous command is started when job control is disabled
246 (\fIi.e.\fP, in most scripts), the command is started with signals INT
247 and QUIT ignored and with input redirected from /dev/null
248 (however, redirections specified in the asynchronous command have precedence).
249 .ksh(
250 The \fB|&\fP operator starts a \fIco-process\fP which is special kind of
251 asynchronous process (see Co-Processes below).
252 .ksh)
253 Note that a command must follow the \fB&&\fP and \fB||\fP operators, while
254 a command need not follow \fB&\fP, \fB|&\fP and \fB;\fP.
255 The exit status of a list is that of the last command executed, with the
256 exception of asynchronous lists, for which the exit status is 0.
257 .\"}}}
258 .\"{{{  compound-commands
260 Compound commands are created using the following reserved words \(em these
261 words are only recognized if they are unquoted and if they are used as
262 the first word of a command (\fIi.e.\fP, they can't be preceded by parameter
263 assignments or redirections):
265 center;
266 lfB lfB lfB lfB lfB .
267 case    else    function        then    !
268 do      esac    if      time    [[
269 done    fi      in      until   {
270 elif    for     select  while   }
272 \fBNote:\fP Some shells (but not this one) execute control structure commands
273 in a subshell when one or more of their file descriptors are redirected, so
274 any environment changes inside them may fail.
275 To be portable, the \fBexec\fP statement should be used instead to redirect
276 file descriptors before the control structure.
278 In the following compound command descriptions, command lists (denoted as
279 \fIlist\fP) that are followed by reserved words must end with a
280 semi-colon, a newline or a (syntactically correct) reserved word.
281 For example,
283 \fB{ echo foo; echo bar; }\fP
285 \fB{ echo foo; echo bar<newline>}\fP
287 \fB{ { echo foo; echo bar; } }\fP
289 are all valid, but
291 \fB{ echo foo; echo bar }\fP
293 is not.
294 .\"{{{  ( list )
295 .IP "\fB(\fP \fIlist\fP \fB)\fP"
296 Execute \fIlist\fP in a subshell.
297 There is no implicit way to pass
298 environment changes from a subshell back to its parent.
299 .\"}}}
300 .\"{{{  { list }
301 .IP "\fB{\fP \fIlist\fP \fB}\fP"
302 Compound construct; \fIlist\fP is executed, but not in a subshell.
303 Note that \fB{\fP and \fB}\fP are reserved words, not meta-characters.
304 .\"}}}
305 .\"{{{  case word in [ [ ( ] pattern [ | pattern ] ... ) list ;; ] ... esac
306 .IP "\fBcase\fP \fIword\fP \fBin\fP [ [\fB(\fP] \fIpattern\fP [\fB|\fP \fIpattern\fP] ... \fB)\fP \fIlist\fP \fB;;\fP ] ... \fBesac\fP"
307 The \fBcase\fP statement attempts to match \fIword\fP against the specified
308 \fIpattern\fPs; the \fIlist\fP associated with the first successfully matched
309 pattern is executed.
310 Patterns used in \fBcase\fP statements are the same as
311 those used for file name patterns except that the restrictions regarding
312 \fB\&.\fP and \fB/\fP are dropped.
313 Note that any unquoted space before and
314 after a pattern is stripped; any space with a pattern must be quoted.
315 Both the word and the patterns are subject to parameter, command, and
316 arithmetic substitution as well as tilde substitution.
317 For historical reasons, open and close braces may be used instead
318 of \fBin\fP and \fBesac\fP (\fIe.g.\fP, \fBcase $foo { *) echo bar; }\fP).
319 The exit status of a \fBcase\fP statement is that of the executed \fIlist\fP;
320 if no \fIlist\fP is executed, the exit status is zero.
321 .\"}}}
322 .\"{{{  for name [ in word ... term ] do list done
323 .IP "\fBfor\fP \fIname\fP [ \fBin\fP \fIword\fP ... \fIterm\fP ] \fBdo\fP \fIlist\fP \fBdone\fP"
324 where \fIterm\fP is either a newline or a \fB;\fP.
325 For each \fIword\fP in the specified word list, the parameter \fIname\fP is
326 set to the word and \fIlist\fP is executed.
327 If \fBin\fP is not used to
328 specify a word list, the positional parameters (\fB"$1"\fP, \fB"$2"\fP,
329 \fIetc.\fP) are used instead.
330 For historical reasons, open and close braces may be used instead
331 of \fBdo\fP and \fBdone\fP (\fIe.g.\fP, \fBfor i; { echo $i; }\fP).
332 The exit status of a \fBfor\fP statement is the last exit status
333 of \fIlist\fP; if \fIlist\fP is never executed, the exit status is zero.
334 .\"}}}
335 .\"{{{  if list then list [ elif list then list ] ... [ else list ] fi
336 .IP "\fBif\fP \fIlist\fP \fBthen\fP \fIlist\fP [\fBelif\fP \fIlist\fP \fBthen\fP \fIlist\fP] ... [\fBelse\fP \fIlist\fP] \fBfi\fP"
337 If the exit status of the first \fIlist\fP is zero, the second \fIlist\fP
338 is executed; otherwise the \fIlist\fP following the \fBelif\fP, if any, is
339 executed with similar consequences.
340 If all the lists following the \fBif\fP
341 and \fBelif\fPs fail (\fIi.e.\fP, exit with non-zero status), the \fIlist\fP
342 following the \fBelse\fP is executed.
343 The exit status of an \fBif\fP statement is that
344 of non-conditional \fIlist\fP that is executed; if no non-conditional
345 \fIlist\fP is executed, the exit status is zero.
346 .\"}}}
347 .\"{{{  select name [ in word ... ] do list done
348 .ksh(
349 .IP "\fBselect\fP \fIname\fP [ \fBin\fP \fIword\fP ... \fIterm\fP ] \fBdo\fP \fIlist\fP \fBdone\fP"
350 where \fIterm\fP is either a newline or a \fB;\fP.
351 The \fBselect\fP statement provides an automatic method of presenting
352 the user with a menu and selecting from it.
353 An enumerated list of the specified \fIwords\fP is printed on standard
354 error, followed by a prompt (\fBPS3\fP, normally `\fB#? \fP').
355 A number corresponding to one of the enumerated words is then read
356 from standard input, \fIname\fP is set to the selected word (or is
357 unset if the selection is not valid), \fBREPLY\fP
358 is set to what was read (leading/trailing space is stripped),
359 and \fIlist\fP is executed.
360 If a blank line (\fIi.e.\fP, zero or more \fBIFS\fP characters) is entered,
361 the menu is re-printed without executing \fIlist\fP.
362 When \fIlist\fP completes, the enumerated list is printed if \fBREPLY\fP
363 is null, the prompt is printed and so on.
364 This process is continues until an end-of-file is read, an interrupt is
365 received or a break statement is executed inside the loop.
366 If \fBin\fP \fIword\fP \fB\&...\fP is omitted, the positional parameters
367 are used (\fIi.e.\fP, \fB"$1"\fP, \fB"$2"\fP, \fIetc.\fP).
368 For historical reasons, open and close braces may be used instead
369 of \fBdo\fP and \fBdone\fP (\fIe.g.\fP, \fBselect i; { echo $i; }\fP).
370 The exit status of a \fBselect\fP statement is zero if a break statement
371 is used to exit the loop, non-zero otherwise.
372 .ksh)
373 .\"}}}
374 .\"{{{  until list do list done
375 .IP "\fBuntil\fP \fIlist\fP \fBdo\fP \fIlist\fP \fBdone\fP"
376 This works like \fBwhile\fP, except that the body is executed only while the
377 exit status of the first \fIlist\fP is non-zero.
378 .\"}}}
379 .\"{{{  while list do list done
380 .IP "\fBwhile\fP \fIlist\fP \fBdo\fP \fIlist\fP \fBdone\fP"
381 A \fBwhile\fP is a prechecked loop.
382 Its body is executed as often
383 as the exit status of the first \fIlist\fP is zero.
384 The exit status of a \fBwhile\fP statement is the last exit status
385 of the \fIlist\fP in the body of the loop; if the body is not executed,
386 the exit status is zero.
387 .\"}}}
388 .\"{{{  function name { list }
389 .IP "\fBfunction\fP \fIname\fP \fB{\fP \fIlist\fP \fB}\fP"
390 Defines the function \fIname\fP.
391 See Functions below.
392 Note that redirections specified after a function definition are
393 performed whenever the function is executed, not when the function
394 definition is executed.
395 .\"}}}
396 .\"{{{  name () command
397 .IP "\fIname\fP \fB()\fP \fIcommand\fP"
398 Mostly the same as \fBfunction\fP.
399 See Functions below.
400 .\"}}}
401 .\"{{{  time [-p] [ pipeline ]
402 .IP "\fBtime\fP [ \fB-p\fP ] [ \fIpipeline\fP ]"
403 The \fBtime\fP reserved word is described in the Command Execution section.
404 .\"}}}
405 .\"{{{  (( expression ))
406 .ksh(
407 .IP "\fB((\fP \fIexpression\fP \fB))\fP"
408 The arithmetic expression \fIexpression\fP is evaluated;
409 equivalent to \fBlet "\fP\fIexpression\fP\fB"\fP.
410 See Arithmetic Expressions and the \fBlet\fP command below.
411 .ksh)
412 .\"}}}
413 .\"{{{  [[ expression ]]
414 .ksh(
415 .IP "\fB[[\fP \fIexpression\fP \fB]]\fP"
416 Similar to the \fBtest\fP and \fB[\fP \&... \fB]\fP commands (described later),
417 with the following exceptions:
419 .nr P2 \n(PD
420 .nr PD 0
421 .IP \ \ \(bu
422 Field splitting and file name generation are not performed on
423 arguments.
424 .IP \ \ \(bu
425 The \fB\-a\fP (and) and \fB\-o\fP (or) operators are replaced with
426 \fB&&\fP and \fB||\fP, respectively.
427 .IP \ \ \(bu
428 Operators (\fIe.g.\fP, \fB\-f\fP, \fB=\fP, \fB!\fP, \fIetc.\fP) must be unquoted.
429 .IP \ \ \(bu
430 The second operand of \fB!=\fP and \fB=\fP
431 expressions are patterns (\fIe.g.\fP, the comparison in
433 \fB[[ foobar = f*r ]]\fP
434 succeeds).
435 .IP \ \ \(bu
436 There are two additional binary operators: \fB<\fP and \fB>\fP
437 which return true if their first string operand is less than,
438 or greater than, their second string operand, respectively.
439 .IP \ \ \(bu
440 The single argument form
441 of \fBtest\fP, which tests if the argument has non-zero length, is not valid
442 - explicit operators must always be used, \fIe.g.\fP, instead of
444 \fB[\fP \fIstr\fP \fB]\fP
447 \fB[[ \-n \fP\fIstr\fP\fB ]]\fP
448 .IP \ \ \(bu
449 Parameter, command and arithmetic substitutions are performed as
450 expressions are evaluated and lazy expression evaluation is used for
451 the \fB&&\fP and \fB||\fP operators.
452 This means that in the statement
454 \fB[[ -r foo && $(< foo) = b*r ]]\fP
455 the \fB$(< foo)\fP is evaluated if and only if the file \fBfoo\fP exists
456 and is readable.
457 .nr PD \n(P2
459 .ksh)
460 .\"}}}
461 .\"}}}
462 .\"}}}
463 .\"{{{  Quoting
464 .SS Quoting
465 Quoting is used to prevent the shell from treating characters or words
466 specially.
467 There are three methods of quoting: First, \fB\e\fP quotes
468 the following character, unless it is at the end of a line, in which
469 case both the \fB\e\fP and the newline are stripped.
470 Second, a single quote (\fB'\fP) quotes everything up to the next single
471 quote (this may span lines).
472 Third, a double quote (\fB"\fP) quotes all characters,
473 except \fB$\fP, \fB`\fP and \fB\e\fP, up to the next unquoted double quote.
474 \fB$\fP and \fB`\fP inside double quotes have their usual meaning (\fIi.e.\fP,
475 parameter, command or arithmetic substitution) except no field splitting
476 is carried out on the results of double-quoted substitutions.
477 If a \fB\e\fP inside a double-quoted string is followed by \fB\e\fP, \fB$\fP,
478 \fB`\fP or \fB"\fP, it is replaced by the second character; if it is
479 followed by a newline, both the \fB\e\fP and the newline are stripped;
480 otherwise, both the \fB\e\fP and the character following are unchanged.
482 Note: An earlier version of ksh(1) changed the interpretation of sequences
483 of the form \fB"\fP...\fB`\fP...\fB\e"\fP...\fB`\fP..\fB"\fP
484 according to whether or not POSIX mode was in effect.
485 In the current implementation, the backslash in \fB\e"\fP
486 is seen and removed by the outer \fB"\fP...\fB"\fP,
487 so the backslash is not seen by the inner \fB`\fP...\fB`\fP.
488 .\"}}}
489 .\"{{{  Aliases
490 .SS "Aliases"
491 There are two types of aliases: normal command aliases and tracked aliases.
492 Command aliases are normally used as a short hand for a long
493 or often used command.
494 The shell expands command aliases (\fIi.e.\fP,
495 substitutes the alias name for its value) when it reads the first word
496 of a command.
497 An expanded alias is re-processed to check for more
498 aliases.
499 If a command alias ends in a space or tab, the following word
500 is also checked for alias expansion.
501 The alias expansion process stops
502 when a word that is not an alias is found, when a quoted word is found
503 or when an alias word that is currently being expanded is found.
505 The following command aliases are defined automatically by the shell:
506 .ft B
508 .ksh(
509 autoload='typeset \-fu'
511 functions='typeset \-f'
513 .ksh)
514 hash='alias \-t'
515 .ksh(
517 history='fc \-l'
519 integer='typeset \-i'
521 local='typeset'
523 login='exec login'
524 .\" ifndef __NetBSD__
525 .\" .br
526 .\" newgrp='exec newgrp'
527 .\" endif
529 nohup='nohup '
531 r='fc \-e \-'
533 stop='kill \-STOP'
535 suspend='kill \-STOP $$'
536 .ksh)
538 type='whence \-v'
540 .ft P
542 Tracked aliases allow the shell to remember where it found a particular
543 command.
544 The first time the shell does a path search for a command that
545 is marked as a tracked alias, it saves the full path of the command.
546 The next time the command is executed, the shell checks the saved path
547 to see that it is still valid, and if so, avoids repeating the path search.
548 Tracked aliases can be listed and created using \fBalias \-t\fP.
549 Note that changing the \fBPATH\fP parameter clears the saved
550 paths for all tracked aliases.
551 If the \fBtrackall\fP option is set (\fIi.e.\fP,
552 \fBset \-o trackall\fP or \fBset \-h\fP), the shell tracks all commands.
553 This option is set automatically for non-interactive shells.
554 For interactive shells, only the following commands are automatically
555 tracked: \fBcat\fP, \fBcc\fP, \fBchmod\fP, \fBcp\fP, \fBdate\fP, \fBed\fP,
556 \fBemacs\fP, \fBgrep\fP, \fBls\fP, \fBmail\fP, \fBmake\fP, \fBmv\fP,
557 \fBpr\fP, \fBrm\fP, \fBsed\fP, \fBsh\fP, \fBvi\fP and \fBwho\fP.
558 .\"}}}
559 .\"{{{  Substitution
560 .SS "Substitution"
561 The first step the shell takes in executing a simple-command is to
562 perform substitutions on the words of the command.
563 There are three kinds of substitution: parameter, command and arithmetic.
564 Parameter substitutions, which are described in detail in the next section,
565 take the form \fB$name\fP or \fB${\fP...\fB}\fP; command substitutions take
566 the form \fB$(\fP\fIcommand\fP\fB)\fP or \fB`\fP\fIcommand\fP\fB`\fP;
567 and arithmetic substitutions take the form \fB$((\fP\fIexpression\fP\fB))\fP.
569 If a substitution appears outside of double quotes, the results of the
570 substitution are generally subject to word or field splitting according to
571 the current value of the \fBIFS\fP parameter.
572 The \fBIFS\fP parameter specifies a list of characters which
573 are used to break a string up into several words;
574 any characters from the set space, tab and newline that appear in the
575 IFS characters are called \fIIFS white space\fP.
576 Sequences of one or more IFS white space characters, in combination with
577 zero or one non-IFS white space characters delimit a field.
578 As a special case, leading and trailing IFS white space is stripped (\fIi.e.\fP,
579 no leading or trailing empty field is created by it); leading or trailing
580 non-IFS white space does create an empty field.
581 Example: if \fBIFS\fP is set to `<space>:', the sequence of characters
582 `<space>A<space>:<space><space>B::D' contains four fields: `A', `B', `' and `D'.
583 Note that if the \fBIFS\fP parameter is set to the null string, no
584 field splitting is done; if the parameter is unset, the default value
585 of space, tab and newline is used.
587 The results of substitution are, unless otherwise specified, also subject
588 to brace expansion and file name expansion (see the relevant sections
589 below).
591 A command substitution is replaced by the output generated by the specified
592 command, which is run in a subshell.
593 For \fB$(\fP\fIcommand\fP\fB)\fP substitutions, normal quoting rules
594 are used when \fIcommand\fP is parsed, however, for the
595 \fB`\fP\fIcommand\fP\fB`\fP form, a \fB\e\fP followed by any of
596 \fB$\fP, \fB`\fP or \fB\e\fP is stripped (a \fB\e\fP followed by any other
597 character is unchanged).
598 As a special case in command substitutions, a command of the form
599 \fB<\fP \fIfile\fP is interpreted to mean substitute the contents
600 of \fIfile\fP ($(< foo) has the same effect as $(cat foo), but it
601 is carried out more efficiently because no process is started).
603 .\"todo: fix this( $(..) parenthesis counting).
604 NOTE: \fB$(\fP\fIcommand\fP\fB)\fP expressions are currently parsed by
605 finding the matching parenthesis, regardless of quoting.
606 This will hopefully be fixed soon.
608 Arithmetic substitutions are replaced by the value of the specified
609 expression.
610 For example, the command \fBecho $((2+3*4))\fP prints 14.
611 See Arithmetic Expressions for a description of an \fIexpression\fP.
612 .\"}}}
613 .\"{{{  Parameters
614 .SS "Parameters"
615 Parameters are shell variables; they can be assigned values and
616 their values can be accessed using a parameter substitution.
617 A parameter name is either one of the special single punctuation or digit
618 character parameters described below, or a letter followed by zero or more
619 letters or digits (`_' counts as a letter).
620 The later form can be treated as arrays by appending an array
621 index of the form: \fB[\fP\fIexpr\fP\fB]\fP where \fIexpr\fP is
622 an arithmetic expression.
623 Array indices are currently limited to the range 0 through 1023, inclusive.
624 Parameter substitutions take the form \fB$\fP\fIname\fP,
625 \fB${\fP\fIname\fP\fB}\fP or
626 \fB${\fP\fIname\fP\fB[\fP\fIexpr\fP\fB]}\fP, where \fIname\fP is a
627 parameter name.
628 If substitution is performed on a parameter (or an array parameter element)
629 that is not set, a null
630 string is substituted unless the \fBnounset\fP option (\fBset \-o nounset\fP
631 or \fBset \-u\fP) is set, in which case an error occurs.
633 .\"{{{  parameter assignment
634 Parameters can be assigned values in a number of ways.
635 First, the shell implicitly sets some parameters like \fB#\fP, \fBPWD\fP,
636 etc.; this is the only way the special single character parameters are
637 set.
638 Second, parameters are imported from the shell's environment at startup.
639 Third, parameters can be assigned values on the command line, for example,
640 `\fBFOO=bar\fP' sets the parameter FOO to bar; multiple parameter
641 assignments can be given on a single command line and they can
642 be followed by a simple-command, in which case the assignments are
643 in effect only for the duration of the command (such assignments are
644 also exported, see below for implications of this).
645 Note that both the parameter name and the \fB=\fP must be unquoted for
646 the shell to recognize a parameter assignment.
647 The fourth way of setting a parameter is with the \fBexport\fP, \fBreadonly\fP
648 and \fBtypeset\fP commands; see their descriptions in the Command Execution
649 section.
650 Fifth, \fBfor\fP and \fBselect\fP loops set parameters as well as
651 the \fBgetopts\fP, \fBread\fP and \fBset \-A\fP commands.
652 Lastly, parameters can be assigned values using assignment operators
653 inside arithmetic expressions (see Arithmetic Expressions below) or
654 using the \fB${\fP\fIname\fP\fB=\fP\fIvalue\fP\fB}\fP form
655 of parameter substitution (see below).
656 .\"}}}
658 .\"{{{  environment
659 Parameters with the export attribute (set using the \fBexport\fP or
660 \fBtypeset \-x\fP commands, or by parameter assignments followed by simple
661 commands) are put in the environment (see \fIenviron\fP(7)) of commands
662 run by the shell as \fIname\fP\fB=\fP\fIvalue\fP pairs.
663 The order in which parameters appear in the environment of a command
664 is unspecified.
665 When the shell starts up, it extracts parameters and their values from its
666 environment and automatically sets the export attribute for those parameters.
667 .\"}}}
668 .\"{{{  ${name[:][-+=?]word}
670 Modifiers can be applied to the \fB${\fP\fIname\fP\fB}\fP form of parameter
671 substitution:
672 .IP \fB${\fP\fIname\fP\fB:-\fP\fIword\fP\fB}\fP
673 if \fIname\fP is set and not null, it is substituted, otherwise \fIword\fP is
674 substituted.
675 .IP \fB${\fP\fIname\fP\fB:+\fP\fIword\fP\fB}\fP
676 if \fIname\fP is set and not null, \fIword\fP is substituted, otherwise nothing is substituted.
677 .IP \fB${\fP\fIname\fP\fB:=\fP\fIword\fP\fB}\fP
678 if \fIname\fP is set and not null, it is substituted, otherwise it is
679 assigned \fIword\fP and the resulting value of \fIname\fP is substituted.
680 .IP \fB${\fP\fIname\fP\fB:?\fP\fIword\fP\fB}\fP
681 if \fIname\fP is set and not null, it is substituted, otherwise \fIword\fP
682 is printed on standard error (preceded by \fIname\fP:) and an error occurs
683 (normally causing termination of a shell script, function or \&.-script).
684 If word is omitted the string `parameter null or not set' is used instead.
686 In the above modifiers, the \fB:\fP can be omitted, in which case the
687 conditions only depend on \fIname\fP being set (as opposed to set and
688 not null).
689 If \fIword\fP is needed, parameter, command, arithmetic and tilde substitution
690 are performed on it; if \fIword\fP is not needed, it is not evaluated.
691 .\"}}}
693 The following forms of parameter substitution can also be used:
694 .\"{{{  ${#name}
695 .IP \fB${#\fP\fIname\fP\fB}\fP
696 The number of positional parameters if \fIname\fP is \fB*\fP, \fB@\fP or
697 is not specified,
698 or the length of the string value of parameter \fIname\fP.
699 .\"}}}
700 .\"{{{  ${#name[*]}, ${#name[@]}
701 .IP "\fB${#\fP\fIname\fP\fB[*]}\fP, \fB${#\fP\fIname\fP\fB[@]}\fP"
702 The number of elements in the array \fIname\fP.
703 .\"}}}
704 .\"{{{  ${name#pattern}, ${name##pattern}
705 .IP "\fB${\fP\fIname\fP\fB#\fP\fIpattern\fP\fB}\fP, \fB${\fP\fIname\fP\fB##\fP\fIpattern\fP\fB}\fP"
706 If \fIpattern\fP matches the beginning of the value of parameter \fIname\fP,
707 the matched text is deleted from the result of substitution.
708 A single \fB#\fP results in the shortest match, two \fB#\fP's results in the
709 longest match.
710 .\"}}}
711 .\"{{{  ${name%pattern}, ${name%%pattern}
712 .IP "\fB${\fP\fIname\fP\fB%\fP\fIpattern\fP\fB}\fP, \fB${\fP\fIname\fP\fB%%\fP\fIpattern\fP\fB}\fP"
713 Like \fB${\fP..\fB#\fP..\fB}\fP substitution, but it deletes from the end of the
714 value.
715 .\"}}}
716 .\"{{{  special shell parameters
718 The following special parameters are implicitly set by the shell and cannot be
719 set directly using assignments:
720 .\"{{{  !
721 .IP \fB!\fP
722 Process id of the last background process started.
723 If no background processes have been started, the parameter is not set.
724 .\"}}}
725 .\"{{{  #
726 .IP \fB#\fP
727 The number of positional parameters (\fIi.e.\fP, \fB$1\fP, \fB$2\fP,
728 \fIetc.\fP).
729 .\"}}}
730 .\"{{{  $
731 .IP \fB$\fP
732 The process ID of the shell, or the PID of the original shell if
733 it is a subshell.
734 .\"}}}
735 .\"{{{  -
736 .IP \fB\-\fP
737 The concatenation of the current single letter options
738 (see \fBset\fP command below for list of options).
739 .\"}}}
740 .\"{{{  ?
741 .IP \fB?\fP
742 The exit status of the last non-asynchronous command executed.
743 If the last command was killed by a signal, \fB$?\fP is set to 128 plus
744 the signal number.
745 .\"}}}
746 .\"{{{  0
747 .IP "\fB0\fP"
748 The name the shell was invoked with (\fIi.e.\fP, \fBargv[0]\fP), or the
749 \fBcommand-name\fP if it was invoked with the \fB\-c\fP option and the
750 \fBcommand-name\fP was supplied, or the \fIfile\fP argument, if it was
751 supplied.
752 If the \fBposix\fP option is not set, \fB$0\fP is the name of the current
753 function or script.
754 .\"}}}
755 .\"{{{  1-9
756 .IP "\fB1\fP ... \fB9\fP"
757 The first nine positional parameters that were supplied to the shell,
758 function or \fB.\fP-script.
759 Further positional parameters may be accessed using
760 \fB${\fP\fInumber\fP\fB}\fP.
761 .\"}}}
762 .\"{{{  *
763 .IP \fB*\fP
764 All positional parameters (except parameter 0),
765 \fIi.e.\fP, \fB$1 $2 $3\fP....
766 If used outside of double quotes, parameters are separate words
767 (which are subjected to word splitting); if used within double quotes,
768 parameters are separated by the first character of the \fBIFS\fP parameter
769 (or the empty string if \fBIFS\fP is null).
770 .\"}}}
771 .\"{{{  @
772 .IP \fB@\fP
773 Same as \fB$*\fP, unless it is used inside double quotes, in which case
774 a separate word is generated for each positional parameter \- if there
775 are no positional parameters, no word is generated ("$@" can be used
776 to access arguments, verbatim, without losing null arguments or
777 splitting arguments with spaces).
778 .\"}}}
779 .\"}}}
780 .\"{{{  general shell parameters
782 The following parameters are set and/or used by the shell:
783 .\"{{{  _
784 .ksh(
785 .IP "\fB_\fP \fI(underscore)\fP"
786 When an external command is executed by the shell, this parameter is
787 set in the environment of the new process to the path of the executed
788 command.
789 In interactive use, this parameter is also set in the parent shell to
790 the last word of the previous command.
791 When \fBMAILPATH\fP messages are evaluated, this parameter contains
792 the name of the file that changed (see \fBMAILPATH\fP parameter below).
793 .ksh)
794 .\"}}}
795 .\"{{{  CDPATH
796 .IP \fBCDPATH\fP
797 Search path for the \fBcd\fP built-in command.
798 Works the same way as
799 \fBPATH\fP for those directories not beginning with \fB/\fP in \fBcd\fP
800 commands.
801 Note that if CDPATH is set and does not contain \fB.\fP nor an empty path,
802 the current directory is not searched.
803 .\"}}}
804 .\"{{{  COLUMNS
805 .IP \fBCOLUMNS\fP
806 Set to the number of columns on the terminal or window.
807 Currently set to the \fBcols\fP value as reported by \fIstty\fP(1) if that
808 value is non-zero.
809 This parameter is used by the interactive line editing modes, and by
810 \fBselect\fP, \fBset \-o\fP and \fBkill \-l\fP commands
811 to format information in columns.
812 .\"}}}
813 .\"{{{  EDITOR
814 .ksh(
815 .IP \fBEDITOR\fP
816 If the \fBVISUAL\fP parameter is not set, this parameter controls the
817 command line editing mode for interactive shells.
818 See \fBVISUAL\fP parameter below for how this works.
819 .ksh)
820 .\"}}}
821 .\"{{{  ENV
822 .IP \fBENV\fP
823 If this parameter is found to be set after any profile files are
824 executed, the expanded value is used as a shell start-up file.
825 It typically contains function and alias definitions.
826 .\"}}}
827 .\"{{{  ERRNO
828 .IP \fBERRNO\fP
829 Integer value of the shell's errno variable \(em indicates the reason
830 the last system call failed.
831 .\" todo: ERRNO variable
833 Not implemented yet.
834 .\"}}}
835 .\"{{{  EXECSHELL
836 .IP \fBEXECSHELL\fP
837 If set, this parameter is assumed to contain the shell that is to be
838 used to execute commands that \fIexecve\fP(2) fails to execute and
839 which do not start with a `\fB#!\fP \fIshell\fP' sequence.
840 .\"}}}
841 .\"{{{  FCEDIT
842 .IP \fBFCEDIT\fP
843 The editor used by the \fBfc\fP command (see below).
844 .\"}}}
845 .\"{{{  FPATH
846 .IP \fBFPATH\fP
847 Like \fBPATH\fP, but used when an undefined function is executed to locate
848 the file defining the function.
849 It is also searched when a command can't be found using \fBPATH\fP.
850 See Functions below for more information.
851 .\"}}}
852 .\"{{{  HISTFILE
853 .ksh(
854 .IP \fBHISTFILE\fP
855 The name of the file used to store history.
856 When assigned to, history is loaded from the specified file.
857 Also, several invocations of the
858 shell running on the same machine will share history if their
859 \fBHISTFILE\fP parameters all point at the same file.
861 NOTE: if HISTFILE isn't set, no history file is used.
862 This is
863 different from the original Korn shell, which uses \fB$HOME/.sh_history\fP;
864 in future, pdksh may also use a default history file.
865 .ksh)
866 .\"}}}
867 .\"{{{  HISTSIZE
868 .ksh(
869 .IP \fBHISTSIZE\fP
870 The number of commands normally stored for history, default 128.
871 .ksh)
872 .\"}}}
873 .\"{{{  HOME
874 .IP \fBHOME\fP
875 The default directory for the \fBcd\fP command and the value
876 substituted for an unqualified \fB~\fP (see Tilde Expansion below).
877 .\"}}}
878 .\"{{{  IFS
879 .IP \fBIFS\fP
880 Internal field separator, used during substitution and by the \fBread\fP
881 command, to split values into distinct arguments; normally set to
882 space, tab and newline.
883 See Substitution above for details.
885 \fBNote:\fP this parameter is not imported from the environment
886 when the shell is started.
887 .\"}}}
888 .\"{{{  KSH_VERSION
889 .ksh(
890 .IP \fBKSH_VERSION\fP
891 The version of shell and the date the version was created (readonly).
892 See also the version commands in Emacs Editing Mode
893 and Vi Editing Mode sections, below.
894 .ksh)
895 .\"}}}
896 .\"{{{  SH_VERSION
897 .sh(
898 .IP \fBSH_VERSION\fP
899 The version of shell and the date the version was created (readonly).
900 .sh)
901 .\"}}}
902 .\"{{{  LINENO
903 .IP \fBLINENO\fP
904 The line number of the function or shell script that is currently being
905 executed.
906 .\"}}}
907 .\"{{{  LINES
908 .IP \fBLINES\fP
909 Set to the number of lines on the terminal or window.
910 .\"Currently set to the \fBrows\fP value as reported by \fIstty\fP(1) if that
911 .\"value is non-zero.
912 .\" todo: LINES variable
914 Not implemented yet.
915 .\"}}}
916 .\"{{{  MAIL
917 .ksh(
918 .IP \fBMAIL\fP
919 If set, the user will be informed of the arrival of mail in the named file.
920 This parameter is ignored if the \fBMAILPATH\fP parameter is set.
921 .ksh)
922 .\"}}}
923 .\"{{{  MAILCHECK
924 .ksh(
925 .IP \fBMAILCHECK\fP
926 How often, in seconds, the shell will check for mail in the file(s)
927 specified by \fBMAIL\fP or \fBMAILPATH\fP.
928 If 0, the shell checks before each prompt.
929 The default is 600 (10 minutes).
930 .ksh)
931 .\"}}}
932 .\"{{{  MAILPATH
933 .ksh(
934 .IP \fBMAILPATH\fP
935 A list of files to be checked for mail.
936 The list is colon separated,
937 and each file may be followed by a \fB?\fP and a message to be printed
938 if new mail has arrived.
939 Command, parameter and arithmetic substitution is
940 performed on the message, and, during substitution, the parameter \fB$_\fP
941 contains the name of the file.
942 The default message is \fByou have mail in $_\fP.
943 .ksh)
944 .\"}}}
945 .\"{{{  OLDPWD
946 .IP \fBOLDPWD\fP
947 The previous working directory.
948 Unset if \fBcd\fP has not successfully changed directories since the
949 shell started, or if the shell doesn't know where it is.
950 .\"}}}
951 .\"{{{  OPTARG
952 .IP \fBOPTARG\fP
953 When using \fBgetopts\fP, it contains the argument for a parsed option,
954 if it requires one.
955 .\"}}}
956 .\"{{{  OPTIND
957 .IP \fBOPTIND\fP
958 The index of the last argument processed when using \fBgetopts\fP.
959 Assigning 1 to this parameter causes \fBgetopts\fP to
960 process arguments from the beginning the next time it is invoked.
961 .\"}}}
962 .\"{{{  PATH
963 .IP \fBPATH\fP
964 A colon separated list of directories that are searched when looking
965 for commands and \fB.\fP'd files.
966 An empty string resulting from a leading or trailing colon, or two adjacent
967 colons is treated as a `.', the current directory.
968 .\"}}}
969 .\"{{{  POSIXLY_CORRECT
970 .IP \fBPOSIXLY_CORRECT\fP
971 If set, this parameter causes the \fBposix\fP option to be enabled.
972 See POSIX Mode below.
973 .\"}}}
974 .\"{{{  PPID
975 .IP \fBPPID\fP
976 The process ID of the shell's parent (readonly).
977 .\"}}}
978 .\"{{{  PS1
979 .IP \fBPS1\fP
980 \fBPS1\fP is the primary prompt for interactive shells.
981 .ksh(
982 Parameter, command and arithmetic substitutions are performed, and
983 \fB!\fP is replaced with the current command number (see \fBfc\fP
984 command below).
985 A literal ! can be put in the prompt by placing !! in PS1.
986 Note that since the command line editors try to figure out how long the
987 prompt is (so they know how far it is to edge of the screen),
988 escape codes in the prompt tend to mess things up.
989 You can tell the shell not to count certain sequences (such as escape codes)
990 by prefixing your prompt with a non-printing character (such as control-A)
991 followed by a carriage return and then delimiting the escape codes with
992 this non-printing character.
993 If you don't have any non-printing characters, you're out of luck...
994 BTW, don't blame me for this hack; it's in the original ksh.
995 .ksh)
996 .sh(
997 The prompt is printed verbatim (\fIi.e.\fP, no substitutions are done).
998 .sh)
999 Default is `\fB$\ \fP' for non-root users, `\fB#\ \fP' for root.
1000 .\"}}}
1001 .\"{{{  PS2
1002 .IP \fBPS2\fP
1003 Secondary prompt string, by default `\fB>\fP ', used when more input is
1004 needed to complete a command.
1005 .\"}}}
1006 .\"{{{  PS3
1007 .ksh(
1008 .IP \fBPS3\fP
1009 Prompt used by \fBselect\fP statement when reading a menu selection.
1010 Default is `\fB#?\ \fP'.
1011 .ksh)
1012 .\"}}}
1013 .\"{{{  PS4
1014 .IP \fBPS4\fP
1015 Used to prefix commands that are printed during execution tracing
1016 (see \fBset \-x\fP command below).
1017 .ksh(
1018 Parameter, command and arithmetic substitutions are performed
1019 before it is printed.
1020 .ksh)
1021 .sh(
1022 The prompt is printed verbatim (\fIi.e.\fP, no substitutions are done).
1023 .sh)
1024 Default is `\fB+\ \fP'.
1025 .\"}}}
1026 .\"{{{  PWD
1027 .IP \fBPWD\fP
1028 The current working directory.
1029 Maybe unset or null if shell doesn't know where it is.
1030 .\"}}}
1031 .\"{{{  RANDOM
1032 .ksh(
1033 .IP \fBRANDOM\fP
1034 A simple random number generator.
1035 Every time \fBRANDOM\fP is
1036 referenced, it is assigned the next number in a random number series.
1037 The point in the series can be set by assigning a number to
1038 \fBRANDOM\fP (see \fIrand\fP(3)).
1039 .ksh)
1040 .\"}}}
1041 .\"{{{  REPLY
1042 .IP \fBREPLY\fP
1043 Default parameter for the \fBread\fP command if no names are given.
1044 Also used in \fBselect\fP loops to store the value that is read from
1045 standard input.
1046 .\"}}}
1047 .\"{{{  SECONDS
1048 .ksh(
1049 .IP \fBSECONDS\fP
1050 The number of seconds since the shell started or, if the parameter has been
1051 assigned an integer value, the number of seconds since the assignment plus
1052 the value that was assigned.
1053 .ksh)
1054 .\"}}}
1055 .\"{{{  TMOUT
1056 .ksh(
1057 .IP \fBTMOUT\fP
1058 If set to a positive integer in an interactive shell, it specifies
1059 the maximum number of seconds the shell will wait for input after
1060 printing the primary prompt (\fBPS1\fP).
1061 If the time is exceeded, the shell exits.
1062 .ksh)
1063 .\"}}}
1064 .\"{{{  TMPDIR
1065 .IP \fBTMPDIR\fP
1066 The directory shell temporary files are created in.
1067 If this parameter is not set, or does not contain the absolute path of a
1068 writable directory, temporary files are created in \fB/tmp\fP.
1069 .\"}}}
1070 .\"{{{  VISUAL
1071 .ksh(
1072 .IP \fBVISUAL\fP
1073 If set, this parameter controls the command line editing mode for
1074 interactive shells.
1075 If the last component of the path specified in this
1076 parameter contains the string \fBvi\fP, \fBemacs\fP or \fBgmacs\fP, the
1077 vi, emacs or gmacs (Gosling emacs) editing mode is enabled, respectively.
1078 .ksh)
1079 .\"}}}
1080 .\"}}}
1081 .\"}}}
1082 .\"{{{  Tilde Expansion
1083 .SS "Tilde Expansion"
1084 Tilde expansion, which is done in parallel with parameter substitution,
1085 is done on words starting with an unquoted \fB~\fP.
1086 The characters following the tilde, up to the first \fB/\fP, if any,
1087 are assumed to be a login name.
1088 If the login name is empty, \fB+\fP or \fB\-\fP, the
1089 value of the \fBHOME\fP, \fBPWD\fP, or \fBOLDPWD\fP parameter is
1090 substituted, respectively.
1091 Otherwise, the password file is searched for the login name, and the
1092 tilde expression is substituted with the user's home directory.
1093 If the login name is not found in the password
1094 file or if any quoting or parameter substitution occurs in the login name,
1095 no substitution is performed.
1097 In parameter assignments (those preceding a simple-command or those
1098 occurring in the arguments of \fBalias\fP, \fBexport\fP, \fBreadonly\fP,
1099 and \fBtypeset\fP), tilde expansion is done after any unquoted colon
1100 (\fB:\fP), and login names are also delimited by colons.
1102 The home directory of previously expanded login names are cached and
1103 re-used.
1104 The \fBalias \-d\fP command may be used to list, change and
1105 add to this cache (\fIe.g.\fP, `alias \-d fac=/usr/local/facilities; cd
1106 ~fac/bin').
1107 .\"}}}
1108 .\"{{{  Brace Expansion
1109 .ksh(
1110 .SS "Brace Expansion (alternation)"
1111 Brace expressions, which take the form
1113 \fIprefix\fP\fB{\fP\fIstr\fP1\fB,\fP...\fB,\fP\fIstr\fPN\fB}\fP\fIsuffix\fP
1115 are expanded to N words, each of which is the concatenation of
1116 \fIprefix\fP, \fIstr\fPi and \fIsuffix\fP
1117 (\fIe.g.\fP, `a{c,b{X,Y},d}e' expands to four word: ace, abXe, abYe, and ade).
1118 As noted in the example, brace expressions can be nested and the resulting
1119 words are not sorted.
1120 Brace expressions must contain an unquoted comma (\fB,\fP) for expansion
1121 to occur (\fIi.e.\fP, \fB{}\fP and \fB{foo}\fP are not expanded).
1122 Brace expansion is carried out after parameter substitution and before
1123 file name generation.
1124 .ksh)
1125 .\"}}}
1126 .\"{{{  File Name Patterns
1127 .SS "File Name Patterns"
1129 A file name pattern is a word containing one or more unquoted \fB?\fP or
1130 \fB*\fP characters or \fB[\fP..\fB]\fP sequences.
1131 Once brace expansion has
1132 been performed, the shell replaces file name patterns with the sorted names
1133 of all the files that match the pattern (if no files match, the word is
1134 left unchanged).
1135 The pattern elements have the following meaning:
1136 .IP \fB?\fP
1137 matches any single character.
1138 .IP \fB*\fP
1139 matches any sequence of characters.
1140 .IP \fB[\fP..\fB]\fP
1141 matches any of the characters inside the brackets.
1142 Ranges of characters
1143 can be specified by separating two characters by a \fB\-\fP, \fIe.g.\fP,
1144 \fB[a0\-9]\fP matches the letter \fBa\fP or any digit.
1145 In order to represent itself, a
1146 \fB\-\fP must either be quoted or the first or last character in the character
1147 list.
1148 Similarly, a \fB]\fP must be quoted or the first character in the list
1149 if it is represent itself instead of the end of the list.
1150 Also, a \fB!\fP
1151 appearing at the start of the list has special meaning (see below), so to
1152 represent itself it must be quoted or appear later in the list.
1153 .IP \fB[!\fP..\fB]\fP
1154 like \fB[\fP..\fB]\fP, except it matches any character not inside the brackets.
1155 .ksh(
1156 .IP "\fB*(\fP\fIpattern\fP\fB|\fP ... \fP|\fP\fIpattern\fP\fB)\fP"
1157 matches any string of characters that matches zero or more occurrences
1158 of the specified patterns.
1159 Example: the pattern \fB*(foo|bar)\fP matches the strings
1160 `', `foo', `bar', `foobarfoo', \fIetc.\fP.
1161 .IP "\fB+(\fP\fIpattern\fP\fB|\fP ... \fP|\fP\fIpattern\fP\fB)\fP"
1162 matches any string of characters that matches one or more occurrences
1163 of the specified patterns.
1164 Example: the pattern \fB+(foo|bar)\fP matches the strings
1165 `foo', `bar', `foobarfoo', \fIetc.\fP.
1166 .IP "\fB?(\fP\fIpattern\fP\fB|\fP ... \fP|\fP\fIpattern\fP\fB)\fP"
1167 matches the empty string or a string that matches one of the
1168 specified patterns.
1169 Example: the pattern \fB?(foo|bar)\fP only matches the strings
1170 `', `foo' and `bar'.
1171 .IP "\fB@(\fP\fIpattern\fP\fB|\fP ... \fP|\fP\fIpattern\fP\fB)\fP"
1172 matches a string that matches one of the
1173 specified patterns.
1174 Example: the pattern \fB@(foo|bar)\fP only matches the strings
1175 `foo' and `bar'.
1176 .IP "\fB!(\fP\fIpattern\fP\fB|\fP ... \fP|\fP\fIpattern\fP\fB)\fP"
1177 matches any string that does not match one of the specified
1178 patterns.
1179 Examples: the pattern \fB!(foo|bar)\fP matches all strings except
1180 `foo' and `bar'; the pattern \fB!(*)\fP matches no strings;
1181 the pattern \fB!(?)*\fP matches all strings (think about it).
1182 .ksh)
1184 Note that pdksh currently never matches \fB.\fP and \fB..\fP, but the original
1185 ksh, Bourne sh and bash do, so this may have to change (too bad).
1187 Note that none of the above pattern elements match either a period (\fB.\fP)
1188 at the start of a file name or a slash (\fB/\fP), even if they are explicitly
1189 used in a \fB[\fP..\fB]\fP sequence; also, the names \fB.\fP and \fB..\fP
1190 are never matched, even by the pattern \fB.*\fP.
1192 If the \fBmarkdirs\fP option is set, any directories that result from
1193 file name generation are marked with a trailing \fB/\fP.
1195 .\" todo: implement this ([[:alpha:]], \fIetc.\fP)
1196 The POSIX character classes (\fIi.e.\fP,
1197 \fB[:\fP\fIclass-name\fP\fB:]\fP inside a \fB[\fP..\fB]\fP expression)
1198 are not yet implemented.
1199 .\"}}}
1200 .\"{{{  Input/Output Redirection
1201 .SS "Input/Output Redirection"
1202 When a command is executed, its standard input, standard output and
1203 standard error (file descriptors 0, 1 and 2, respectively) are normally
1204 inherited from the shell.
1205 Three exceptions to this are commands in pipelines, for which standard input
1206 and/or standard output are those set up by the pipeline, asynchronous commands
1207 created when job control is disabled, for which standard input is initially
1208 set to be from \fB/dev/null\fP, and commands for which any of the following
1209 redirections have been specified:
1210 .IP "\fB>\fP \fIfile\fP"
1211 standard output is redirected to \fIfile\fP.
1212 If \fIfile\fP does not exist,
1213 it is created; if it does exist, is a regular file and the \fBnoclobber\fP
1214 option is set, an error occurs, otherwise the file is truncated.
1215 Note that this means the command \fIcmd < foo > foo\fP will open
1216 \fIfoo\fP for reading and then truncate it when it opens it for writing,
1217 before \fIcmd\fP gets a chance to actually read \fIfoo\fP.
1218 .IP "\fB>|\fP \fIfile\fP"
1219 same as \fB>\fP, except the file is truncated, even if the \fBnoclobber\fP
1220 option is set.
1221 .IP "\fB>>\fP \fIfile\fP"
1222 same as \fB>\fP, except the file an existing file is appended to instead
1223 of being truncated.
1224 Also, the file is opened in append mode, so writes
1225 always go to the end of the file (see \fIopen\fP(2)).
1226 .IP "\fB<\fP \fIfile\fP"
1227 standard input is redirected from \fIfile\fP, which is opened for reading.
1228 .IP "\fB<>\fP \fIfile\fP"
1229 same as \fB<\fP, except the file is opened for reading and writing.
1230 .IP "\fB<<\fP \fImarker\fP"
1231 after reading the command line containing this kind of redirection (called a
1232 here document), the shell copies lines from the command source into a temporary
1233 file until a line matching \fImarker\fP is read.
1234 When the command is executed, standard input is redirected from the temporary
1235 file.
1236 If \fImarker\fP contains no quoted characters, the contents of the
1237 temporary file are processed as if enclosed in double quotes each time
1238 the command is executed, so parameter, command and arithmetic substitutions
1239 are performed, along with backslash (\fB\e\fP) escapes for
1240 \fB$\fP, \fB`\fP, \fB\e\fP and \fB\enewline\fP.
1241 If multiple here documents are used on the same command line, they are
1242 saved in order.
1243 .IP "\fB<<-\fP \fImarker\fP"
1244 same as \fB<<\fP, except leading tabs are stripped from lines in the
1245 here document.
1246 .IP "\fB<&\fP \fIfd\fP"
1247 standard input is duplicated from file descriptor \fIfd\fP.
1248 \fIfd\fP can be a single digit, indicating the number of an existing
1249 file descriptor, the letter \fBp\fP, indicating the file descriptor
1250 associated with the output of the current co-process, or
1251 the character \fB\-\fP, indicating standard input is to be closed.
1252 .IP "\fB>&\fP \fIfd\fP"
1253 same as \fB<&\fP, except the operation is done on standard output.
1255 In any of the above redirections, the file descriptor that is redirected
1256 (\fIi.e.\fP, standard input or standard output) can be explicitly given by
1257 preceding the redirection with a single digit.
1258 Parameter, command and arithmetic substitutions, tilde substitutions and
1259 (if the shell is interactive) file name generation are all performed
1260 on the \fIfile\fP, \fImarker\fP and \fIfd\fP arguments of redirections.
1261 Note however, that the results of any file name generation are only used
1262 if a single file is matched; if multiple files match, the word with the
1263 unexpanded file name generation characters is used.
1264 Note that in restricted shells, redirections which can create files cannot
1265 be used.
1267 For simple-commands, redirections may appear anywhere in the command, for
1268 compound-commands (\fBif\fP statements, \fIetc.\fP), any redirections must
1269 appear at the end.
1270 Redirections are processed after pipelines are created and in the order they
1271 are given, so
1273 \fBcat /foo/bar 2>&1 > /dev/null | cat \-n\fP
1275 will print an error with a line number prepended to it.
1276 .\"}}}
1277 .\"{{{  Arithmetic Expressions
1278 .SS "Arithmetic Expressions"
1279 Integer arithmetic expressions can be used
1280 .ksh(
1281 with the \fBlet\fP command,
1282 .ksh)
1283 inside \fB$((\fP..\fB))\fP expressions,
1284 inside array references (\fIe.g.\fP, \fIname\fP\fB[\fP\fIexpr\fP\fB]\fP),
1285 as numeric arguments to the \fBtest\fP command,
1286 and as the value of an assignment to an integer parameter.
1288 Expression may contain alpha-numeric parameter identifiers, array
1289 references, and integer constants and may be combined with the
1290 following C operators (listed and grouped in increasing order of precedence).
1292 Unary operators:
1293 \fB+ \- ! ~ ++ --\fP
1295 Binary operators:
1296 \fB,\fP
1298 \fB= *= /= %= += \-= <<= >>= &= ^= |=\fP
1300 \fB||\fP
1302 \fB&&\fP
1304 \fB|\fP
1306 \fB^\fP
1308 \fB&\fP
1310 \fB== !=\fP
1312 \fB< <= >= >\fP
1314 \fB<< >>\fP
1316 \fB+ \-\fP
1318 \fB* / %\fP
1320 Ternary operator:
1321 \fB?:\fP (precedence is immediately higher than assignment)
1323 Grouping operators:
1324 \fB( )\fP
1326 Integer constants may be specified with arbitrary bases using the notation
1327 \fIbase\fP\fB#\fP\fInumber\fP, where \fIbase\fP is a decimal integer specifying
1328 the base, and \fInumber\fP is a number in the specified base.
1330 The operators are evaluated as follows:
1332 .IP "unary \fB+\fP"
1333 result is the argument (included for completeness).
1334 .IP "unary \fB\-\fP"
1335 negation.
1336 .IP "\fB!\fP"
1337 logical not; the result is 1 if argument is zero, 0 if not.
1338 .IP "\fB~\fP"
1339 arithmetic (bit-wise) not.
1340 .IP "\fB++\fP"
1341 increment; must be applied to a parameter (not a literal or other
1342 expression) - the parameter is incremented by 1.
1343 When used as a prefix operator, the result is the incremented value of
1344 the parameter, when used as a postfix operator, the result is the
1345 original value of the parameter.
1346 .IP "\fB--\fP"
1347 similar to \fB++\fP, except the parameter is decremented by 1.
1348 .IP "\fB,\fP"
1349 separates two arithmetic expressions; the left hand side is evaluated first,
1350 then the right.
1351 The result is value of the expression on the right hand side.
1352 .IP "\fB=\fP"
1353 assignment; variable on the left is set to the value on the right.
1354 .IP "\fB*= /= %= += \-= <<= >>= &= ^= |=\fP"
1355 assignment operators; \fI<var> <op>\fP\fB=\fP \fI<expr>\fP is the same as
1356 \fI<var>\fP \fB=\fP \fI<var> <op>\fP \fB(\fP \fI<expr>\fP \fB)\fP.
1357 .IP "\fB||\fP"
1358 logical or; the result is 1 if either argument is non-zero, 0 if not.
1359 The right argument is evaluated only if the left argument is zero.
1360 .IP "\fB&&\fP"
1361 logical and; the result is 1 if both arguments are non-zero, 0 if not.
1362 The right argument is evaluated only if the left argument is non-zero.
1363 .IP "\fB|\fP"
1364 arithmetic (bit-wise) or.
1365 .IP "\fB^\fP"
1366 arithmetic (bit-wise) exclusive-or.
1367 .IP "\fB&\fP"
1368 arithmetic (bit-wise) and.
1369 .IP "\fB==\fP"
1370 equal; the result is 1 if both arguments are equal, 0 if not.
1371 .IP "\fB!=\fP"
1372 not equal; the result is 0 if both arguments are equal, 1 if not.
1373 .IP "\fB<\fP"
1374 less than; the result is 1 if the left argument is less than the right,
1375 0 if not.
1376 .IP "\fB<= >= >\fP"
1377 less than or equal, greater than or equal, greater than.
1378 See <.
1379 .IP "\fB<< >>\fP"
1380 shift left (right); the result is the left argument with its bits shifted
1381 left (right) by the amount given in the right argument.
1382 .IP "\fB+ - * /\fP"
1383 addition, subtraction, multiplication, and division.
1384 .IP "\fB%\fP"
1385 remainder; the result is the remainder of the division of the left argument
1386 by the right.
1387 The sign of the result is unspecified if either argument is negative.
1388 .IP "\fI<arg1>\fP \fB?\fP \fI<arg2>\fP \fB:\fP \fI<arg3>\fP"
1389 if \fI<arg1>\fP is non-zero, the result is \fI<arg2>\fP,
1390 otherwise \fI<arg3>\fP.
1392 .\"}}}
1393 .\"{{{  Co-Processes
1394 .ksh(
1395 .SS "Co-Processes"
1396 A co-process, which is a pipeline created with the \fB|&\fP operator,
1397 is an asynchronous process that the shell can both write to
1398 (using \fBprint \-p\fP) and read from (using \fBread \-p\fP).
1399 The input and output of the co-process can also be manipulated
1400 using \fB>&p\fP and \fB<&p\fP redirections, respectively.
1401 Once a co-process has been started, another can't be started until
1402 the co-process exits, or until the co-process input has been redirected using
1403 an \fBexec \fP\fIn\fP\fB>&p\fP redirection.
1404 If a co-process's input is redirected in this way, the next
1405 co-process to be started will share the output with the first co-process,
1406 unless the output of the initial co-process has been redirected using an
1407 \fBexec \fP\fIn\fP\fB<&p\fP redirection.
1409 Some notes concerning co-processes:
1410 .nr P2 \n(PD
1411 .nr PD 0
1412 .IP \ \ \(bu
1413 the only way to close the co-process input (so the co-process reads
1414 an end-of-file) is to redirect the input to a numbered file descriptor
1415 and then close that file descriptor (\fIe.g.\fP, \fBexec 3>&p;exec 3>&-\fP).
1416 .IP \ \ \(bu
1417 in order for co-processes to share a common output, the shell must keep
1418 the write portion of the output pipe open.
1419 This means that end of file will not be detected until all co-processes
1420 sharing the co-process output have exited (when they all exit, the shell
1421 closes its copy of the pipe).
1422 This can be avoided by redirecting the output to a numbered
1423 file descriptor (as this also causes the shell to close its copy).
1424 Note that this behaviour is slightly different from the original Korn shell
1425 which closes its copy of the write portion of the co-processes' output when the
1426 most recently started co-process (instead of when all sharing co-processes)
1427 exits.
1428 .IP \ \ \(bu
1429 \fBprint \-p\fP will ignore SIGPIPE signals during writes
1430 if the signal is not being trapped or ignored; the same is not true if
1431 the co-process input has been duplicated to another file descriptor and
1432 \fBprint \-u\fP\fIn\fP is used.
1433 .nr PD \n(P2
1434 .ksh)
1435 .\"}}}
1436 .\"{{{  Functions
1437 .SS "Functions"
1438 Functions are defined using either Korn shell \fBfunction\fP \fIname\fP
1439 syntax or the Bourne/POSIX shell \fIname\fP\fB()\fP syntax
1440 (see below for the difference between the two forms).
1441 Functions are like \fB.\fP-scripts in that they are executed in
1442 the current environment, however, unlike \fB.\fP-scripts, shell arguments
1443 (\fIi.e.\fP, positional parameters, \fB$1\fP, \fIetc.\fP) are never visible
1444 inside them.
1445 When the shell is determining the location of a command, functions are
1446 searched after special built-in commands, and before regular and non-regular
1447 built-ins, and before the \fBPATH\fP is searched.
1449 An existing function may be deleted using \fBunset \-f\fP \fIfunction-name\fP.
1450 A list of functions can be obtained using \fBtypeset +f\fP and the
1451 function definitions can be listed using \fBtypeset \-f\fP.
1452 \fBautoload\fP (which is an alias for \fBtypeset \-fu\fP) may be used to
1453 create undefined functions; when an undefined function is executed, the
1454 shell searches the path specified in the \fBFPATH\fP parameter for a file
1455 with the same name as the function, which, if found is read and executed.
1456 If after executing the file, the named function is found to be defined, the
1457 function is executed, otherwise, the normal command search is continued
1458 (\fIi.e.\fP, the shell searches the regular built-in command table
1459 and \fBPATH\fP).
1460 Note that if a command is not found using \fBPATH\fP, an attempt is
1461 made to autoload a function using \fBFPATH\fP (this is an undocumented
1462 feature of the original Korn shell).
1464 Functions can have two attributes, trace and export, which can be set
1465 with \fBtypeset \-ft\fP and \fBtypeset \-fx\fP, respectively.
1466 When a traced function is executed, the shell's \fBxtrace\fP option is turned
1467 on for the functions duration, otherwise the \fBxtrace\fP option is turned off.
1468 The export attribute of functions is currently not used.
1469 In the original
1470 Korn shell, exported functions are visible to shell scripts that are executed.
1472 Since functions are executed in the current shell environment, parameter
1473 assignments made inside functions are visible after the function completes.
1474 If this is not the desired effect, the \fBtypeset\fP command can be used
1475 inside a function to create a local parameter.
1476 Note that special parameters (\fIe.g.\fP, \fB$$\fP, \fB$!\fP) can't be
1477 scoped in this way.
1479 The exit status of a function is that of the last command executed in
1480 the function.
1481 A function can be made to finish immediately using the \fBreturn\fP command;
1482 this may also be used to explicitly specify the exit status.
1484 Functions defined with the \fBfunction\fP reserved word are
1485 treated differently in the following ways from functions defined with
1486 the \fB()\fP notation:
1487 .nr P2 \n(PD
1488 .nr PD 0
1489 .IP \ \ \(bu
1490 the \fB$0\fP parameter is set to the name of the function
1491 (Bourne-style functions leave \fB$0\fP untouched).
1492 .IP \ \ \(bu
1493 parameter assignments preceding function calls are not kept in
1494 the shell environment
1495 (executing Bourne-style functions will keep assignments).
1496 .IP \ \ \(bu
1497 \fBOPTIND\fP is saved/reset and restored on entry and exit from the function
1498 so \fBgetopts\fP can be used properly both inside and outside the function
1499 (Bourne-style functions leave \fBOPTIND\fP untouched, so using \fBgetopts\fP
1500 inside a function interferes with using \fBgetopts\fP outside the function).
1501 .nr PD \n(P2
1502 In the future, the following differences will also be added:
1503 .nr P2 \n(PD
1504 .nr PD 0
1505 .IP \ \ \(bu
1506 A separate trap/signal environment will be used during the execution of
1507 functions.
1508 This will mean that traps set inside a function will not affect the shell's
1509 traps and signals that are not ignored in the shell (but may be trapped) will
1510 have their default effect in a function.
1511 .IP \ \ \(bu
1512 The EXIT trap, if set in a function, will be executed after the function
1513 returns.
1514 .nr PD \n(P2
1515 .\"}}}
1516 .\"{{{  POSIX mode
1517 .SS "POSIX Mode"
1518 The shell is intended to be POSIX compliant, however, in some cases, POSIX
1519 behaviour is contrary either to the original Korn shell behaviour or to
1520 user convenience.
1521 How the shell behaves in these cases is determined by the state of
1522 the posix option (\fBset \-o posix\fP) \(em if it is on, the POSIX behaviour
1523 is followed, otherwise it is not.
1524 The \fBposix\fP option is set automatically when the shell starts up
1525 if the environment contains the \fBPOSIXLY_CORRECT\fP parameter.
1526 (The shell can also be compiled so that it is in POSIX mode by default,
1527 however this is usually not desirable).
1529 The following is a list of things that are affected by the state of
1530 the \fBposix\fP option:
1531 .nr P2 \n(PD
1532 .nr PD 0
1533 .sh(
1534 .IP \ \ \(bu
1535 reading of \fB$ENV\fP: if not in posix mode, the \fBENV\fP parameter
1536 is not expanded and included when the shell starts.
1537 .sh)
1538 .\" The following behaviour is not useful and has been removed in NetBSD
1539 .\" .IP \ \ \(bu
1540 .\" \fB\e"\fP inside double quoted \fB`\fP..\fB`\fP command substitutions:
1541 .\" in posix mode, the \fB\e"\fP is interpreted when the command is interpreted;
1542 .\" in non-posix mode, the backslash is stripped before the command substitution
1543 .\" is interpreted.
1544 .\" For example, \fBecho "`echo \e"hi\e"`"\fP produces `"hi"' in
1545 .\" posix mode, `hi' in non-posix mode.
1546 .\" To avoid problems, use the \fB$(...\fP)
1547 .\" form of command substitution.
1548 .IP \ \ \(bu
1549 \fBkill \-l\fP output: in posix mode, signal names are listed one a single line;
1550 in non-posix mode, signal numbers, names and descriptions are printed in
1551 columns.
1552 In future, a new option (\fB\-v\fP perhaps) will be added to distinguish
1553 the two behaviours.
1554 .IP \ \ \(bu
1555 \fBfg\fP exit status: in posix mode, the exit status is 0 if no errors occur;
1556 in non-posix mode, the exit status is that of the last foregrounded job.
1557 .IP \ \ \(bu
1558 \fBeval\fP exit status: if eval gets to see an empty command (\fIe.g.\fP,
1559 \fBeval "`false`"\fP), its exit status in posix mode will be 0.
1560 In non-posix mode, it will be the exit status of the last
1561 command substitution that was done in the processing of the arguments to eval
1562 (or 0 if there were no command substitutions).
1563 .IP \ \ \(bu
1564 \fBgetopts\fP: in posix mode, options must start with a \fB\-\fP; in non-posix
1565 mode, options can start with either \fB\-\fP or \fB+\fP.
1566 .IP \ \ \(bu
1567 brace expansion (also known as alternation): in posix mode, brace expansion
1568 is disabled; in non-posix mode, brace expansion enabled.
1569 Note that \fBset \-o posix\fP (or setting the \fBPOSIXLY_CORRECT\fP parameter)
1570 automatically turns the \fBbraceexpand\fP option off, however it can be
1571 explicitly turned on later.
1572 .IP \ \ \(bu
1573 \fBset \-\fP: in posix mode, this does not clear the \fBverbose\fP or
1574 \fBxtrace\fP options; in non-posix mode, it does.
1575 .IP \ \ \(bu
1576 \fBset\fP exit status: in posix mode, the exit status of set is 0
1577 if there are no errors; in non-posix mode, the exit status is that of
1578 any command substitutions performed in generating the set command.
1579 For example, `\fBset \-\- `false`; echo $?\fP' prints 0 in posix mode,
1580 1 in non-posix mode.
1581 This construct is used in most shell scripts that
1582 use the old \fIgetopt\fP(1) command.
1583 .IP \ \ \(bu
1584 argument expansion of \fBalias\fP, \fBexport\fP, \fBreadonly\fP, and
1585 \fBtypeset\fP commands: in posix mode, normal argument expansion done;
1586 in non-posix mode, field splitting, file globing, brace expansion and
1587 (normal) tilde expansion are turned off, and assignment tilde expansion
1588 is turned on.
1589 .IP \ \ \(bu
1590 signal specification: in posix mode, signals can be specified as digits only
1591 if signal numbers match POSIX values (\fIi.e.\fP, HUP=1, INT=2, QUIT=3, ABRT=6,
1592 KILL=9, ALRM=14, and TERM=15); in non-posix mode, signals can be always digits.
1593 .IP \ \ \(bu
1594 alias expansion: in posix mode, alias expansion is only carried out when
1595 reading command words; in non-posix mode, alias expansion is carried out
1596 on any word following an alias that ended in a space.
1597 For example, the following for loop
1599 .ft B
1600 alias a='for ' i='j'
1602 a i in 1 2; do echo i=$i j=$j; done
1603 .ft P
1605 uses parameter \fBi\fP in posix mode, \fBj\fP in non-posix mode.
1606 .IP \ \ \(bu
1607 test: in posix mode, the expression "\fB-t\fP" (preceded by
1608 some number of "\fB!\fP" arguments) is always true as it is a non-zero length
1609 string; in non-posix mode, it tests if file descriptor 1 is a tty (\fIi.e.\fP,
1610 the \fIfd\fP argument to the \fB-t\fP test may be left out and defaults to 1).
1611 .nr PD \n(P2
1612 .\"}}}
1613 .\"{{{  Command Execution (built-in commands)
1614 .SS "Command Execution"
1615 After evaluation of command line arguments, redirections and parameter
1616 assignments, the type of command is determined: a special built-in,
1617 a function, a regular built-in or the name of a file to execute found
1618 using the \fBPATH\fP parameter.
1619 The checks are made in the above order.
1620 Special built-in commands differ from other commands in that
1621 the \fBPATH\fP parameter is not used to find them, an error
1622 during their execution can cause a non-interactive shell to exit and
1623 parameter assignments that are specified before the command are
1624 kept after the command completes.
1625 Just to confuse things, if the posix option is turned off (see \fBset\fP
1626 command below) some special commands are very special in that
1627 no field splitting, file globing, brace expansion nor tilde expansion
1628 is performed on arguments that look like assignments.
1629 Regular built-in commands are different only in that the \fBPATH\fP
1630 parameter is not used to find them.
1632 The original ksh and POSIX differ somewhat in which commands are considered
1633 special or regular:
1634 .IP "POSIX special commands"
1636 lw(8m)fB lw(8m)fB lw(8m)fB lw(8m)fB lw(8m)fB .
1637 \&.     continue        exit    return  trap
1638 :       eval    export  set     unset
1639 break   exec    readonly        shift
1641 .IP "Additional ksh special commands"
1643 lw(8m)fB lw(8m)fB lw(8m)fB lw(8m)fB lw(8m)fB .
1644 builtin times   typeset
1646 .IP "Very special commands (non-posix mode)"
1648 lw(8m)fB lw(8m)fB lw(8m)fB lw(8m)fB lw(8m)fB .
1649 alias   readonly        set     typeset
1651 .IP "POSIX regular commands"
1653 lw(8m)fB lw(8m)fB lw(8m)fB lw(8m)fB lw(8m)fB .
1654 alias   command fg      kill    umask
1655 bg      false   getopts read    unalias
1656 cd      fc      jobs    true    wait
1658 .IP "Additional ksh regular commands"
1660 lw(8m)fB lw(8m)fB lw(8m)fB lw(8m)fB lw(8m)fB .
1661 [       let     pwd     ulimit
1662 echo    print   test    whence
1665 In the future, the additional ksh special and regular commands may
1666 be treated differently from the POSIX special and regular commands.
1668 Once the type of the command has been determined, any command line parameter
1669 assignments are performed and exported for the duration of the command.
1671 The following describes the special and regular built-in commands:
1672 .\"{{{  . file [ arg1 ... ]
1673 .IP "\fB\&.\fP \fIfile\fP [\fIarg1\fP ...]"
1674 Execute the commands in \fIfile\fP in the current environment.
1675 The file is searched for in the directories of \fBPATH\fP.
1676 If arguments are given, the positional parameters may be used to
1677 access them while \fIfile\fP is being executed.
1678 If no arguments are given, the positional parameters are those of the
1679 environment the command is used in.
1680 .\"}}}
1681 .\"{{{  : [ ... ]
1682 .IP "\fB:\fP [ ... ]"
1683 The null command.
1684 Exit status is set to zero.
1685 .\"}}}
1686 .\"{{{  alias [ -d | +-t [ -r ] ] [+-px] [+-] [name1[=value1] ...]
1687 .IP "\fBalias\fP [ \fB\-d\fP | \fB\(+-t\fP [\fB\-r\fP] ] [\fB\(+-px\fP] [\fB\(+-\fP] [\fIname1\fP[\fB=\fP\fIvalue1\fP] ...]"
1688 Without arguments, \fBalias\fP lists all aliases.
1689 For any name without a value, the existing alias is listed.
1690 Any name with a value defines an alias (see Aliases above).
1692 When listing aliases, one of two formats is used:
1693 normally, aliases are listed as \fIname\fP\fB=\fP\fIvalue\fP, where
1694 \fIvalue\fP is quoted; if options were preceded with \fB+\fP
1695 or a lone \fB+\fP is given on the command line, only \fIname\fP
1696 is printed.
1697 In addition, if the \fB\-p\fP option is used, each alias
1698 is prefixed with the string "\fBalias\fP\ ".
1700 The \fB\-x\fP option sets (\fB+x\fP clears) the export attribute of an alias,
1701 or, if no names are given, lists the aliases with the export attribute
1702 (exporting an alias has no affect).
1704 The \fB\-t\fP option indicates that tracked aliases are to be listed/set
1705 (values specified on the command line are ignored for tracked aliases).
1706 The \fB\-r\fP option indicates that all tracked aliases are to be reset.
1708 The \fB\-d\fP causes directory aliases, which are used in tilde expansion,
1709 to be listed or set (see Tilde Expansion above).
1710 .\"}}}
1711 .\"{{{  bg [job ...]
1712 .IP "\fBbg\fP [\fIjob\fP ...]"
1713 Resume the specified stopped job(s) in the background.
1714 If no jobs are specified, \fB%+\fP is assumed.
1715 This command is only available on systems which support job control.
1716 See Job Control below for more information.
1717 .\"}}}
1718 .\"{{{  bind [-l] [-m] [key[=editing-command] ...]
1719 .IP "\fBbind\fP [\fB\-l\fP] [\fB\-m\fP] [\fIkey\fP[\fB=\fP\fIediting-command\fP] ...]"
1720 Set or view the current emacs command editing key bindings/macros.
1721 See Emacs Editing Mode below for a complete description.
1722 .\"}}}
1723 .\"{{{  break [level]
1724 .IP "\fBbreak\fP [\fIlevel\fP]"
1725 \fBbreak\fP exits the \fIlevel\fPth inner most for, select, until, or while
1726 loop.
1727 \fIlevel\fP defaults to 1.
1728 .\"}}}
1729 .\"{{{  builtin command [arg1 ...]
1730 .IP "\fBbuiltin\fP \fIcommand\fP [\fIarg1\fP ...]"
1731 Execute the built-in command \fIcommand\fP.
1732 .\"}}}
1733 .\"{{{  cd [-LP] [dir]
1734 .IP "\fBcd\fP [\fB\-LP\fP] [\fIdir\fP]"
1735 Set the working directory to \fIdir\fP.
1736 If the parameter \fBCDPATH\fP
1737 is set, it lists directories to search in for \fIdir\fP.
1738 An empty entry in the \fBCDPATH\fP entry means the current directory.
1739 If a non-empty directory from \fBCDPATH\fP is used, the resulting full
1740 path is printed to standard output.
1741 If \fIdir\fP is
1742 missing, the home directory \fB$HOME\fP is used.
1743 If \fIdir\fP is
1744 \fB\-\fP, the previous working directory is used (see OLDPWD parameter).
1745 If \fB\-L\fP option (logical path) is used or if the \fBphysical\fP option
1746 (see \fBset\fP command below) isn't set, references to \fB..\fP in \fIdir\fP
1747 are relative to the path used get to the directory.
1748 If \fB\-P\fP option (physical path) is used or if the \fBphysical\fP option
1749 is set, \fB..\fP is relative to the filesystem directory tree.
1750 The \fBPWD\fP and \fBOLDPWD\fP parameters are updated to reflect the
1751 current and old wording directory, respectively.
1752 .\"}}}
1753 .\"{{{  cd [-LP] old new
1754 .IP "\fBcd\fP [\fB\-LP\fP] \fIold new\fP"
1755 The string \fInew\fP is substituted for \fIold\fP in the current
1756 directory, and the shell attempts to change to the new directory.
1757 .\"}}}
1758 .\"{{{  command [ -pvV ] cmd [arg1 ...]
1759 .ksh(
1760 .IP "\fBcommand\fP [\fB\-pvV\fP] \fIcmd\fP [\fIarg1\fP ...]"
1761 If neither the \fB\-v\fP nor \fB\-V\fP options are given,
1762 .ksh)
1763 .sh(
1764 .IP "\fBcommand\fP [\fB\-p\fP] \fIcmd\fP [\fIarg1\fP ...]"
1765 .sh)
1766 \fIcmd\fP
1767 is executed exactly as if the \fBcommand\fP had not been specified,
1768 with two exceptions: first, \fIcmd\fP cannot be a shell function, and
1769 second, special built-in commands lose their specialness (\fIi.e.\fP,
1770 redirection and utility errors do not cause the shell to exit, and command
1771 assignments are not permanent).
1772 If the \fB\-p\fP option is given, a default search path is used instead of
1773 the current value of \fBPATH\fP (the actual value of the default path is
1774 system dependent: on POSIXish systems, it is the value returned by
1776 \fBgetconf CS_PATH\fP
1779 .ksh(
1780 If the \fB\-v\fP option is given, instead of executing \fIcmd\fP, information
1781 about what would be executed is given (and the same is done for
1782 \fIarg1\fP ...):
1783 for special and regular built-in commands and functions,
1784 their names are simply printed,
1785 for aliases, a command that defines them is printed,
1786 and for commands found by searching the \fBPATH\fP parameter,
1787 the full path of the command is printed.
1788 If no command is found, (\fIi.e.\fP, the path search fails), nothing
1789 is printed and \fBcommand\fP exits with a non-zero status.
1790 The \fB\-V\fP option is like the \fB\-v\fP option, except it is more verbose.
1791 .ksh)
1792 .\"}}}
1793 .\"{{{  continue [levels]
1794 .IP "\fBcontinue\fP [\fIlevels\fP]"
1795 \fBcontinue\fP jumps to the beginning of the \fIlevel\fPth inner most for,
1796 select, until, or while loop.
1797 \fIlevel\fP defaults to 1.
1798 .\"}}}
1799 .\"{{{  echo [-neE] [arg ...]
1800 .IP "\fBecho\fP [\fB\-neE\fP] [\fIarg\fP ...]"
1801 Prints its arguments (separated by spaces) followed by a newline, to
1802 standard out.
1803 The newline is suppressed if any of the arguments contain the backslash
1804 sequence \fB\ec\fP.
1805 See \fBprint\fP command below for a list of other backslash sequences
1806 that are recognized.
1808 The options are provided for compatibility with BSD shell scripts:
1809 \fB\-n\fP suppresses the trailing newline, \fB\-e\fP enables backslash
1810 interpretation (a no-op, since this is normally done), and \fB\-E\fP
1811 suppresses backslash interpretation.
1812 .\"}}}
1813 .\"{{{  eval command ...
1814 .IP "\fBeval\fP \fIcommand ...\fP"
1815 The arguments are concatenated (with spaces between them) to form
1816 a single string which the shell then parses and executes
1817 in the current environment.
1818 .\"}}}
1819 .\"{{{  exec [command [arg ...]]
1820 .IP "\fBexec\fP [\fIcommand\fP [\fIarg\fP ...]]"
1821 The command is executed without forking, replacing the shell process.
1823 If no arguments are given, any IO redirection is permanent and the shell
1824 is not replaced.
1825 .ksh(
1826 Any file descriptors greater than 2 which are opened or \fIdup\fP(2)-ed
1827 in this way are not
1828 made available to other executed commands (\fIi.e.\fP,
1829 commands that are not built-in to the shell).
1830 Note that the Bourne shell differs here: it does pass these
1831 file descriptors on.
1832 .ksh)
1833 .sh(
1834 Any file descriptors which are opened or \fIdup\fP(2)-ed
1835 in this way are made available to other executed commands
1836 (note that the Korn shell differs here: it does not pass on
1837 file descriptors greater than 2).
1838 .sh)
1839 .\"}}}
1840 .\"{{{  exit [status]
1841 .IP "\fBexit\fP [\fIstatus\fP]"
1842 The shell exits with the specified exit status.
1843 If \fIstatus\fP is not specified, the exit status is the current
1844 value of the \fB?\fP parameter.
1845 .\"}}}
1846 .\"{{{  export [-p] [parameter[=value] ...]
1847 .IP "\fBexport\fP [\fB\-p\fP] [\fIparameter\fP[\fB=\fP\fIvalue\fP]] ..."
1848 Sets the export attribute of the named parameters.
1849 Exported parameters are passed in the environment to executed commands.
1850 If values are specified, the named parameters also assigned.
1852 If no parameters are specified, the names of all parameters with the export
1853 attribute are printed one per line, unless the \fB\-p\fP option is used,
1854 in which case \fBexport\fP commands defining all exported
1855 parameters, including their values, are printed.
1856 .\"}}}
1857 .\"{{{  false
1858 .IP "\fBfalse\fP"
1859 A command that exits with a non-zero status.
1860 .\"}}}
1861 .\"{{{  fc [-e editor | -l [-n]] [-r] [first [ last ]]
1862 .ksh(
1863 .IP "\fBfc\fP [\fB\-e\fP \fIeditor\fP | \fB\-l\fP [\fB\-n\fP]] [\fB\-r\fP] [\fIfirst\fP [\fIlast\fP]]"
1864 \fIfirst\fP and \fIlast\fP select commands from the history.
1865 Commands can be selected by
1866 history number, or a string specifying the most recent command starting
1867 with that string.
1868 The \fB\-l\fP option lists the command on stdout,
1869 and \fB\-n\fP inhibits the default command numbers.
1870 The \fB\-r\fP option reverses the order of the list.
1871 Without \fB\-l\fP, the selected
1872 commands are edited by the editor specified with the \fB\-e\fP
1873 option, or if no \fB\-e\fP is specified, the editor specified by the
1874 \fBFCEDIT\fP parameter (if this parameter is not set, \fB/bin/ed\fP is used),
1875 and then executed by the shell.
1876 .ksh)
1877 .\"}}}
1878 .\"{{{  fc [-e - | -s] [-g] [old=new] [prefix]
1879 .IP "\fBfc\fP [\fB\-e \-\fP | \fB\-s\fP] [\fB\-g\fP] [\fIold\fP\fB=\fP\fInew\fP] [\fIprefix\fP]"
1880 Re-execute the selected command (the previous command by default) after
1881 performing the optional substitution of \fIold\fP with \fInew\fP.
1882 If \fB\-g\fP is specified, all occurrences of \fIold\fP are replaced with
1883 \fInew\fP.
1884 This command is usually accessed with the predefined alias
1885 \fBr='fc \-e \-'\fP.
1886 .\"}}}
1887 .\"{{{  fg [job ...]
1888 .IP "\fBfg\fP [\fIjob\fP ...]"
1889 Resume the specified job(s) in the foreground.
1890 If no jobs are specified, \fB%+\fP is assumed.
1891 This command is only available on systems which support job control.
1892 See Job Control below for more information.
1893 .\"}}}
1894 .\"{{{  getopts optstring name [arg ...]
1895 .IP "\fBgetopts\fP \fIoptstring\fP \fIname\fP [\fIarg\fP ...]"
1896 \fBgetopts\fP is used by shell procedures to parse the specified arguments
1897 (or positional parameters, if no arguments are given) and to check for legal
1898 options.
1899 \fIoptstring\fP contains the option letters that
1900 \fBgetopts\fP is to recognize.
1901 If a letter is followed by a colon, the option is expected to have an argument.
1902 Options that do not take arguments may be grouped in a single argument.
1903 If an option takes an argument and the option character is not the last
1904 character of the argument it is found in, the remainder of the argument
1905 is taken to be the option's argument, otherwise, the next argument is
1906 the option's argument.
1908 Each time \fBgetopts\fP is invoked, it places the next option in
1909 the shell parameter \fIname\fP and the index of the next argument to be
1910 processed in the shell parameter \fBOPTIND\fP.
1911 If the option was introduced with a \fB+\fP, the option placed in
1912 \fIname\fP is prefixed with a \fB+\fP.
1913 When an option requires an argument, \fBgetopts\fP places it in the
1914 shell parameter \fBOPTARG\fP.
1915 When an illegal option or a missing option argument is
1916 encountered a question mark or a colon is placed in \fIname\fP
1917 (indicating an illegal option or missing argument, respectively)
1918 and \fBOPTARG\fP is set to the option character that caused the problem.
1919 An error message is also printed to standard error if \fIoptstring\fP
1920 does not begin with a colon.
1922 When the end of the options is encountered, \fBgetopts\fP exits with a
1923 non-zero exit status.
1924 Options end at the first (non-option) argument that does not
1925 start with a \-, or when a \fB\-\-\fP argument is encountered.
1927 Option parsing can be reset by setting \fBOPTIND\fP to 1 (this is done
1928 automatically whenever the shell or a shell procedure is invoked).
1930 Warning: Changing the value of the shell parameter \fBOPTIND\fP to
1931 a value other than 1, or parsing different sets of arguments without
1932 resetting \fBOPTIND\fP may lead to unexpected results.
1933 .\"}}}
1934 .\"{{{  hash [-r] [name ...]
1935 .IP "\fBhash\fP [\fB\-r\fP] [\fIname ...\fP]"
1936 Without arguments, any hashed executable command pathnames are listed.
1937 The \fB\-r\fP option causes all hashed commands to be removed
1938 from the hash table.
1939 Each \fIname\fP is searched as if it where a command name and added to the
1940 hash table if it is an executable command.
1941 .\"}}}
1942 .\"{{{  jobs [-lpn] [job ...]
1943 .IP "\fBjobs\fP [\fB\-lpn\fP] [\fIjob\fP ...]"
1944 Display information about the specified jobs; if no jobs are specified,
1945 all jobs are displayed.
1946 The \fB\-n\fP option causes information to be displayed only for jobs
1947 that have changed state since the last notification.
1948 If the \fB\-l\fP option is used, the process-id of each process in a job
1949 is also listed.
1950 The \fB\-p\fP option causes only the process group of each job to be printed.
1951 See Job Control below for the format of \fIjob\fP and the displayed job.
1952 .\"}}}
1953 .\"{{{  kill [-s signame | -signum | -signame] { job | pid | -pgrp } ...
1954 .IP "\fBkill\fP [\fB\-s\fP \fIsigname\fP | \fB\-signum\fP | \fB\-signame\fP ] { \fIjob\fP | \fIpid\fP | \fB\-\fP\fIpgrp\fP } ..."
1955 Send the specified signal to the specified jobs, process ids, or process groups.
1956 If no signal is specified, the signal TERM is sent.
1957 If a job is specified, the signal is sent to the job's process group.
1958 See Job Control below for the format of \fIjob\fP.
1959 .\"}}}
1960 .\"{{{  kill -l [exit-status ...]
1961 .IP "\fBkill \-l\fP [\fIexit-status\fP ...]"
1962 Print the name of the signal that killed a process which exited with
1963 the specified \fIexit-status\fPes.
1964 If no arguments are specified, a list of all the signals, their numbers and
1965 a short description of them are printed.
1966 .\"}}}
1967 .\"{{{  let [expression ...]
1968 .ksh(
1969 .IP "\fBlet\fP [\fIexpression\fP ...]"
1970 Each expression is evaluated, see Arithmetic Expressions above.
1971 If all expressions are successfully evaluated, the exit status
1972 is 0 (1) if the last expression evaluated to non-zero (zero).
1973 If an error occurs during the parsing or evaluation of an expression,
1974 the exit status is greater than 1.
1975 Since expressions may need to be
1976 quoted, \fB((\fP \fIexpr\fP \fB))\fP is syntactic sugar for \fBlet
1977 "\fP\fIexpr\fP\fB"\fP.
1978 .ksh)
1979 .\"}}}
1980 .\"{{{  print [-nprsun | -R [-en]] [argument ...]
1981 .IP "\fBprint\fP [\fB\-nprsu\fP\fIn\fP | \fB\-R\fP [\fB\-en\fP]] [\fIargument ...\fP]"
1982 \fBPrint\fP prints its arguments on the standard output, separated by
1983 spaces, and terminated with a newline.
1984 The \fB\-n\fP option suppresses the newline.
1985 By default, certain C escapes are translated.
1986 These include \eb, \ef, \en, \er, \et, \ev, and \e0### (# is an octal digit,
1987 of which there may be 0 to 3).
1988 \ec is equivalent to using the \fB\-n\fP option.
1989 \e expansion may be inhibited with the \fB\-r\fP option.
1990 The \fB\-s\fP option prints to the history file instead of standard output,
1991 the \fB\-u\fP option prints to file descriptor \fIn\fP (\fIn\fP
1992 defaults to 1 if omitted), and the \fB\-p\fP option prints to the co-process
1993 (see Co-Processes above).
1995 The \fB\-R\fP option is used to emulate, to some degree, the BSD echo
1996 command, which does not process \e sequences unless the \fB\-e\fP option
1997 is given.
1998 As above, the \fB\-n\fP option suppresses the trailing newline.
1999 .\"}}}
2000 .\"{{{  pwd [-LP]
2001 .IP "\fBpwd\fP [\fB\-LP\fP]"
2002 Print the present working directory.
2003 If \fB\-L\fP option is used or if the \fBphysical\fP option
2004 (see \fBset\fP command below) isn't set, the logical path is printed
2005 (\fIi.e.\fP, the path used to \fBcd\fP to the current directory).
2006 If \fB\-P\fP option (physical path) is used or if the \fBphysical\fP option
2007 is set, the path determined from the filesystem (by following \fB..\fP
2008 directories to the root directory) is printed.
2009 .\"}}}
2010 .\"{{{  read [-prsun] [parameter ...]
2011 .IP "\fBread\fP [\fB\-prsu\fP\fIn\fP] [\fIparameter ...\fP]"
2012 Reads a line of input from standard input, separate the line into fields using
2013 the \fBIFS\fP parameter (see Substitution above), and assign each field to the
2014 specified parameters.
2015 If there are more parameters than fields, the extra parameters are set to null,
2016 or alternatively, if there are more fields than parameters, the last parameter
2017 is assigned the remaining fields (inclusive of any separating spaces).
2018 If no parameters are specified, the \fBREPLY\fP parameter is used.
2019 If the input line ends in a backslash and the \fB\-r\fP option was not used, the
2020 backslash and newline are stripped and more input is read.
2021 If no input is read, \fBread\fP exits with a non-zero status.
2023 The first parameter may have a question mark and a string appended to it, in
2024 which case the string is used as a prompt (printed to standard error before
2025 any input is read) if the input is a tty
2026 (\fIe.g.\fP, \fBread nfoo?'number of foos: '\fP).
2028 The \fB\-u\fP\fIn\fP and \fB\-p\fP options cause input to be read
2029 from file descriptor \fIn\fP or the current co-process (see Co-Processes above
2030 for comments on this), respectively.
2031 If the \fB\-s\fP option is used, input is saved to the history file.
2032 .\"}}}
2033 .\"{{{  readonly [-p] [parameter[=value] ...]
2034 .IP "\fBreadonly\fP [\fB\-p\fP] [\fIparameter\fP[\fB=\fP\fIvalue\fP]] ..."
2035 Sets the readonly attribute of the named parameters.
2036 If values are given,
2037 parameters are set to them before setting the attribute.
2038 Once a parameter is made readonly, it cannot be unset and its value cannot
2039 be changed.
2041 If no parameters are specified, the names of all parameters with the readonly
2042 attribute are printed one per line, unless the \fB\-p\fP option is used,
2043 in which case \fBreadonly\fP commands defining all readonly
2044 parameters, including their values, are printed.
2045 .\"}}}
2046 .\"{{{  return [status]
2047 .IP "\fBreturn\fP [\fIstatus\fP]"
2048 Returns from a function or \fB.\fP script, with exit status \fIstatus\fP.
2049 If no \fIstatus\fP is given, the exit status of the last executed command
2050 is used.
2051 If used outside of a function or \fB.\fP script, it has the same effect
2052 as \fBexit\fP.
2053 Note that pdksh treats both profile and \fB$ENV\fP files as \fB.\fP scripts,
2054 while the original Korn shell only treats profiles as \fB.\fP scripts.
2055 .\"}}}
2056 .\"{{{  set [+-abCefhkmnpsuvxX] [+-o [option]] [+-A name] [--] [arg ...]
2057 .IP "\fBset\fP [\fB\(+-abCefhkmnpsuvxX\fP] [\fB\(+-o\fP [\fIoption\fP]] [\fB\(+-A\fP \fIname\fP] [\fB\-\-\fP] [\fIarg\fP ...]"
2058 The set command can be used to set (\fB\-\fP) or clear (\fB+\fP) shell options,
2059 set the positional parameters, or set an array parameter.
2060 Options can be changed using the \fB\(+-o\fP \fIoption\fP syntax,
2061 where \fIoption\fP is the long name of an option, or using
2062 the \fB\(+-\fP\fIletter\fP syntax, where \fIletter\fP is the
2063 option's single letter name (not all options have a single letter name).
2064 The following table lists both option letters (if they exist) and long names
2065 along with a description of what the option does.
2068 expand;
2069 afB lfB lw(3i).
2070 \-A             T{
2071 Sets the elements of the array parameter \fIname\fP to \fIarg\fP ...;
2072 If \fB\-A\fP is used, the array is reset (\fIi.e.\fP, emptied) first;
2073 if \fB+A\fP is used, the first N elements are set (where N is the number
2074 of \fIarg\fPs), the rest are left untouched.
2076 \-a     allexport       T{
2077 all new parameters are created with the export attribute
2079 \-b     notify  T{
2080 Print job notification messages asynchronously, instead of just before the
2081 prompt.
2082 Only used if job control is enabled (\fB\-m\fP).
2084 \-C     noclobber       T{
2085 Prevent \fB>\fP redirection from overwriting existing files (\fB>|\fP must
2086 be used to force an overwrite).
2088 \-e     errexit T{
2089 Exit (after executing the \fBERR\fP trap) as soon as an error occurs or
2090 a command fails (\fIi.e.\fP, exits with a non-zero status).
2091 This does not apply to commands whose exit status is explicitly tested by a
2092 shell construct such as \fBif\fP, \fBuntil\fP, \fBwhile\fP, \fB&&\fP or
2093 \fB||\fP statements.
2095 \-f     noglob  T{
2096 Do not expand file name patterns.
2098 \-h     trackall        T{
2099 Create tracked aliases for all executed commands (see Aliases above).
2100 On by default for non-interactive shells.
2102 \-i     interactive     T{
2103 Enable interactive mode \- this can only be set/unset when the shell is
2104 invoked.
2106 \-k     keyword T{
2107 Parameter assignments are recognized anywhere in a command.
2109 \-l     login   T{
2110 The shell is a login shell \- this can only be set/unset when the shell is
2111 invoked (see Shell Startup above).
2113 \-m     monitor T{
2114 Enable job control (default for interactive shells).
2116 \-n     noexec  T{
2117 Do not execute any commands \- useful for checking the syntax of scripts
2118 (ignored if interactive).
2120 \-p     privileged      T{
2121 Set automatically if, when the shell starts, the real uid or gid does not
2122 match the effective uid or gid, respectively.
2123 See Shell Startup above for a description of what this means.
2125 -r      restricted      T{
2126 Enable restricted mode \(em this option can only be used when the shell is
2127 invoked.
2128 See Shell Startup above for a description of what this
2129 means.
2131 \-s     stdin   T{
2132 If used when the shell is invoked, commands are read from standard input.
2133 Set automatically if the shell is invoked with no arguments.
2135 When \fB\-s\fP is used in the \fBset\fP command, it causes the specified
2136 arguments to be sorted before assigning them to the positional parameters
2137 (or to array \fIname\fP, if \fB\-A\fP is used).
2139 \-u     nounset T{
2140 Referencing of an unset parameter is treated as an error, unless
2141 one of the \fB\-\fP, \fB+\fP or \fB=\fP modifiers is used.
2143 \-v     verbose T{
2144 Write shell input to standard error as it is read.
2146 \-x     xtrace  T{
2147 Print commands and parameter assignments when they are executed,
2148 preceded by the value of \fBPS4\fP.
2150 \-X     markdirs        T{
2151 Mark directories with a trailing \fB/\fP during file name generation.
2153         bgnice  T{
2154 Background jobs are run with lower priority.
2156 .ksh(
2157         braceexpand     T{
2158 Enable brace expansion (aka, alternation).
2160 .ksh)
2161 .ksh(
2162         emacs   T{
2163 Enable BRL emacs-like command line editing (interactive shells only);
2164 see Emacs Editing Mode.
2166         emacs-usemeta   T{
2167 In emacs command-line editing, use the 8th bit
2168 as meta (^[) prefix.  This is the default if 
2169 LC_CTYPE is unset or POSIX respectively C.
2172         gmacs   T{
2173 Enable gmacs-like (Gosling emacs) command line editing (interactive shells
2174 only);
2175 currently identical to emacs editing except that transpose (^T) acts
2176 slightly differently.
2178 .ksh)
2179         ignoreeof       T{
2180 The shell will not (easily) exit on when end-of-file is read, \fBexit\fP must
2181 be used.
2182 To avoid infinite loops, the shell will exit if eof is read 13 times in
2183 a row.
2185         nohup   T{
2186 Do not kill running jobs with a \fBHUP\fP signal when a login shell exists.
2187 Currently set by default, but this will change in the future to be compatible
2188 with the original Korn shell (which doesn't have this option, but does
2189 send the \fBHUP\fP signal).
2191         nolog   T{
2192 No effect \- in the original Korn shell, this prevents function definitions
2193 from being stored in the history file.
2195         physical        T{
2196 Causes the \fBcd\fP and \fBpwd\fP commands to use `physical'
2197 (\fIi.e.\fP, the filesystem's) \fB..\fP directories instead of `logical'
2198 directories (\fIi.e.\fP,  the shell handles \fB..\fP, which allows the user
2199 to be oblivious of symlink links to directories).
2200 Clear by default.
2201 Note that setting
2202 this option does not effect the current value of the \fBPWD\fP parameter;
2203 only the \fBcd\fP command changes \fBPWD\fP.
2204 See the \fBcd\fP and \fBpwd\fP commands above for more details.
2206         posix   T{
2207 Enable posix mode.
2208 See POSIX Mode above.
2210         vi      T{
2211 Enable vi-like command line editing (interactive shells only).
2213         viraw   T{
2214 No effect \- in the original Korn shell, unless viraw was set, the vi command
2215 line mode would let the tty driver do the work until ESC (^[) was entered.
2216 pdksh is always in viraw mode.
2218         vi-esccomplete  T{
2219 In vi command line editing, do command / file name completion when
2220 escape (^[) is entered in command mode.
2222         vi-show8        T{
2223 Prefix characters with the eighth bit set with `M-'.
2224 If this option is not set, characters in the range
2225 128-160 are printed as is, which may cause problems.
2227         vi-tabcomplete  T{
2228 In vi command line editing, do command / file name completion when
2229 tab (^I) is entered in insert mode.  This is the default.
2233 These options can also be used upon invocation of the shell.
2234 The current set of options (with single letter names) can be found in the
2235 parameter \fB\-\fP.
2236 \fBset -o\fP with no option name will list all the options and whether each
2237 is on or off; \fBset +o\fP will print the long names of all options that
2238 are currently on.
2240 Remaining arguments, if any, are positional parameters and are assigned,
2241 in order, to the
2242 positional parameters (\fIi.e.\fP, \fB1\fP, \fB2\fP, \fIetc.\fP).
2243 If options are ended with \fB\-\-\fP and there are no remaining arguments,
2244 all positional parameters are cleared.
2245 If no options or arguments are given, then the values of all names are printed.
2246 For unknown historical reasons, a lone \fB\-\fP option is treated specially:
2247 it clears both the \fB\-x\fP and \fB\-v\fP options.
2248 .\"}}}
2249 .\"{{{  shift [number]
2250 .IP "\fBshift\fP [\fInumber\fP]"
2251 The positional parameters \fInumber\fP+1, \fInumber\fP+2 \fIetc.\fP\& are
2252 renamed to \fB1\fP, \fB2\fP, \fIetc.\fP
2253 \fInumber\fP defaults to 1.
2254 .\"}}}
2255 .\"{{{  test expression, [ expression ]
2256 .IP "\fBtest\fP \fIexpression\fP"
2257 .IP "\fB[\fP \fIexpression\fP \fB]\fP"
2258 \fBtest\fP evaluates the \fIexpression\fP and returns zero status if
2259 true, 1 if false, and greater than 1 if there was an error.
2260 It is normally used as the
2261 condition command of \fBif\fP and \fBwhile\fP statements.
2262 The following basic expressions are available:
2265 afB ltw(3.2i).
2266 \fIstr\fP       T{
2267 \fIstr\fP has non-zero length.
2268 Note that there is the potential
2269 for problems if \fIstr\fP turns out to be an operator (\fIe.g.\fP, \fB-r\fP)
2270 - it is generally better to use a test like
2272 \fB[ X"\fP\fIstr\fP\fB" != X ]\fP
2273 instead (double quotes are used in case \fIstr\fP contains spaces or file
2274 globing characters).
2276 \-r \fIfile\fP  T{
2277 \fIfile\fP exists and is readable.
2279 \-w \fIfile\fP  T{
2280 \fIfile\fP exists and is writable.
2282 \-x \fIfile\fP  T{
2283 \fIfile\fP exists and is executable.
2285 \-a \fIfile\fP  T{
2286 \fIfile\fP exists.
2288 \-e \fIfile\fP  T{
2289 \fIfile\fP exists.
2291 \-f \fIfile\fP  T{
2292 \fIfile\fP is a regular file.
2294 \-d \fIfile\fP  T{
2295 \fIfile\fP is a directory.
2297 \-c \fIfile\fP  T{
2298 \fIfile\fP is a character special device.
2300 \-b \fIfile\fP  T{
2301 \fIfile\fP is a block special device.
2303 \-p \fIfile\fP  T{
2304 \fIfile\fP is a named pipe.
2306 \-u \fIfile\fP  T{
2307 \fIfile\fP's mode has setuid bit set.
2309 \-g \fIfile\fP  T{
2310 \fIfile\fP's mode has setgid bit set.
2312 \-k \fIfile\fP  T{
2313 \fIfile\fP's mode has sticky bit set.
2315 \-s \fIfile\fP  T{
2316 \fIfile\fP is not empty.
2318 \-O \fIfile\fP  T{
2319 \fIfile\fP's owner is the shell's effective user-ID.
2321 \-G \fIfile\fP  T{
2322 \fIfile\fP's group is the shell's effective group-ID.
2324 \-h \fIfile\fP  T{
2325 \fIfile\fP is a symbolic link.
2327 \-H \fIfile\fP  T{
2328 \fIfile\fP is a context dependent directory (only useful on HP-UX).
2330 \-L \fIfile\fP  T{
2331 \fIfile\fP is a symbolic link.
2333 \-S \fIfile\fP  T{
2334 \fIfile\fP is a socket.
2336 \-o \fIoption\fP        T{
2337 shell \fIoption\fP is set (see \fBset\fP command above for list of options).
2338 As a non-standard extension, if the option starts with a \fB!\fP, the test
2339 is negated; the test always fails if option doesn't exist (thus
2341 \fB[ -o \fP\fIfoo\fP \fB-o -o !\fP\fIfoo\fP \fB]\fP
2342 returns true if and only if option \fIfoo\fP exists).
2344 \fIfile\fP \-nt \fIfile\fP      T{
2345 first \fIfile\fP is newer than second \fIfile\fP or first
2346 \fIfile\fP exists and the second \fIfile\fP does not.
2348 \fIfile\fP \-ot \fIfile\fP      T{
2349 first \fIfile\fP is older than second \fIfile\fP or second \fIfile\fP
2350 exists and the first \fIfile\fP does not.
2352 \fIfile\fP \-ef \fIfile\fP      T{
2353 first \fIfile\fP is the same file as second \fIfile\fP.
2355 \-t\ [\fIfd\fP] T{
2356 file descriptor is a tty device.
2357 If the posix option (\fBset \-o posix\fP, see POSIX Mode above) is not
2358 set, \fIfd\fP may be left out, in which case it is taken to be 1
2359 (the behaviour differs due to the special POSIX rules described below).
2361 \fIstring\fP    T{
2362 \fIstring\fP is not empty.
2364 \-z\ \fIstring\fP       T{
2365 \fIstring\fP is empty.
2367 \-n\ \fIstring\fP       T{
2368 \fIstring\fP is not empty.
2370 \fIstring\fP\ =\ \fIstring\fP   T{
2371 strings are equal.
2373 .ksh(
2374 \fIstring\fP\ ==\ \fIstring\fP  T{
2375 strings are equal.
2377 .ksh)
2378 \fIstring\fP\ !=\ \fIstring\fP  T{
2379 strings are not equal.
2381 \fInumber\fP\ \-eq\ \fInumber\fP        T{
2382 numbers compare equal.
2384 \fInumber\fP\ \-ne\ \fInumber\fP        T{
2385 numbers compare not equal.
2387 \fInumber\fP\ \-ge\ \fInumber\fP        T{
2388 numbers compare greater than or equal.
2390 \fInumber\fP\ \-gt\ \fInumber\fP        T{
2391 numbers compare greater than.
2393 \fInumber\fP\ \-le\ \fInumber\fP        T{
2394 numbers compare less than or equal.
2396 \fInumber\fP\ \-lt\ \fInumber\fP        T{
2397 numbers compare less than.
2401 The above basic expressions, in which unary operators have precedence over
2402 binary operators, may be combined with the following operators
2403 (listed in increasing order of precedence):
2406 afB l.
2407 \fIexpr\fP \-o \fIexpr\fP       logical or
2408 \fIexpr\fP \-a \fIexpr\fP       logical and
2409 ! \fIexpr\fP    logical not
2410 ( \fIexpr\fP )  grouping
2413 On operating systems not supporting \fB/dev/fd/\fP\fIn\fP devices
2414 (where \fIn\fP is a file descriptor number),
2415 the \fBtest\fP command will attempt to fake it for all tests that
2416 operate on files (except the \fB-e\fP test).
2417 I.e., \fB[ -w /dev/fd/2 ]\fP tests if file descriptor 2 is writable.
2419 Note that some special rules are applied (courtesy of POSIX) if the
2420 number of arguments to \fBtest\fP or \fB[\fP \&... \fB]\fP is less than
2421 five: if leading \fB!\fP arguments can be stripped such that only one
2422 argument remains then a string length test is performed (again, even if
2423 the argument is a unary operator);
2424 if leading \fB!\fP arguments can be stripped such that three
2425 arguments remain and the second argument is a binary operator, then the
2426 binary operation is performed (even if first argument is a unary
2427 operator, including an unstripped \fB!\fP).
2429 \fBNote:\fP A common mistake is to use \fBif [ $foo = bar ]\fP which
2430 fails if parameter \fBfoo\fP is null or unset, if it has embedded spaces
2431 (\fIi.e.\fP, \fBIFS\fP characters), or if it is a unary operator like \fB!\fP or
2432 \fB\-n\fP.
2433 Use tests like \fBif [ "X$foo" = Xbar ]\fP instead.
2434 .\"}}}
2435 .\"{{{  time [-p] [pipeline]
2436 .IP "\fBtime\fP [\fB-p\fP] [ \fIpipeline\fP ]"
2437 If a pipeline is given, the times used to execute the pipeline are reported.
2438 If no pipeline is given, then the user and system time used by the shell
2439 itself, and all the commands it has run since it was started, are reported.
2440 The times reported are
2441 the real time (elapsed time from start to finish),
2442 the user CPU time (time spent running in user mode)
2443 and the system CPU time (time spent running in kernel mode).
2444 Times are reported to standard error; the format of the output is:
2446     0.00s real     0.00s user     0.00s system
2448 unless the -p option is given (only possible if \fIpipeline\fP is a simple
2449 command), in which case the output is slightly longer:
2451     real   0.00
2452     user   0.00
2453     sys    0.00
2455 (the number of digits after the decimal may vary from system to system).
2456 Note that simple redirections of standard error do not effect the output
2457 of the time command:
2459 \fBtime sleep 1 2> \fP\fIafile\fP
2461 \fB{ time sleep 1; } 2> \fP\fIafile\fP
2462 times for the first command do not go to \fIafile\fP, but those of the
2463 second command do.
2464 .\"}}}
2465 .\"{{{  times
2466 .IP \fBtimes\fP
2467 Print the accumulated user and system times used by the shell and by
2468 processes which have exited that the shell started.
2469 .\"}}}
2470 .\"{{{  trap [handler signal ...]
2471 .IP "\fBtrap\fP [\fIhandler\fP \fIsignal ...\fP]"
2472 Sets trap handler that is to be executed when any of the specified signals
2473 are received.
2474 \fBHandler\fP is either a null string, indicating the signals are to
2475 be ignored, a minus (\fB\-\fP), indicating that the default action is to
2476 be taken for the signals (see signal(3)), or a string containing shell
2477 commands to be evaluated and executed at the first opportunity (\fIi.e.\fP,
2478 when the current command completes, or before printing the next \fBPS1\fP
2479 prompt) after receipt of one of the signals.
2480 \fBSignal\fP is the name of a signal (\fIe.g.\fP, PIPE or ALRM) or the number
2481 of the signal (see \fBkill \-l\fP command above).
2482 There are two special signals: \fBEXIT\fP (also known as \fB0\fP), which
2483 is executed when the shell is about to exit, and \fBERR\fP which is
2484 executed after an error occurs (an error is something that would cause
2485 the shell to exit if the \fB\-e\fP or \fBerrexit\fP option were set \(em
2486 see \fBset\fP command above).
2487 \fBEXIT\fP handlers are executed in the environment of the last executed
2488 command.
2489 Note that for non-interactive shells, the trap handler cannot be changed for
2490 signals that were ignored when the shell started.
2492 With no arguments, \fBtrap\fP lists, as a series of \fBtrap\fP commands,
2493 the current state of the traps that have been set since the shell started.
2494 Note that the output of \fBtrap\fP can not be usefully piped to another process
2495 (an artifact of the fact that traps are cleared when subprocesses are
2496 created).
2498 .\" todo: add these features (trap DEBUG, trap ERR/EXIT in function)
2499 The original Korn shell's \fBDEBUG\fP trap and the handling of \fBERR\fP and
2500 \fBEXIT\fP traps in functions are not yet implemented.
2501 .\"}}}
2502 .\"{{{  true
2503 .IP \fBtrue\fP
2504 A command that exits with a zero value.
2505 .\"}}}
2506 .\"{{{  typeset [[+-Ulprtux] [-L[n]] [-R[n]] [-Z[n]] [-i[n]] | -f [-tux]] [name[=value] ...]
2507 .IP "\fBtypeset\fP [[\(+-Ulprtux] [\fB\-L\fP[\fIn\fP]] [\fB\-R\fP[\fIn\fP]] [\fB\-Z\fP[\fIn\fP]] [\fB\-i\fP[\fIn\fP]] | \fB\-f\fP [\fB\-tux\fP]] [\fIname\fP[\fB=\fP\fIvalue\fP] ...]"
2508 Display or set parameter attributes.
2509 With no \fIname\fP arguments, parameter attributes are displayed: if no options
2510 arg used, the current attributes of all parameters are printed as typeset
2511 commands; if an option is given (or \fB\-\fP with no option letter)
2512 all parameters and their values with the specified attributes are printed;
2513 if options are introduced with \fB+\fP, parameter values are not printed.
2515 If \fIname\fP arguments are given, the attributes of the named parameters
2516 are set (\fB\-\fP) or cleared (\fB+\fP).
2517 Values for parameters may optionally be specified.
2518 If typeset is used inside a function, any newly created parameters are local
2519 to the function.
2521 When \fB\-f\fP is used, typeset operates on the attributes of functions.
2522 As with parameters, if no \fIname\fPs are given, functions are listed
2523 with their values (\fIi.e.\fP, definitions) unless options are introduced with
2524 \fB+\fP, in which case only the function names are reported.
2527 expand;
2528 afB lw(4.5i).
2529 \-L\fIn\fP      T{
2530 Left justify attribute: \fIn\fP specifies the field width.
2531 If \fIn\fP is not specified, the current width of a parameter (or the
2532 width of its first assigned value) is used.
2533 Leading white space (and zeros, if used with the \fB\-Z\fP option) is stripped.
2534 If necessary, values are either truncated or space padded to fit the
2535 field width.
2537 \-R\fIn\fP      T{
2538 Right justify attribute: \fIn\fP specifies the field width.
2539 If \fIn\fP is not specified, the current width of a parameter (or the
2540 width of its first assigned value) is used.
2541 Trailing white space are stripped.
2542 If necessary, values are either stripped of leading characters
2543 or space padded to make them fit the field width.
2545 \-Z\fIn\fP      T{
2546 Zero fill attribute: if not combined with \fB\-L\fP, this is the
2547 same as \fB\-R\fP, except zero padding is used instead of space padding.
2549 \-i\fIn\fP      T{
2550 integer attribute:
2551 \fIn\fP specifies the base to use when displaying the integer
2552 (if not specified, the base given in the first assignment is used).
2553 Parameters with this attribute may be assigned values containing
2554 arithmetic expressions.
2556 \-U     T{
2557 unsigned integer attribute: integers are printed as unsigned values
2558 (only useful when combined with the \fB\-i\fP option).
2559 This option is not in the original Korn shell.
2561 \-f     T{
2562 Function mode: display or set functions and their attributes, instead of
2563 parameters.
2565 \-l     T{
2566 Lower case attribute: all  upper case characters in values are converted to
2567 lower case.
2568 (In the original Korn shell, this parameter meant `long integer' when used
2569 with the \fB\-i\fP option).
2571 \-p     T{
2572 Print complete typeset commands that can be used to re-create the
2573 attributes (but not the values) of parameters.
2574 This is the default action (option exists for ksh93 compatibility).
2576 \-r     T{
2577 Readonly attribute: parameters with the this attribute may not be assigned to
2578 or unset.
2579 Once this attribute is set, it can not be turned off.
2581 \-t     T{
2582 Tag attribute: has no meaning to the shell; provided for application use.
2584 For functions, \fB\-t\fP is the trace attribute.
2585 When functions with the trace attribute are executed, the \fBxtrace\fP (\fB\-x\fP) shell option is temporarily turned on.
2587 \-u     T{
2588 Upper case attribute: all lower case characters in values are converted to
2589 upper case.
2590 (In the original Korn shell, this parameter meant `unsigned integer' when used
2591 with the \fB\-i\fP option, which meant upper case letters would never be used
2592 for bases greater than 10.
2593 See the \fB\-U\fP option).
2595 For functions, \fB\-u\fP is the undefined attribute.
2596 See Functions above for the implications of this.
2598 \-x     T{
2599 Export attribute: parameters (or functions) are placed in the environment of
2600 any executed commands.
2601 Exported functions are not implemented yet.
2604 .\"}}}
2605 .\"{{{  ulimit [-abcdfHlmnprsStvw] [value]
2606 .IP "\fBulimit\fP [\fB\-abcdfHlmnprsStvw\fP] [\fIvalue\fP]"
2607 Display or set process limits.
2608 If no options are used, the file size limit (\fB\-f\fP) is assumed.
2609 \fBvalue\fP, if specified, may be either be an arithmetic expression or the
2610 word \fBunlimited\fP.
2611 The limits affect the shell and any processes created by the shell after
2612 a limit is imposed.
2613 Note that some systems may not allow limits to be increased once they
2614 are set.
2615 Also note that the types of limits available are system dependent \- some
2616 systems have only the \fB\-f\fP limit.
2618 .IP \fB\-a\fP
2619 Displays all limits; unless \fB\-H\fP is used, soft limits are displayed.
2620 .IP \fB\-H\fP
2621 Set the hard limit only (default is to set both hard and soft limits).
2622 .IP \fB\-S\fP
2623 Set the soft limit only (default is to set both hard and soft limits).
2624 .IP \fB\-b\fP
2625 Impose a size limit of \fIn\fP bytes on the size of socket buffers.
2626 .IP \fB\-c\fP
2627 Impose a size limit of \fIn\fP blocks on the size of core dumps.
2628 .IP \fB\-d\fP
2629 Impose a size limit of \fIn\fP kbytes on the size of the data area.
2630 .IP \fB\-f\fP
2631 Impose a size limit of \fIn\fP blocks on files written by the shell and
2632 its child processes (files of any size may be read).
2633 .IP \fB\-l\fP
2634 Impose a limit of \fIn\fP kbytes on the amount of locked (wired) physical
2635 memory.
2636 .IP \fB\-m\fP
2637 Impose a limit of \fIn\fP kbytes on the amount of physical memory used.
2638 .IP \fB\-n\fP
2639 Impose a limit of \fIn\fP file descriptors that can be open at once.
2640 .IP \fB\-r\fP
2641 Impose a limit of \fIn\fP threads that can be run by the user at any one
2642 time.
2643 .IP \fB\-p\fP
2644 Impose a limit of \fIn\fP processes that can be run by the user at any one
2645 time.
2646 .IP \fB\-s\fP
2647 Impose a size limit of \fIn\fP kbytes on the size of the stack area.
2648 .IP \fB\-t\fP
2649 Impose a time limit of \fIn\fP CPU seconds to be used by each process.
2650 .IP \fB\-v\fP
2651 Impose a limit of \fIn\fP kbytes on the amount of virtual memory used;
2652 on some systems this is the maximum allowable virtual address (in bytes,
2653 not kbytes).
2654 .IP \fB\-w\fP
2655 Impose a limit of \fIn\fP kbytes on the amount of swap space used.
2657 As far as \fBulimit\fP is concerned, a block is 512 bytes.
2659 .\"}}}
2660 .\"{{{  umask [-S] [mask]
2661 .IP "\fBumask\fP [\fB\-S\fP] [\fImask\fP]"
2663 Display or set the file permission creation mask, or umask (see \fIumask\fP(2)).
2664 If the \fB\-S\fP option is used, the mask displayed or set is symbolic,
2665 otherwise it is an octal number.
2667 Symbolic masks are like those used by \fIchmod\fP(1):
2669 [\fBugoa\fP]{{\fB=+-\fP}{\fBrwx\fP}*}+[\fB,\fP...]
2671 in which the first group of characters is the \fIwho\fP part, the second
2672 group is the \fIop\fP part, and the last group is the \fIperm\fP part.
2673 The \fIwho\fP part specifies which part of the umask is to be modified.
2674 The letters mean:
2676 .IP \fBu\fP
2677 the user permissions
2678 .IP \fBg\fP
2679 the group permissions
2680 .IP \fBo\fP
2681 the other permissions (non-user, non-group)
2682 .IP \fBa\fP
2683 all permissions (user, group and other)
2686 The \fIop\fP part indicates how the \fIwho\fP permissions are to be modified:
2688 .IP \fB=\fP
2690 .IP \fB+\fP
2691 added to
2692 .IP \fB\-\fP
2693 removed from
2696 The \fIperm\fP part specifies which permissions are to be set, added or removed:
2698 .IP \fBr\fP
2699 read permission
2700 .IP \fBw\fP
2701 write permission
2702 .IP \fBx\fP
2703 execute permission
2706 When symbolic masks are used, they describe what permissions may
2707 be made available (as opposed to octal masks in which a set bit means
2708 the corresponding bit is to be cleared).
2709 Example: `ug=rwx,o=' sets the mask so files will not be readable, writable
2710 or executable by `others', and is equivalent (on most systems) to the octal
2711 mask `07'.
2713 .\"}}}
2714 .\"{{{  unalias [-adt] name ...
2715 .IP "\fBunalias\fP [\fB\-adt\fP] [\fIname1\fP ...]"
2716 The aliases for the given names are removed.
2717 If the \fB\-a\fP option is used, all aliases are removed.
2718 If the \fB\-t\fP or \fB\-d\fP options are used, the indicated operations
2719 are carried out on tracked or directory aliases, respectively.
2720 .\"}}}
2721 .\"{{{  unset [-fv] parameter ...
2722 .IP "\fBunset\fP [\fB\-fv\fP] \fIparameter\fP ..."
2723 Unset the named parameters (\fB\-v\fP, the default) or functions (\fB\-f\fP).
2724 The exit status is non-zero if any of the parameters were already unset,
2725 zero otherwise.
2726 .\"}}}
2727 .\"{{{  wait [job]
2728 .IP "\fBwait\fP [\fIjob\fP]"
2729 Wait for the specified job(s) to finish.
2730 The exit status of wait is that of the last specified job:
2731 if the last job is killed by a signal, the exit status is 128 + the
2732 number of the signal (see \fBkill \-l\fP \fIexit-status\fP above); if the last
2733 specified job can't be found (because it never existed, or had already
2734 finished), the exit status of wait is 127.
2735 See Job Control below for the format of \fIjob\fP.
2736 \fBWait\fP will return if a signal for which a trap has been set is received,
2737 or if a HUP, INT or QUIT signal is received.
2739 If no jobs are specified, \fBwait\fP waits for all currently running jobs
2740 (if any) to finish and exits with a zero status.
2741 If job monitoring is enabled, the completion status of jobs is
2742 printed (this is not the case when jobs are explicitly specified).
2743 .\"}}}
2744 .\"{{{  whence [-pv] [name ...]
2745 .IP "\fBwhence\fP [\fB\-pv\fP] [name ...]"
2746 For each name, the type of command is listed (reserved word, built-in, alias,
2747 function, tracked alias or executable).
2748 If the \fB\-p\fP option is used, a path search done even if \fIname\fP
2749 is a reserved word, alias, \fIetc.\fP
2750 Without the \fB\-v\fP option, \fBwhence\fP is similar to \fBcommand \-v\fP
2751 except that \fBwhence\fP will find reserved words and won't print aliases
2752 as alias commands;
2753 with the \fB\-v\fP option, \fBwhence\fP is the same as \fBcommand \-V\fP.
2754 Note that for \fBwhence\fP, the \fB\-p\fP option does not affect the search
2755 path used, as it does for \fBcommand\fP.
2756 If the type of one or more of the names could not be determined, the
2757 exit status is non-zero.
2758 .\"}}}
2759 .\"}}}
2760 .\"{{{  job control (and its built-in commands)
2761 .SS "Job Control"
2762 Job control refers to the shell's ability to monitor and control \fBjobs\fP,
2763 which are processes or groups of processes created for commands or pipelines.
2764 At a minimum, the shell keeps track of the status of the background
2765 (\fIi.e.\fP, asynchronous) jobs that currently exist; this information can be
2766 displayed using the \fBjobs\fP command.
2767 If job control is fully enabled (using \fBset \-m\fP or
2768 \fBset \-o monitor\fP), as it is for interactive shells,
2769 the processes of a job are placed in their own process group,
2770 foreground jobs can be stopped by typing the suspend character from the
2771 terminal (normally ^Z),
2772 jobs can be restarted in either the foreground
2773 or background, using the \fBfg\fP and \fBbg\fP commands, respectively,
2774 and the state of the terminal is saved or restored when a foreground
2775 job is stopped or restarted, respectively.
2777 Note that only commands that create processes (\fIe.g.\fP,
2778 asynchronous commands, subshell commands, and non-built-in,
2779 non-function commands) can be stopped; commands like \fBread\fP cannot be.
2781 When a job is created, it is assigned a job-number.
2782 For interactive shells, this number is printed inside \fB[\fP..\fB]\fP,
2783 followed by the process-ids of the processes in the job when an asynchronous
2784 command is run.
2785 A job may be referred to in \fBbg\fP, \fBfg\fP, \fBjobs\fP, \fBkill\fP and
2786 \fBwait\fP commands either by the process id of the last process in the
2787 command pipeline (as stored in the \fB$!\fP parameter) or by prefixing the
2788 job-number with a percent sign (\fB%\fP).
2789 Other percent sequences can also be used to refer to jobs:
2792 expand;
2793 afB lw(4.5i).
2794 %+      T{
2795 The most recently stopped job, or, if there are no stopped jobs, the oldest
2796 running job.
2798 %%\fR, \fP%     T{
2799 Same as \fB%+\fP.
2801 %\-     T{
2802 The job that would be the \fB%+\fP job, if the later did not exist.
2804 %\fIn\fP        T{
2805 The job with job-number \fIn\fP.
2807 %?\fIstring\fP  T{
2808 The job containing the string \fIstring\fP (an error occurs if multiple jobs
2809 are matched).
2811 %\fIstring\fP   T{
2812 The job starting with string \fIstring\fP (an error occurs if multiple jobs
2813 are matched).
2817 When a job changes state (\fIe.g.\fP, a background job finishes or foreground
2818 job is stopped), the shell prints the following status information:
2820 \fB[\fP\fInumber\fP\fB]\fP \fIflag status command\fP
2822 where
2823 .IP "\ \fInumber\fP"
2824 is the job-number of the job.
2825 .IP "\ \fIflag\fP"
2826 is \fB+\fP or \fB-\fP if the job is the \fB%+\fP or \fB%-\fP job,
2827 respectively, or space if it is neither.
2828 .IP "\ \fIstatus\fP"
2829 indicates the current state of the job and can be
2831 .IP "\fBRunning\fP"
2832 the job has neither stopped or exited (note that running does not
2833 necessarily mean consuming CPU time \(em the process could be blocked waiting
2834 for some event).
2835 .IP "\fBDone\fP [\fB(\fP\fInumber\fP\fB)\fP]"
2836 the job exited.
2837 \fInumber\fP is the exit status of the job, which is
2838 omitted if the status is zero.
2839 .IP "\fBStopped\fP [\fB(\fP\fIsignal\fP\fB)\fP]"
2840 the job was stopped by the indicated \fIsignal\fP (if no signal is given,
2841 the job was stopped by SIGTSTP).
2842 .IP "\fIsignal-description\fP [\fB(core dumped)\fP]"
2843 the job was killed by a signal (\fIe.g.\fP, Memory\ fault,
2844 Hangup, \fIetc.\fP \(em use
2845 \fBkill \-l\fP for a list of signal descriptions).
2846 The \fB(core\ dumped)\fP message indicates the process created a core file.
2848 .IP "\ \fIcommand\fP"
2849 is the command that created the process.
2850 If there are multiple processes in the job, then each process will
2851 have a line showing its \fIcommand\fP and possibly its \fIstatus\fP,
2852 if it is different from the status of the previous process.
2854 When an attempt is made to exit the shell while there are jobs in
2855 the stopped state, the shell warns the user that there are stopped jobs
2856 and does not exit.
2857 If another attempt is immediately made to exit the shell, the stopped
2858 jobs are sent a \fBHUP\fP signal and the shell exits.
2859 Similarly, if the \fBnohup\fP option is not set and there are running
2860 jobs when an attempt is made to exit a login shell, the shell warns the
2861 user and does not exit.
2862 If another attempt is immediately made to exit the shell, the running
2863 jobs are sent a \fBHUP\fP signal and the shell exits.
2864 .\"}}}
2865 .\"{{{  Interactive Input Line Editing
2866 .ksh(
2867 .\"{{{  introduction
2868 .SS "Interactive Input Line Editing"
2869 The shell supports three modes of reading command lines from a tty
2870 in an interactive session.
2871 Which is used is controlled by the \fBemacs\fP, \fBgmacs\fP and \fBvi\fP
2872 \fBset\fP options (at most one of these can be set at once).
2873 If none of these options is enabled, the shell simply reads lines
2874 using the normal tty driver.
2875 If the \fBemacs\fP or \fBgmacs\fP option is set, the shell allows
2876 emacs like editing of the command; similarly, if the \fBvi\fP option
2877 is set, the shell allows vi like editing of the command.
2878 These modes are described in detail in the following sections.
2879 .\"}}}
2880 .\"{{{  display
2882 In these editing modes, if a line is longer that the screen width
2883 (see \fBCOLUMNS\fP parameter),
2884 a \fB>\fP, \fB+\fP or \fB<\fP character is displayed in the last column
2885 indicating that there are more characters after, before and after, or
2886 before the current position, respectively.
2887 The line is scrolled horizontally as necessary.
2888 .\"}}}
2889 .\"{{{  Emacs Editing Mode
2890 .SS "Emacs Editing Mode"
2891 When the \fBemacs\fP option is set, interactive input line editing is
2892 enabled.
2893 \fBWarning\fP: This mode is slightly different from the emacs
2894 mode in the original Korn shell and the 8th bit is stripped in emacs mode.
2895 In this mode various editing commands (typically bound to one or more
2896 control characters) cause immediate actions without waiting for a
2897 new-line.
2898 Several editing commands are bound to particular control
2899 characters when the shell is invoked; these bindings can be changed
2900 using the following commands:
2901 .\"{{{  bind
2902 .IP \fBbind\fP
2903 The current bindings are listed.
2904 .\"}}}
2905 .\"{{{  bind string=[editing-command]
2906 .IP "\fBbind\fP \fIstring\fP\fB=\fP[\fIediting-command\fP]"
2907 The specified editing command is bound to the given \fBstring\fP, which
2908 should consist of a control character (which may be written using caret
2909 notation \fB^\fP\fIX\fP), optionally preceded by one of the two prefix
2910 characters.
2911 Future input of the \fIstring\fP will cause the editing
2912 command to be immediately invoked.
2913 Note that although only two prefix
2914 characters (usually ESC and ^X) are supported, some multi-character
2915 sequences can be supported.
2916 The following binds the arrow keys on
2917 an ANSI terminal, or xterm (these are in the default bindings).
2918 Of course some escape sequences won't work out quite this nicely:
2921 \fBbind '^[['=prefix\-2
2923 bind '^XA'=up\-history
2925 bind '^XB'=down\-history
2927 bind '^XC'=forward\-char
2929 bind '^XD'=backward\-char\fP
2931 .\"}}}
2932 .\"{{{  bind -l
2933 .IP "\fBbind \-l\fP"
2934 Lists the names of the functions to which keys may be bound.
2935 .\"}}}
2936 .\"{{{  bind -m string=[substitute]
2937 .IP "\fBbind \-m\fP \fIstring\fP\fB=\fP[\fIsubstitute\fP]"
2938 The specified input \fIstring\fP will afterwards be immediately
2939 replaced by the given \fIsubstitute\fP string, which may contain
2940 editing commands.
2941 .\"}}}
2943 The following is a list of editing commands available.
2944 Each description starts with the name of the command,
2945 a \fIn\fP, if the command can be prefixed with a count,
2946 and any keys the command is bound to by default (written using
2947 caret notation, \fIe.g.\fP, ASCII ESC character is written as ^[).
2948 A count prefix for a command is entered using the sequence
2949 \fB^[\fP\fIn\fP, where \fIn\fP is a sequence of 1 or more digits;
2950 unless otherwise specified, if a count is omitted, it defaults to 1.
2951 Note that editing command names are
2952 used only with the \fBbind\fP command.
2953 Furthermore, many editing
2954 commands are useful only on terminals with a visible cursor.
2955 The default bindings were chosen to resemble corresponding EMACS key
2956 bindings.
2957 The users tty characters (\fIe.g.\fP, ERASE) are bound to
2958 reasonable substitutes and override the default bindings.
2959 .\"{{{  abort ^G
2960 .IP "\fBabort ^G\fP"
2961 Useful as a response to a request for a \fBsearch-history\fP pattern in
2962 order to abort the search.
2963 .\"}}}
2964 .\"{{{  auto-insert n
2965 .IP "\fBauto-insert\fP \fIn\fP"
2966 Simply causes the character to appear as literal input.
2967 Most ordinary characters are bound to this.
2968 .\"}}}
2969 .\"{{{  backward-char   n ^B
2970 .IP "\fBbackward-char\fP  \fIn\fP \fB^B\fP"
2971 Moves the cursor backward \fIn\fP characters.
2972 .\"}}}
2973 .\"{{{  backward-word  n ^[B
2974 .IP "\fBbackward-word\fP  \fIn\fP \fB^[B\fP"
2975 Moves the cursor backward to the beginning of a word; words consist
2976 of alphanumerics, underscore (_) and dollar ($).
2977 .\"}}}
2978 .\"{{{  beginning-of-history ^[<
2979 .IP "\fBbeginning-of-history ^[<\fP"
2980 Moves to the beginning of the history.
2981 .\"}}}
2982 .\"{{{  beginning-of-line ^A
2983 .IP "\fBbeginning-of-line ^A\fP"
2984 Moves the cursor to the beginning of the edited input line.
2985 .\"}}}
2986 .\"{{{  capitalize-word n ^[c, ^[C
2987 .IP "\fBcapitalize-word\fP \fIn\fP \fB^[c\fP, \fB^[C\fP"
2988 Uppercase the first character in the next \fIn\fP words,
2989 leaving the cursor past the end of the last word.
2990 .\"}}}
2991 .\"{{{  comment ^[#
2992 If the current line does not begin with a comment character, one
2993 is added at the beginning of the line and the line is entered (as if
2994 return had been pressed), otherwise the existing comment characters
2995 are removed and the cursor is placed at the beginning of the line.
2996 .\"}}}
2997 .\"{{{  complete ^[^[
2998 .IP "\fBcomplete ^[^[\fP"
2999 .IP "\fBcomplete ^I\fP"
3000 Automatically completes as much as is unique of the command name
3001 or the file name containing the cursor.
3002 If the entire remaining command
3003 or file name is unique a space is printed after its completion, unless
3004 it is a directory name in which case \fB/\fP is appended.
3005 If there is no command or file name with the current partial word as its
3006 prefix, a bell character is output (usually causing a audio beep).
3007 .\"}}}
3008 .\"{{{  complete-command ^X^[
3009 .IP "\fBcomplete-command ^X^[\fP"
3010 Automatically completes as much as is unique of the command name
3011 having the partial word up to the cursor as its prefix, as in the
3012 \fBcomplete\fP command described above.
3013 .\"}}}
3014 .\"{{{  complete-file ^[^X
3015 .IP "\fBcomplete-file ^[^X\fP"
3016 Automatically completes as much as is unique of the file name having
3017 the partial word up to the cursor as its prefix, as in the
3018 \fBcomplete\fP command described above.
3019 .\"}}}
3020 .\"{{{  complete-list ^[=
3021 .IP "\fBcomplete-list ^[=\fP"
3022 List the possible completions for the current word.
3023 .\"}}}
3024 .\"{{{  delete-char-backward n ERASE, ^?, ^H
3025 .IP "\fBdelete-char-backward\fP \fIn\fP \fBERASE\fP, \fB^?\fP, \fB^H\fP"
3026 Deletes \fIn\fP characters before the cursor.
3027 .\"}}}
3028 .\"{{{  delete-char-forward n
3029 .IP "\fBdelete-char-forward\fP \fIn\fP"
3030 Deletes \fIn\fP characters after the cursor.
3031 .\"}}}
3032 .\"{{{  delete-word-backward n ^[ERASE, ^[^?, ^[^H, ^[h
3033 .IP "\fBdelete-word-backward\fP \fIn\fP \fB^[ERASE\fP, \fB^[^?\fP, \fB^[^H\fP, \fB^[h\fP"
3034 Deletes \fIn\fP words before the cursor.
3035 .\"}}}
3036 .\"{{{  delete-word-forward n ^[d
3037 .IP "\fBdelete-word-forward\fP \fIn\fP \fB^[d\fP"
3038 Deletes characters after the cursor up to the end of \fIn\fP words.
3039 .\"}}}
3040 .\"{{{  down-history n ^N
3041 .IP "\fBdown-history\fP \fIn\fP \fB^N\fP"
3042 Scrolls the history buffer forward \fIn\fP lines (later).
3043 Each input line
3044 originally starts just after the last entry in the history buffer, so
3045 \fBdown-history\fP is not useful until either \fBsearch-history\fP or
3046 \fBup-history\fP has been performed.
3047 .\"}}}
3048 .\"{{{  downcase-word n ^[L, ^[l
3049 .IP "\fBdowncase-word\fP \fIn\fP \fB^[L\fP, \fB^[l\fP"
3050 Lowercases the next \fIn\fP words.
3051 .\"}}}
3052 .\"{{{  end-of-history ^[>
3053 .IP "\fBend-of-history ^[>\fP"
3054 Moves to the end of the history.
3055 .\"}}}
3056 .\"{{{  end-of-line ^E
3057 .IP "\fBend-of-line ^E\fP"
3058 Moves the cursor to the end of the input line.
3059 .\"}}}
3060 .\"{{{  eot ^_
3061 .IP "\fBeot ^_\fP"
3062 Acts as an end-of-file; this is useful because edit-mode input disables
3063 normal terminal input canonicalization.
3064 .\"}}}
3065 .\"{{{  eot-or-delete n ^D
3066 .IP "\fBeot-or-delete\fP \fIn\fP \fB^D\fP"
3067 Acts as eot if alone on a line; otherwise acts as delete-char-forward.
3068 .\"}}}
3069 .\"{{{  error
3070 .IP "\fBerror\fP"
3071 Error (ring the bell).
3072 .\"}}}
3073 .\"{{{  exchange-point-and-mark ^X^X
3074 .IP "\fBexchange-point-and-mark ^X^X\fP"
3075 Places the cursor where the mark is, and sets the mark to where the
3076 cursor was.
3077 .\"}}}
3078 .\"{{{  expand-file ^[*
3079 .IP "\fBexpand-file ^[*\fP"
3080 Appends a * to the current word and replaces the word with
3081 the result of performing file globbing on the word.
3082 If no files match the pattern, the bell is rung.
3083 .\"}}}
3084 .\"{{{  forward-char n ^F
3085 .IP "\fBforward-char\fP \fIn\fP \fB^F\fP"
3086 Moves the cursor forward \fIn\fP characters.
3087 .\"}}}
3088 .\"{{{  forward-word n ^[f
3089 .IP "\fBforward-word\fP \fIn\fP \fB^[f\fP"
3090 Moves the cursor forward to the end of the \fIn\fPth word.
3091 .\"}}}
3092 .\"{{{  goto-history n ^[g
3093 .IP "\fBgoto-history\fP \fIn\fP \fB^[g\fP"
3094 Goes to history number \fIn\fP.
3095 .\"}}}
3096 .\"{{{  kill-line KILL
3097 .IP "\fBkill-line KILL\fP"
3098 Deletes the entire input line.
3099 .\"}}}
3100 .\"{{{  kill-region ^W
3101 .IP "\fBkill-region ^W\fP"
3102 Deletes the input between the cursor and the mark.
3103 .\"}}}
3104 .\"{{{  kill-to-eol n ^K
3105 .IP "\fBkill-to-eol\fP \fIn\fP \fB^K\fP"
3106 Deletes the input from the cursor to the end of the line if \fIn\fP is
3107 not specified, otherwise deletes characters between the cursor and
3108 column \fIn\fP.
3109 .\"}}}
3110 .\"{{{  list ^[?
3111 .IP "\fBlist ^[?\fP"
3112 Prints a sorted, columnated list of command names or file names
3113 (if any) that can complete the partial word containing the cursor.
3114 Directory names have \fB/\fP appended to them.
3115 .\"}}}
3116 .\"{{{  list-command ^X?
3117 .IP "\fBlist-command ^X?\fP"
3118 Prints a sorted, columnated list of command names (if any) that
3119 can complete the partial word containing the cursor.
3120 .\"}}}
3121 .\"{{{  list-file ^X^Y
3122 .IP "\fBlist-file ^X^Y\fP"
3123 Prints a sorted, columnated list of file names (if any) that can
3124 complete the partial word containing the cursor.
3125 File type indicators
3126 are appended as described under \fBlist\fP above.
3127 .\"}}}
3128 .\"{{{  newline ^J and ^M
3129 .IP "\fBnewline ^J\fP, \fB^M\fP"
3130 Causes the current input line to be processed by the shell.
3131 The current cursor position may be anywhere on the line.
3132 .\"}}}
3133 .\"{{{  newline-and-next ^O
3134 .IP "\fBnewline-and-next ^O\fP"
3135 Causes the current input line to be processed by the shell, and
3136 the next line from history becomes the current line.
3137 This is only useful after an up-history or search-history.
3138 .\"}}}
3139 .\"{{{  no-op QUIT
3140 .IP "\fBno-op QUIT\fP"
3141 This does nothing.
3142 .\"}}}
3143 .\"{{{  prefix-1 ^[
3144 .IP "\fBprefix-1 ^[\fP"
3145 Introduces a 2-character command sequence.
3146 .\"}}}
3147 .\"{{{  prefix-2 ^X and ^[[
3148 .IP "\fBprefix-2 ^X\fP"
3149 .IP "\fBprefix-2 ^[[\fP"
3150 Introduces a 2-character command sequence.
3151 .\"}}}
3152 .\"{{{  prev-hist-word ^[. ^[_
3153 .IP "\fBprev-hist-word\fP \fIn\fP \fB^[.\fP, \fB^[_\fP"
3154 The last (\fIn\fPth) word of the previous command is inserted at the cursor.
3155 .\"}}}
3156 .\"{{{  quote ^^
3157 .IP "\fBquote ^^\fP"
3158 The following character is taken literally rather than as an editing
3159 command.
3160 .\"}}}
3161 .\"{{{  redraw ^L
3162 .IP "\fBredraw ^L\fP"
3163 Reprints the prompt string and the current input line.
3164 .\"}}}
3165 .\"{{{  search-character-backward n ^[^]
3166 .IP "\fBsearch-character-backward\fP \fIn\fP \fB^[^]\fP"
3167 Search backward in the current line for the \fIn\fPth occurrence of the
3168 next character typed.
3169 .\"}}}
3170 .\"{{{  search-character-forward n ^]
3171 .IP "\fBsearch-character-forward\fP \fIn\fP \fB^]\fP"
3172 Search forward in the current line for the \fIn\fPth occurrence of the
3173 next character typed.
3174 .\"}}}
3175 .\"{{{  search-history ^R
3176 .IP "\fBsearch-history ^R\fP"
3177 Enter incremental search mode.
3178 The internal history list is searched
3179 backwards for commands matching the input.
3180 An initial \fB^\fP in the search string anchors the search.
3181 The abort key will leave search mode.
3182 Other commands will be executed after leaving search mode.
3183 Successive \fBsearch-history\fP commands continue searching backward to
3184 the next previous occurrence of the pattern.
3185 The history buffer retains only a
3186 finite number of lines; the oldest are discarded as necessary.
3187 .\"}}}
3188 .\"{{{  set-mark-command ^[<space>
3189 .IP "\fBset-mark-command ^[\fP<space>"
3190 Set the mark at the cursor position.
3191 .\"}}}
3192 .\"{{{  stuff
3193 .IP "\fBstuff\fP"
3194 On systems supporting it, pushes the bound character back onto the
3195 terminal input where it may receive special processing by the terminal
3196 handler.
3197 This is useful for the BRL \fB^T\fP mini-systat feature, for example.
3198 .\"}}}
3199 .\"{{{  stuff-reset
3200 .IP "\fBstuff-reset\fP"
3201 Acts like \fBstuff\fP, then aborts input the same as an interrupt.
3202 .\"}}}
3203 .\"{{{  transport-chars ^T
3204 .IP "\fBtranspose-chars ^T\fP"
3205 If at the end of line, or if the \fBgmacs\fP option is set,
3206 this exchanges the two previous characters; otherwise, it
3207 exchanges the previous and current characters and moves the cursor
3208 one character to the right.
3209 .\"}}}
3210 .\"{{{  up-history n ^P
3211 .IP "\fBup-history\fP \fIn\fP \fB^P\fP"
3212 Scrolls the history buffer backward \fIn\fP lines (earlier).
3213 .\"}}}
3214 .\"{{{  upcase-word n ^[U, ^[u
3215 .IP "\fBupcase-word\fP \fIn\fP \fB^[U\fP, \fB^[u\fP"
3216 Uppercases the next \fIn\fP words.
3217 .\"}}}
3218 .\"{{{  version ^V
3219 .IP "\fBversion ^V\fP"
3220 Display the version of ksh.
3221 The current edit buffer is restored as soon
3222 as any key is pressed (the key is then processed, unless it is a space).
3223 .\"}}}
3224 .\"{{{  yank ^Y
3225 .IP "\fByank ^Y\fP"
3226 Inserts the most recently killed text string at the current cursor position.
3227 .\"}}}
3228 .\"{{{  yank-pop ^[y
3229 .IP "\fByank-pop ^[y\fP"
3230 Immediately after a \fByank\fP, replaces the inserted text string with
3231 the next previous killed text string.
3232 .\"}}}
3233 .\"}}}
3234 .\"{{{  Vi Editing Mode
3235 .\"{{{  introduction
3236 .SS "Vi Editing Mode"
3237 The vi command line editor in ksh has basically the same commands as the
3238 vi editor (see \fIvi\fP(1)), with the following exceptions:
3239 .nr P2 \n(PD
3240 .IP \ \ \(bu
3241 you start out in insert mode,
3242 .IP \ \ \(bu
3243 there are file name and command completion commands
3244 (\fB=\fP, \fB\e\fP, \fB*\fP, \fB^X\fP, \fB^E\fP, \fB^F\fP and,
3245 optionally, \fB<tab>\fP),
3246 .IP \ \ \(bu
3247 the \fB_\fP command is different (in ksh it is the last argument command,
3248 in vi it goes to the start of the current line),
3249 .IP \ \ \(bu
3250 the \fB/\fP and \fBG\fP commands move in the opposite direction as the \fBj\fP
3251 command
3252 .IP \ \ \(bu
3253 and commands which don't make sense in a single line editor are not available
3254 (\fIe.g.\fP, screen movement commands, ex \fB:\fP commands, \fIetc.\fP).
3255 .nr PD \n(P2
3257 Note that the \fB^X\fP stands for control-X; also \fB<esc>\fP, \fB<space>\fP
3258 and \fB<tab>\fP are used for escape, space and tab, respectively (no kidding).
3259 .\"}}}
3260 .\"{{{  modes
3262 Like vi, there are two modes: insert mode and command mode.
3263 In insert mode, most characters are simply put in the buffer at the
3264 current cursor position as they are typed, however, some characters
3265 are treated specially.
3266 In particular, the following characters are taken from current tty settings
3267 (see \fIstty\fP(1)) and have their usual meaning (normal values are in
3268 parentheses):
3269 kill (\fB^U\fP), erase (\fB^?\fP), werase (\fB^W\fP), eof (\fB^D\fP),
3270 intr (\fB^C\fP) and quit (\fB^\e\fP).
3271 In addition to the above, the following characters are also treated
3272 specially in insert mode:
3274 expand;
3275 afB lw(4.5i).
3276 ^H      T{
3277 erases previous character
3279 ^V      T{
3280 literal next: the next character typed is not treated specially (can be
3281 used to insert the characters being described here)
3283 ^J ^M   T{
3284 end of line: the current line is read, parsed and executed by the shell
3286 <esc>   T{
3287 puts the editor in command mode (see below)
3289 ^E      T{
3290 command and file name enumeration (see below)
3292 ^F      T{
3293 command and file name completion (see below).
3294 If used twice in a row, the list of possible completions is displayed;
3295 if used a third time, the completion is undone.
3297 ^X      T{
3298 command and file name expansion (see below)
3300 <tab>   T{
3301 optional file name and command completion (see \fB^F\fP above), enabled with
3302 \fBset \-o vi-tabcomplete\fP
3305 .\"}}}
3306 .\"{{{  command mode
3308 In command mode, each character is interpreted as a command.
3309 Characters that don't correspond to commands, are illegal combinations of
3310 commands or are commands that can't be carried out all cause beeps.
3311 In the following command descriptions, a \fIn\fP indicates the
3312 command may be prefixed by a number (\fIe.g.\fP, \fB10l\fP moves right 10
3313 characters); if no number prefix is used, \fIn\fP is assumed to be 1
3314 unless otherwise specified.
3315 The term `current position' refers to the position between the cursor
3316 and the character preceding the cursor.
3317 A `word' is a sequence of letters, digits and underscore characters or a
3318 sequence of non-letter, non-digit, non-underscore, non-white-space characters
3319 (\fIe.g.\fP, ab2*&^ contains two words) and a `big-word' is a sequence of
3320 non-white-space characters.
3321 .\"{{{  Special ksh vi commands
3322 .IP "Special ksh vi commands"
3323 The following commands are not in, or are different from, the normal vi file
3324 editor:
3326 .IP "\fIn\fP\fB_\fP"
3327 insert a space followed by the \fIn\fPth big-word from the last command in the
3328 history at the current position and enter insert mode; if \fIn\fP is not
3329 specified, the last word is inserted.
3330 .IP "\fB#\fP"
3331 insert the comment character (\fB#\fP) at the start of the current line and
3332 return the line to the shell (equivalent to \fBI#^J\fP).
3333 .IP "\fIn\fP\fBg\fP"
3334 like \fBG\fP, except if \fIn\fP is not specified, it goes to the most recent
3335 remembered line.
3336 .IP "\fIn\fP\fBv\fP"
3337 edit line \fIn\fP using the vi editor;
3338 if \fIn\fP is not specified, the current line is edited.
3339 The actual command executed is
3340 `\fBfc \-e ${VISUAL:-${EDITOR:-vi}}\fP \fIn\fP'.
3341 .IP "\fB*\fP and \fB^X\fP"
3342 command or file name expansion is applied to the current big-word
3343 (with an appended *, if the word contains no file globing characters) - the
3344 big-word is replaced with the resulting words.
3345 If the current big-word is the first on the line (or follows one
3346 of the following characters: \fB;\fP, \fB|\fP, \fB&\fP, \fB(\fP, \fB)\fP)
3347 and does not contain a slash (\fB/\fP) then command expansion is done,
3348 otherwise file name expansion is done.
3349 Command expansion will match the big-word against all aliases, functions
3350 and built-in commands as well as any executable files found by searching
3351 the directories in the \fBPATH\fP parameter.
3352 File name expansion matches the big-word against the files in the
3353 current directory.
3354 After expansion, the cursor is placed just past the last word and the editor
3355 is in insert mode.
3356 .IP "\fIn\fP\fB\e\fP, \fIn\fP\fB^F\fP, \fIn\fP\fB<tab>\fP and \fIn\fP\fB<esc>\fP"
3357 command/file name completion:
3358 replace the current big-word with the longest unique
3359 match obtained after performing command/file name expansion.
3360 \fB<tab>\fP is only recognized if the \fBvi-tabcomplete\fP option is set,
3361 while \fB<esc>\fP is only recognized if the \fBvi-esccomplete\fP option
3362 is set (see \fBset \-o\fP).
3363 If \fIn\fP is specified, the \fIn\fPth possible
3364 completion is selected (as reported by the command/file name enumeration
3365 command).
3366 .IP "\fB=\fP and \fB^E\fP"
3367 command/file name enumeration: list all the commands or files that match
3368 the current big-word.
3369 .IP "\fB^V\fP"
3370 display the version of pdksh; it is displayed until another key is pressed
3371 (this key is ignored).
3372 .IP "\fB@\fP\fIc\fP"
3373 macro expansion: execute the commands found in the alias _\fIc\fP.
3375 .\"}}}
3376 .\"{{{  Intra-line movement commands
3377 .IP "Intra-line movement commands"
3379 .IP "\fIn\fP\fBh\fP and \fIn\fP\fB^H\fP"
3380 move left \fIn\fP characters.
3381 .IP "\fIn\fP\fBl\fP and \fIn\fP\fB<space>\fP"
3382 move right \fIn\fP characters.
3383 .IP "\fB0\fP"
3384 move to column 0.
3385 .IP "\fB^\fP"
3386 move to the first non white-space character.
3387 .IP "\fIn\fP\fB|\fP"
3388 move to column \fIn\fP.
3389 .IP "\fB$\fP"
3390 move to the last character.
3391 .IP "\fIn\fP\fBb\fP"
3392 move back \fIn\fP words.
3393 .IP "\fIn\fP\fBB\fP"
3394 move back \fIn\fP big-words.
3395 .IP "\fIn\fP\fBe\fP"
3396 move forward to the end the word, \fIn\fP times.
3397 .IP "\fIn\fP\fBE\fP"
3398 move forward to the end the big-word, \fIn\fP times.
3399 .IP "\fIn\fP\fBw\fP"
3400 move forward \fIn\fP words.
3401 .IP "\fIn\fP\fBW\fP"
3402 move forward \fIn\fP big-words.
3403 .IP "\fB%\fP"
3404 find match: the editor looks forward for the nearest parenthesis,
3405 bracket or brace and then moves the to the matching parenthesis, bracket or
3406 brace.
3407 .IP "\fIn\fP\fBf\fP\fIc\fP"
3408 move forward to the \fIn\fPth occurrence of the character \fIc\fP.
3409 .IP "\fIn\fP\fBF\fP\fIc\fP"
3410 move backward to the \fIn\fPth occurrence of the character \fIc\fP.
3411 .IP "\fIn\fP\fBt\fP\fIc\fP"
3412 move forward to just before the \fIn\fPth occurrence of the character \fIc\fP.
3413 .IP "\fIn\fP\fBT\fP\fIc\fP"
3414 move backward to just before the \fIn\fPth occurrence of the character \fIc\fP.
3415 .IP "\fIn\fP\fB;\fP"
3416 repeats the last \fBf\fP, \fBF\fP, \fBt\fP or \fBT\fP command.
3417 .IP "\fIn\fP\fB,\fP"
3418 repeats the last \fBf\fP, \fBF\fP, \fBt\fP or \fBT\fP command, but moves
3419 in the opposite direction.
3421 .\"}}}
3422 .\"{{{  Inter-line movement commands
3423 .IP "Inter-line movement commands"
3425 .IP "\fIn\fP\fBj\fP and \fIn\fP\fB+\fP and \fIn\fP\fB^N\fP"
3426 move to the \fIn\fPth next line in the history.
3427 .IP "\fIn\fP\fBk\fP and \fIn\fP\fB-\fP and \fIn\fP\fB^P\fP"
3428 move to the \fIn\fPth previous line in the history.
3429 .IP "\fIn\fP\fBG\fP"
3430 move to line \fIn\fP in the history; if \fIn\fP is not specified, the
3431 number first remembered line is used.
3432 .IP "\fIn\fP\fBg\fP"
3433 like \fBG\fP, except if \fIn\fP is not specified, it goes to the most recent
3434 remembered line.
3435 .IP "\fIn\fP\fB/\fP\fIstring\fP"
3436 search backward through the history for the \fIn\fPth line containing
3437 \fIstring\fP; if \fIstring\fP starts with \fB^\fP, the remainder of the
3438 string must appear at the start of the history line for it to match.
3439 .IP "\fIn\fP\fB?\fP\fIstring\fP"
3440 same as \fB/\fP, except it searches forward through the history.
3441 .IP "\fIn\fP\fBn\fP"
3442 search for the \fIn\fPth occurrence of the last search string; the
3443 direction of the search is the same as the last search.
3444 .IP "\fIn\fP\fBN\fP"
3445 search for the \fIn\fPth occurrence of the last search string; the
3446 direction of the search is the opposite of the last search.
3448 .\"}}}
3449 .\"{{{  Edit commands
3450 .IP "Edit commands"
3452 .IP "\fIn\fP\fBa\fP"
3453 append text \fIn\fP times: goes into insert mode just after the current
3454 position.
3455 The append is only replicated if command mode is re-entered (\fIi.e.\fP,
3456 <esc> is used).
3457 .IP "\fIn\fP\fBA\fP"
3458 same as \fBa\fP, except it appends at the end of the line.
3459 .IP "\fIn\fP\fBi\fP"
3460 insert text \fIn\fP times: goes into insert mode at the current
3461 position.
3462 The insertion is only replicated if command mode is re-entered (\fIi.e.\fP,
3463 <esc> is used).
3464 .IP "\fIn\fP\fBI\fP"
3465 same as \fBi\fP, except the insertion is done just before the first non-blank
3466 character.
3467 .IP "\fIn\fP\fBs\fP"
3468 substitute the next \fIn\fP characters (\fIi.e.\fP, delete the characters
3469 and go into insert mode).
3470 .IP "\fBS\fP"
3471 substitute whole line: all characters from the first non-blank character
3472 to the end of line are deleted and insert mode is entered.
3473 .IP "\fIn\fP\fBc\fP\fImove-cmd\fP"
3474 change from the current position to the position resulting from \fIn\fP
3475 \fImove-cmd\fPs (\fIi.e.\fP, delete the indicated region and go into insert
3476 mode);
3477 if \fImove-cmd\fP is \fBc\fP, the line starting from the first non-blank
3478 character is changed.
3479 .IP "\fBC\fP"
3480 change from the current position to the end of the line (\fIi.e.\fP, delete to
3481 the end of the line and go into insert mode).
3482 .IP "\fIn\fP\fBx\fP"
3483 delete the next \fIn\fP characters.
3484 .IP "\fIn\fP\fBX\fP"
3485 delete the previous \fIn\fP characters.
3486 .IP "\fBD\fP"
3487 delete to the end of the line.
3488 .IP "\fIn\fP\fBd\fP\fImove-cmd\fP"
3489 delete from the current position to the position resulting from
3490 \fIn\fP \fImove-cmd\fPs;
3491 \fImove-cmd\fP is a movement command (see above) or \fBd\fP, in which case
3492 the current line is deleted.
3493 .IP "\fIn\fP\fBr\fP\fIc\fP"
3494 replace the next \fIn\fP characters with the character \fIc\fP.
3495 .IP "\fIn\fP\fBR\fP"
3496 replace: enter insert mode but overwrite existing characters instead of
3497 inserting before existing characters.
3498 The replacement is repeated \fIn\fP times.
3499 .IP "\fIn\fP\fB~\fP"
3500 change the case of the next \fIn\fP characters.
3501 .IP "\fIn\fP\fBy\fP\fImove-cmd\fP"
3502 yank from the current position to the position resulting from \fIn\fP
3503 \fImove-cmd\fPs into the yank buffer; if \fImove-cmd\fP is \fBy\fP, the
3504 whole line is yanked.
3505 .IP "\fBY\fP"
3506 yank from the current position to the end of the line.
3507 .IP "\fIn\fP\fBp\fP"
3508 paste the contents of the yank buffer just after the current position,
3509 \fIn\fP times.
3510 .IP "\fIn\fP\fBP\fP"
3511 same as \fBp\fP, except the buffer is pasted at the current position.
3513 .\"}}}
3514 .\"{{{  Miscellaneous vi commands
3515 .IP "Miscellaneous vi commands"
3517 .IP "\fB^J\fP and \fB^M\fP"
3518 the current line is read, parsed and executed by the shell.
3519 .IP "\fB^L\fP and \fB^R\fP"
3520 redraw the current line.
3521 .IP "\fIn\fP\fB.\fP"
3522 redo the last edit command \fIn\fP times.
3523 .IP "\fBu\fP"
3524 undo the last edit command.
3525 .IP "\fBU\fP"
3526 undo all changes that have been made to the current line.
3527 .IP "\fIintr\fP and \fIquit\fP"
3528 the interrupt and quit terminal characters cause the current line to
3529 be deleted and a new prompt to be printed.
3531 .\"Has all vi commands except:
3532 .\"    movement: { } [[ ]] ^E ^Y ^U ^D ^F ^B H L M ()
3533 .\"    tag commands: ^T ^]
3534 .\"    mark commands: m ` '
3535 .\"    named-buffer commands: " @
3536 .\"    file/shell/ex-commands: Q ZZ ^^ : ! &
3537 .\"    multi-line change commands: o O J
3538 .\"    shift commands: << >>
3539 .\"    status command: ^G
3540 .\"}}}
3541 .\"}}}
3542 .\"}}}
3543 .ksh)
3544 .\"}}}
3545 .\"}}}
3546 .\"{{{  Files
3547 .SH FILES
3548 ~/.kshrc
3550 ~/.profile
3552 /etc/profile
3554 /etc/suid_profile
3555 .\"}}}
3556 .\"{{{  Bugs
3557 .SH BUGS
3558 Any bugs in pdksh should be reported to pdksh@cs.mun.ca.
3559 Please
3560 include the version of pdksh (echo $KSH_VERSION shows it), the machine,
3561 operating system and compiler you are using and a description of how to
3562 repeat the bug (a small shell script that demonstrates the bug is
3563 best).
3564 The following, if relevant (if you are not sure, include them),
3565 can also helpful: options you are using (both options.h options and set
3566 \-o options) and a copy of your config.h (the file generated by the
3567 configure script).
3568 New versions of pdksh can be obtained from
3569 ftp://ftp.cs.mun.ca/pub/pdksh/.
3571 BTW, the most frequently reported bug is
3573 \fB echo hi | read a; echo $a\fP\ \ \ # Does not print hi
3575 I'm aware of this and there is no need to report it.
3576 .\"}}}
3577 .\"{{{  Version
3578 .SH VERSION
3579 This page documents version
3581  @(#)PD KSH v5.2.14 99/07/13.2
3582 of the public domain korn shell.
3583 .\"}}}
3584 .\"{{{  Authors
3585 .SH AUTHORS
3586 This shell is based on the public domain 7th edition Bourne shell clone by
3587 Charles Forsyth and parts of the BRL shell by Doug A.\& Gwyn, Doug Kingston,
3588 Ron Natalie, Arnold Robbins, Lou Salkind and others.
3589 The first release
3590 of pdksh was created by Eric Gisin, and it was subsequently maintained by
3591 John R.\& MacMillan (chance!john@sq.sq.com), and
3592 Simon J.\& Gerraty (sjg@zen.void.oz.au).
3593 The current maintainer is Michael Rendell (michael@cs.mun.ca).
3594 The CONTRIBUTORS file in the source distribution contains a more complete
3595 list of people and their part in the shell's development.
3596 .\"}}}
3597 .\"{{{  See also
3598 .SH "SEE ALSO"
3599 awk(1),
3600 .ksh(
3601 sh(1),
3602 .ksh)
3603 .sh(
3604 ksh(1),
3605 .sh)
3606 csh(1), ed(1), getconf(1), getopt(1), sed(1), stty(1), vi(1),
3607 dup(2), execve(2), getgid(2), getuid(2), open(2), pipe(2), wait(2),
3608 getopt(3), rand(3), signal(3), system(3),
3609 environ(7)
3611 .IR "The KornShell Command and Programming Language" ,
3612 Morris Bolsky and David Korn, 1989, ISBN 0-13-516972-0.
3614 .\" XXX ISBN missing
3615 .IR "UNIX Shell Programming" ,
3616 Stephen G.\& Kochan, Patrick H.\& Wood, Hayden.
3618 .IR "IEEE Standard for information Technology \- Portable Operating System Interface (POSIX) \- Part 2: Shell and Utilities" ,
3619 IEEE Inc, 1993, ISBN 1-55937-255-9.
3620 .\"}}}