Subversion Repositories HelenOS

Rev

Rev 2714 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2714 Rev 2927
1
.\"	$NetBSD: sh.1,v 1.40 2000/11/20 17:48:05 christos Exp $
1
.\"	$NetBSD: sh.1,v 1.40 2000/11/20 17:48:05 christos Exp $
2
.\" Copyright (c) 1991, 1993
2
.\" Copyright (c) 1991, 1993
3
.\"	The Regents of the University of California.  All rights reserved.
3
.\"	The Regents of the University of California.  All rights reserved.
4
.\"
4
.\"
5
.\" This code is derived from software contributed to Berkeley by
5
.\" This code is derived from software contributed to Berkeley by
6
.\" Kenneth Almquist.
6
.\" Kenneth Almquist.
7
.\"
7
.\"
8
.\" Redistribution and use in source and binary forms, with or without
8
.\" Redistribution and use in source and binary forms, with or without
9
.\" modification, are permitted provided that the following conditions
9
.\" modification, are permitted provided that the following conditions
10
.\" are met:
10
.\" are met:
11
.\" 1. Redistributions of source code must retain the above copyright
11
.\" 1. Redistributions of source code must retain the above copyright
12
.\"    notice, this list of conditions and the following disclaimer.
12
.\"    notice, this list of conditions and the following disclaimer.
13
.\" 2. Redistributions in binary form must reproduce the above copyright
13
.\" 2. Redistributions in binary form must reproduce the above copyright
14
.\"    notice, this list of conditions and the following disclaimer in the
14
.\"    notice, this list of conditions and the following disclaimer in the
15
.\"    documentation and/or other materials provided with the distribution.
15
.\"    documentation and/or other materials provided with the distribution.
16
.\" 3. All advertising materials mentioning features or use of this software
16
.\" 3. All advertising materials mentioning features or use of this software
17
.\"    must display the following acknowledgement:
17
.\"    must display the following acknowledgement:
18
.\"	This product includes software developed by the University of
18
.\"	This product includes software developed by the University of
19
.\"	California, Berkeley and its contributors.
19
.\"	California, Berkeley and its contributors.
20
.\" 4. Neither the name of the University nor the names of its contributors
20
.\" 4. Neither the name of the University nor the names of its contributors
21
.\"    may be used to endorse or promote products derived from this software
21
.\"    may be used to endorse or promote products derived from this software
22
.\"    without specific prior written permission.
22
.\"    without specific prior written permission.
23
.\"
23
.\"
24
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34
.\" SUCH DAMAGE.
34
.\" SUCH DAMAGE.
35
.\"
35
.\"
36
.\"	@(#)sh.1	8.6 (Berkeley) 5/4/95
36
.\"	@(#)sh.1	8.6 (Berkeley) 5/4/95
37
.\"
37
.\"
38
.Dd January 9, 1999
38
.Dd January 9, 1999
39
.Os
39
.Os
40
.Dt SH 1
40
.Dt SH 1
41
.Sh NAME
41
.Sh NAME
42
sh \- command interpreter (shell)
42
sh \- command interpreter (shell)
43
.Sh SYNOPSIS
43
.Sh SYNOPSIS
44
.Nm sh
44
.Nm sh
45
.Op Fl /+aCefnuvxIimqsVEbc
45
.Op Fl /+aCefnuvxIimqsVEbc
46
.Op Fl o Ar longname
46
.Op Fl o Ar longname
47
.Bk -words
47
.Bk -words
48
.Op Ar target ...
48
.Op Ar target ...
49
.Ek
49
.Ek
50
.Sh DESCRIPTION
50
.Sh DESCRIPTION
51
Sh is the standard command interpreter for the system. The current version
51
Sh is the standard command interpreter for the system. The current version
52
of
52
of
53
.Nm
53
.Nm
54
is in the process of being changed to conform with the
54
is in the process of being changed to conform with the
55
.Tn POSIX
55
.Tn POSIX
56
1003.2 and 1003.2a specifications for the shell.  This version has many
56
1003.2 and 1003.2a specifications for the shell.  This version has many
57
features which make it appear similar in some respects to the Korn shell,
57
features which make it appear similar in some respects to the Korn shell,
58
but it is not a Korn shell clone (see
58
but it is not a Korn shell clone (see
59
.Xr ksh 1 ) .
59
.Xr ksh 1 ) .
60
Only features designated by
60
Only features designated by
61
.Tn POSIX ,
61
.Tn POSIX ,
62
plus a few Berkeley extensions, are being incorporated into this shell.
62
plus a few Berkeley extensions, are being incorporated into this shell.
63
We expect
63
We expect
64
.Tn POSIX
64
.Tn POSIX
65
conformance by the time 4.4 BSD is released. This man page is not intended
65
conformance by the time 4.4 BSD is released. This man page is not intended
66
to be a tutorial or a complete specification of the shell.
66
to be a tutorial or a complete specification of the shell.
67
.Ss Overview
67
.Ss Overview
68
The shell is a command that reads lines from either a file or the
68
The shell is a command that reads lines from either a file or the
69
terminal, interprets them, and generally executes other commands. It is
69
terminal, interprets them, and generally executes other commands. It is
70
the program that is running when a user logs into the system (although a
70
the program that is running when a user logs into the system (although a
71
user can select a different shell with the
71
user can select a different shell with the
72
.Xr chsh 1
72
.Xr chsh 1
73
command). The shell implements a language that has flow control
73
command). The shell implements a language that has flow control
74
constructs, a macro facility that provides a variety of features in
74
constructs, a macro facility that provides a variety of features in
75
addition to data storage, along with built in history and line editing
75
addition to data storage, along with built in history and line editing
76
capabilities.  It incorporates many features to aid interactive use and
76
capabilities.  It incorporates many features to aid interactive use and
77
has the advantage that the interpretative language is common to both
77
has the advantage that the interpretative language is common to both
78
interactive and non-interactive use (shell scripts).  That is, commands
78
interactive and non-interactive use (shell scripts).  That is, commands
79
can be typed directly to the running shell or can be put into a file and
79
can be typed directly to the running shell or can be put into a file and
80
the file can be executed directly by the shell.
80
the file can be executed directly by the shell.
81
.Ss Invocation
81
.Ss Invocation
82
If no args are present and if the standard input of the shell
82
If no args are present and if the standard input of the shell
83
is connected to a terminal (or if the
83
is connected to a terminal (or if the
84
.Fl i
84
.Fl i
85
flag is set),
85
flag is set),
86
and the 
86
and the 
87
.Fl c
87
.Fl c
88
option is not present, the shell is considered an interactive shell.  An
88
option is not present, the shell is considered an interactive shell.  An
89
interactive shell generally prompts before each command and handles
89
interactive shell generally prompts before each command and handles
90
programming and command errors differently (as described below). When
90
programming and command errors differently (as described below). When
91
first starting, the shell inspects argument 0, and if it begins with a
91
first starting, the shell inspects argument 0, and if it begins with a
92
dash
92
dash
93
.Sq - ,
93
.Sq - ,
94
the shell is also considered
94
the shell is also considered
95
a login shell.  This is normally done automatically by the system
95
a login shell.  This is normally done automatically by the system
96
when the user first logs in. A login shell first reads commands
96
when the user first logs in. A login shell first reads commands
97
from the files
97
from the files
98
.Pa /etc/profile
98
.Pa /etc/profile
99
and
99
and
100
.Pa .profile
100
.Pa .profile
101
if they exist.
101
if they exist.
102
If the environment variable
102
If the environment variable
103
.Ev ENV
103
.Ev ENV
104
is set on entry to a shell, or is set in the
104
is set on entry to a shell, or is set in the
105
.Pa .profile
105
.Pa .profile
106
of a login shell, the shell next reads
106
of a login shell, the shell next reads
107
commands from the file named in
107
commands from the file named in
108
.Ev ENV .
108
.Ev ENV .
109
Therefore, a user should place commands that are to be executed only at
109
Therefore, a user should place commands that are to be executed only at
110
login time in the
110
login time in the
111
.Pa .profile
111
.Pa .profile
112
file, and commands that are executed for every shell inside the
112
file, and commands that are executed for every shell inside the
113
.Ev ENV
113
.Ev ENV
114
file.  To set the
114
file.  To set the
115
.Ev ENV
115
.Ev ENV
116
variable to some file, place the following line in your
116
variable to some file, place the following line in your
117
.Pa .profile
117
.Pa .profile
118
of your home directory
118
of your home directory
119
.Pp
119
.Pp
120
.Dl ENV=$HOME/.shinit; export ENV
120
.Dl ENV=$HOME/.shinit; export ENV
121
.Pp
121
.Pp
122
substituting for
122
substituting for
123
.Dq .shinit
123
.Dq .shinit
124
any filename you wish. Since the
124
any filename you wish. Since the
125
.Ev ENV
125
.Ev ENV
126
file is read for every invocation of the shell, including shell scripts
126
file is read for every invocation of the shell, including shell scripts
127
and non-interactive shells, the following paradigm is useful for
127
and non-interactive shells, the following paradigm is useful for
128
restricting commands in the
128
restricting commands in the
129
.Ev ENV
129
.Ev ENV
130
file to interactive invocations. Place commands within the
130
file to interactive invocations. Place commands within the
131
.Dq case
131
.Dq case
132
and
132
and
133
.Dq esac
133
.Dq esac
134
below (these commands are described later):
134
below (these commands are described later):
135
.Pp
135
.Pp
136
.Bl -item -compact -offset indent
136
.Bl -item -compact -offset indent
137
.It
137
.It
138
.Li case $- in *i*)
138
.Li case $- in *i*)
139
.Bl -item -compact -offset indent
139
.Bl -item -compact -offset indent
140
.It
140
.It
141
.Li # commands for interactive use only
141
.Li # commands for interactive use only
142
.It
142
.It
143
.Li ...
143
.Li ...
144
.El
144
.El
145
.It
145
.It
146
.Li esac
146
.Li esac
147
.El
147
.El
148
.Pp
148
.Pp
149
If command line arguments besides the options have been specified, then
149
If command line arguments besides the options have been specified, then
150
the shell treats the first argument as the name of a file from which to
150
the shell treats the first argument as the name of a file from which to
151
read commands (a shell script), and the remaining arguments are set as the
151
read commands (a shell script), and the remaining arguments are set as the
152
positional parameters of the shell ($1, $2, etc).  Otherwise, the shell
152
positional parameters of the shell ($1, $2, etc).  Otherwise, the shell
153
reads commands from its standard input.
153
reads commands from its standard input.
154
.Ss Argument List Processing
154
.Ss Argument List Processing
155
All of the single letter options have a corresponding name that can be
155
All of the single letter options have a corresponding name that can be
156
used as an argument to the
156
used as an argument to the
157
.Fl o
157
.Fl o
158
option. The set
158
option. The set
159
.Fl o
159
.Fl o
160
name is provided next to the single letter option in
160
name is provided next to the single letter option in
161
the description below. Specifying a dash
161
the description below. Specifying a dash
162
.Dq -
162
.Dq -
163
turns the option on, while using a plus
163
turns the option on, while using a plus
164
.Dq +
164
.Dq +
165
disables the option.
165
disables the option.
166
The following options can be set from the command line or
166
The following options can be set from the command line or
167
with the
167
with the
168
.Xr set 1
168
.Xr set 1
169
builtin (described later).
169
builtin (described later).
170
.Bl -tag -width aaaallexportfoo -offset indent
170
.Bl -tag -width aaaallexportfoo -offset indent
171
.It Fl a Em allexport
171
.It Fl a Em allexport
172
Export all variables assigned to. (UNIMPLEMENTED for 4.4alpha)
172
Export all variables assigned to. (UNIMPLEMENTED for 4.4alpha)
173
.It Fl c
173
.It Fl c
174
Read commands from the command line.
174
Read commands from the command line.
175
No commands will be read from the standard input.
175
No commands will be read from the standard input.
176
.It Fl C Em noclobber
176
.It Fl C Em noclobber
177
Don't overwrite existing files with
177
Don't overwrite existing files with
178
.Dq > .
178
.Dq > .
179
(UNIMPLEMENTED for 4.4alpha)
179
(UNIMPLEMENTED for 4.4alpha)
180
.It Fl e Em errexit
180
.It Fl e Em errexit
181
If not interactive, exit immediately if any untested command fails.
181
If not interactive, exit immediately if any untested command fails.
182
The exit status of a command is considered to be
182
The exit status of a command is considered to be
183
explicitly tested if the command is used to control
183
explicitly tested if the command is used to control
184
an
184
an
185
.Ic if ,
185
.Ic if ,
186
.Ic elif ,
186
.Ic elif ,
187
.Ic while ,
187
.Ic while ,
188
or
188
or
189
.Ic until ;
189
.Ic until ;
190
or if the command is the left hand operand of an
190
or if the command is the left hand operand of an
191
.Dq &&
191
.Dq &&
192
or
192
or
193
.Dq ||
193
.Dq ||
194
operator.
194
operator.
195
.It Fl f Em noglob
195
.It Fl f Em noglob
196
Disable pathname expansion.
196
Disable pathname expansion.
197
.It Fl n Em noexec
197
.It Fl n Em noexec
198
If not interactive, read commands but do not execute them.  This is useful
198
If not interactive, read commands but do not execute them.  This is useful
199
for checking the syntax of shell scripts.
199
for checking the syntax of shell scripts.
200
.It Fl u Em nounset
200
.It Fl u Em nounset
201
Write a message to standard error when attempting to expand a variable
201
Write a message to standard error when attempting to expand a variable
202
that is not set, and if the shell is not interactive, exit immediately.
202
that is not set, and if the shell is not interactive, exit immediately.
203
(UNIMPLEMENTED for 4.4alpha)
203
(UNIMPLEMENTED for 4.4alpha)
204
.It Fl v Em verbose
204
.It Fl v Em verbose
205
The shell writes its input to standard error as it is read.  Useful for
205
The shell writes its input to standard error as it is read.  Useful for
206
debugging.
206
debugging.
207
.It Fl x Em xtrace
207
.It Fl x Em xtrace
208
Write each command to standard error (preceded
208
Write each command to standard error (preceded
209
by a
209
by a
210
.Sq +\  )
210
.Sq +\  )
211
before it is executed.  Useful for debugging.
211
before it is executed.  Useful for debugging.
212
.It Fl q Em quietprofile
212
.It Fl q Em quietprofile
213
If the
213
If the
214
.Fl v
214
.Fl v
215
or
215
or
216
.Fl x
216
.Fl x
217
options have been set, do not apply them when reading
217
options have been set, do not apply them when reading
218
initialization files, these being
218
initialization files, these being
219
.Pa /etc/profile ,
219
.Pa /etc/profile ,
220
.Pa .profile ,
220
.Pa .profile ,
221
and the file specified by the
221
and the file specified by the
222
.Ev ENV
222
.Ev ENV
223
environment variable.
223
environment variable.
224
.It Fl I Em ignoreeof
224
.It Fl I Em ignoreeof
225
Ignore EOF's from input when interactive.
225
Ignore EOF's from input when interactive.
226
.It Fl i Em interactive
226
.It Fl i Em interactive
227
Force the shell to behave interactively.
227
Force the shell to behave interactively.
228
.It Fl m Em monitor
228
.It Fl m Em monitor
229
Turn on job control (set automatically when interactive).
229
Turn on job control (set automatically when interactive).
230
.It Fl s Em stdin
230
.It Fl s Em stdin
231
Read commands from standard input (set automatically if no file arguments
231
Read commands from standard input (set automatically if no file arguments
232
are present).  This option has no effect when set after the shell has
232
are present).  This option has no effect when set after the shell has
233
already started running (i.e. with
233
already started running (i.e. with
234
.Xr set 1 ) .
234
.Xr set 1 ) .
235
.It Fl V Em vi
235
.It Fl V Em vi
236
Enable the built-in
236
Enable the built-in
237
.Xr vi 1
237
.Xr vi 1
238
command line editor (disables
238
command line editor (disables
239
.Fl E
239
.Fl E
240
if it has been set).
240
if it has been set).
241
.It Fl E Em emacs
241
.It Fl E Em emacs
242
Enable the built-in
242
Enable the built-in
243
.Xr emacs 1
243
.Xr emacs 1
244
command line editor (disables
244
command line editor (disables
245
.Fl V
245
.Fl V
246
if it has been set).
246
if it has been set).
247
.It Fl b Em notify
247
.It Fl b Em notify
248
Enable asynchronous notification of background job completion.
248
Enable asynchronous notification of background job completion.
249
(UNIMPLEMENTED for 4.4alpha)
249
(UNIMPLEMENTED for 4.4alpha)
250
.El
250
.El
251
.Ss Lexical Structure
251
.Ss Lexical Structure
252
The shell reads input in terms of lines from a file and breaks it up into
252
The shell reads input in terms of lines from a file and breaks it up into
253
words at whitespace (blanks and tabs), and at certain sequences of
253
words at whitespace (blanks and tabs), and at certain sequences of
254
characters that are special to the shell called
254
characters that are special to the shell called
255
.Dq operators .
255
.Dq operators .
256
There are two types of operators: control operators and redirection
256
There are two types of operators: control operators and redirection
257
operators (their meaning is discussed later). Following is a list of operators:
257
operators (their meaning is discussed later). Following is a list of operators:
258
.Bl -ohang -offset indent
258
.Bl -ohang -offset indent
259
.It "Control operators:"
259
.It "Control operators:"
260
.Dl &  &&  (  )  ;  ;; | || <newline>
260
.Dl &  &&  (  )  ;  ;; | || <newline>
261
.It "Redirection operator:"
261
.It "Redirection operator:"
262
.Dl <  >  >|  <<  >>  <&  >&  <<-  <>
262
.Dl <  >  >|  <<  >>  <&  >&  <<-  <>
263
.El
263
.El
264
.Ss Quoting
264
.Ss Quoting
265
Quoting is used to remove the special meaning of certain characters or
265
Quoting is used to remove the special meaning of certain characters or
266
words to the shell, such as operators, whitespace, or keywords.  There are
266
words to the shell, such as operators, whitespace, or keywords.  There are
267
three types of quoting: matched single quotes, matched double quotes, and
267
three types of quoting: matched single quotes, matched double quotes, and
268
backslash.
268
backslash.
269
.Ss Backslash
269
.Ss Backslash
270
A backslash preserves the literal meaning of the following
270
A backslash preserves the literal meaning of the following
271
character, with the exception of
271
character, with the exception of
272
.Aq newline .
272
.Aq newline .
273
A backslash preceding a
273
A backslash preceding a
274
.Aq newline
274
.Aq newline
275
is treated as a line continuation.
275
is treated as a line continuation.
276
.Ss Single Quotes
276
.Ss Single Quotes
277
Enclosing characters in single quotes preserves the literal meaning of all
277
Enclosing characters in single quotes preserves the literal meaning of all
278
the characters (except single quotes, making it impossible to put
278
the characters (except single quotes, making it impossible to put
279
single-quotes in a single-quoted string).
279
single-quotes in a single-quoted string).
280
.Ss Double Quotes
280
.Ss Double Quotes
281
Enclosing characters within double quotes preserves the literal
281
Enclosing characters within double quotes preserves the literal
282
meaning of all characters except dollarsign
282
meaning of all characters except dollarsign
283
.Pq $ ,
283
.Pq $ ,
284
backquote
284
backquote
285
.Pq ` ,
285
.Pq ` ,
286
and backslash
286
and backslash
287
.Pq \e .
287
.Pq \e .
288
The backslash inside double quotes is historically weird, and serves to
288
The backslash inside double quotes is historically weird, and serves to
289
quote only the following characters:
289
quote only the following characters:
290
.Dl $  `  \*q  \e  <newline> .
290
.Dl $  `  \*q  \e  <newline> .
291
Otherwise it remains literal.
291
Otherwise it remains literal.
292
.Ss Reserved Words
292
.Ss Reserved Words
293
Reserved words are words that have special meaning to the
293
Reserved words are words that have special meaning to the
294
shell and are recognized at the beginning of a line and
294
shell and are recognized at the beginning of a line and
295
after a control operator.  The following are reserved words:
295
after a control operator.  The following are reserved words:
296
.Bl -column while while while while while -offset indent
296
.Bl -column while while while while while -offset indent
297
.It ! Ta elif Ta fi Ta while Ta case
297
.It ! Ta elif Ta fi Ta while Ta case
298
.It else Ta for Ta then Ta { Ta }
298
.It else Ta for Ta then Ta { Ta }
299
.It do Ta done Ta until Ta if Ta esac
299
.It do Ta done Ta until Ta if Ta esac
300
.El
300
.El
301
.Pp
301
.Pp
302
Their meaning is discussed later.
302
Their meaning is discussed later.
303
.Ss Aliases
303
.Ss Aliases
304
An alias is a name and corresponding value set using the
304
An alias is a name and corresponding value set using the
305
.Xr alias 1
305
.Xr alias 1
306
builtin command.  Whenever a reserved word may occur (see above),
306
builtin command.  Whenever a reserved word may occur (see above),
307
and after checking for reserved words, the shell
307
and after checking for reserved words, the shell
308
checks the word to see if it matches an alias. If it does,
308
checks the word to see if it matches an alias. If it does,
309
it replaces it in the input stream with its value.  For example,
309
it replaces it in the input stream with its value.  For example,
310
if there is an alias called
310
if there is an alias called
311
.Dq lf
311
.Dq lf
312
with the value
312
with the value
313
.Dq "ls -F" ,
313
.Dq "ls -F" ,
314
then the input:
314
then the input:
315
.Pp
315
.Pp
316
.Dl lf foobar <return>
316
.Dl lf foobar <return>
317
.Pp
317
.Pp
318
would become
318
would become
319
.Pp
319
.Pp
320
.Dl ls -F foobar <return>
320
.Dl ls -F foobar <return>
321
.Pp
321
.Pp
322
Aliases provide a convenient way for naive users to create shorthands for
322
Aliases provide a convenient way for naive users to create shorthands for
323
commands without having to learn how to create functions with arguments.
323
commands without having to learn how to create functions with arguments.
324
They can also be used to create lexically obscure code.  This use is
324
They can also be used to create lexically obscure code.  This use is
325
discouraged.
325
discouraged.
326
.Ss Commands
326
.Ss Commands
327
The shell interprets the words it reads according to a language, the
327
The shell interprets the words it reads according to a language, the
328
specification of which is outside the scope of this man page (refer to the
328
specification of which is outside the scope of this man page (refer to the
329
BNF in the
329
BNF in the
330
.Tn POSIX
330
.Tn POSIX
331
1003.2 document).  Essentially though, a line is read and if the first
331
1003.2 document).  Essentially though, a line is read and if the first
332
word of the line (or after a control operator) is not a reserved word,
332
word of the line (or after a control operator) is not a reserved word,
333
then the shell has recognized a simple command.  Otherwise, a complex
333
then the shell has recognized a simple command.  Otherwise, a complex
334
command or some other special construct may have been recognized.
334
command or some other special construct may have been recognized.
335
.Ss Simple Commands
335
.Ss Simple Commands
336
If a simple command has been recognized, the shell performs
336
If a simple command has been recognized, the shell performs
337
the following actions:
337
the following actions:
338
.Bl -enum -offset indent
338
.Bl -enum -offset indent
339
.It
339
.It
340
Leading words of the form
340
Leading words of the form
341
.Dq name=value
341
.Dq name=value
342
are stripped off and assigned to the environment of the simple command.
342
are stripped off and assigned to the environment of the simple command.
343
Redirection operators and their arguments (as described below) are
343
Redirection operators and their arguments (as described below) are
344
stripped off and saved for processing.
344
stripped off and saved for processing.
345
.It
345
.It
346
The remaining words are expanded as described in
346
The remaining words are expanded as described in
347
the section called
347
the section called
348
.Dq Expansions ,
348
.Dq Expansions ,
349
and the first remaining word is considered the command name and the
349
and the first remaining word is considered the command name and the
350
command is located.  The remaining words are considered the arguments of
350
command is located.  The remaining words are considered the arguments of
351
the command. If no command name resulted, then the
351
the command. If no command name resulted, then the
352
.Dq name=value
352
.Dq name=value
353
variable assignments recognized in item 1 affect the current shell.
353
variable assignments recognized in item 1 affect the current shell.
354
.It
354
.It
355
Redirections are performed as described in the next section.
355
Redirections are performed as described in the next section.
356
.El
356
.El
357
.Ss Redirections
357
.Ss Redirections
358
Redirections are used to change where a command reads its input or sends
358
Redirections are used to change where a command reads its input or sends
359
its output.  In general, redirections open, close, or duplicate an
359
its output.  In general, redirections open, close, or duplicate an
360
existing reference to a file.  The overall format used for redirection is:
360
existing reference to a file.  The overall format used for redirection is:
361
.Pp
361
.Pp
362
.Dl [n] Va redir-op Ar file
362
.Dl [n] Va redir-op Ar file
363
.Pp
363
.Pp
364
where
364
where
365
.Va redir-op
365
.Va redir-op
366
is one of the redirection operators mentioned previously.  Following is a
366
is one of the redirection operators mentioned previously.  Following is a
367
list of the possible redirections. The
367
list of the possible redirections. The
368
.Bq n
368
.Bq n
369
is an optional number, as in
369
is an optional number, as in
370
.Sq 3
370
.Sq 3
371
(not
371
(not
372
.Sq Bq 3 ,
372
.Sq Bq 3 ,
373
that refers to a file descriptor.
373
that refers to a file descriptor.
374
.Bl -tag -width aaabsfiles -offset indent
374
.Bl -tag -width aaabsfiles -offset indent
375
.It [n] Ns > file
375
.It [n] Ns > file
376
Redirect standard output (or n) to file.
376
Redirect standard output (or n) to file.
377
.It [n] Ns >| file
377
.It [n] Ns >| file
378
Same, but override the
378
Same, but override the
379
.Fl C
379
.Fl C
380
option.
380
option.
381
.It [n] Ns >> file
381
.It [n] Ns >> file
382
Append standard output (or n) to file.
382
Append standard output (or n) to file.
383
.It [n] Ns < file
383
.It [n] Ns < file
384
Redirect standard input (or n) from file.
384
Redirect standard input (or n) from file.
385
.It [n1] Ns <& Ns n2
385
.It [n1] Ns <& Ns n2
386
Duplicate standard input (or n1) from file descriptor n2.
386
Duplicate standard input (or n1) from file descriptor n2.
387
.It [n] Ns <&-
387
.It [n] Ns <&-
388
Close standard input (or n).
388
Close standard input (or n).
389
.It [n1] Ns >& Ns n2
389
.It [n1] Ns >& Ns n2
390
Duplicate standard output (or n1) from n2.
390
Duplicate standard output (or n1) from n2.
391
.It [n] Ns >&-
391
.It [n] Ns >&-
392
Close standard output (or n).
392
Close standard output (or n).
393
.It [n] Ns <> file
393
.It [n] Ns <> file
394
Open file for reading and writing on standard input (or n).
394
Open file for reading and writing on standard input (or n).
395
.El
395
.El
396
.Pp
396
.Pp
397
The following redirection is often called a
397
The following redirection is often called a
398
.Dq here-document .
398
.Dq here-document .
399
.Bl -item -offset indent
399
.Bl -item -offset indent
400
.It
400
.It
401
.Li [n]<< delimiter
401
.Li [n]<< delimiter
402
.Dl here-doc-text...
402
.Dl here-doc-text...
403
.Li delimiter
403
.Li delimiter
404
.El
404
.El
405
.Pp
405
.Pp
406
All the text on successive lines up to the delimiter is saved away and
406
All the text on successive lines up to the delimiter is saved away and
407
made available to the command on standard input, or file descriptor n if
407
made available to the command on standard input, or file descriptor n if
408
it is specified.  If the delimiter as specified on the initial line is
408
it is specified.  If the delimiter as specified on the initial line is
409
quoted, then the here-doc-text is treated literally, otherwise the text is
409
quoted, then the here-doc-text is treated literally, otherwise the text is
410
subjected to parameter expansion, command substitution, and arithmetic
410
subjected to parameter expansion, command substitution, and arithmetic
411
expansion (as described in the section on
411
expansion (as described in the section on
412
.Dq Expansions ) .
412
.Dq Expansions ) .
413
If the operator is
413
If the operator is
414
.Dq <<-
414
.Dq <<-
415
instead of
415
instead of
416
.Dq << ,
416
.Dq << ,
417
then leading tabs in the here-doc-text are stripped.
417
then leading tabs in the here-doc-text are stripped.
418
.Ss Search and Execution
418
.Ss Search and Execution
419
There are three types of commands: shell functions, builtin commands, and
419
There are three types of commands: shell functions, builtin commands, and
420
normal programs -- and the command is searched for (by name) in that
420
normal programs -- and the command is searched for (by name) in that
421
order.  They each are executed in a different way.
421
order.  They each are executed in a different way.
422
.Pp
422
.Pp
423
When a shell function is executed, all of the shell positional parameters
423
When a shell function is executed, all of the shell positional parameters
424
(except $0, which remains unchanged) are set to the arguments of the shell
424
(except $0, which remains unchanged) are set to the arguments of the shell
425
function. The variables which are explicitly placed in the environment of
425
function. The variables which are explicitly placed in the environment of
426
the command (by placing assignments to them before the function name) are
426
the command (by placing assignments to them before the function name) are
427
made local to the function and are set to the values given. Then the
427
made local to the function and are set to the values given. Then the
428
command given in the function definition is executed.  The positional
428
command given in the function definition is executed.  The positional
429
parameters are restored to their original values when the command
429
parameters are restored to their original values when the command
430
completes. This all occurs within the current shell.
430
completes. This all occurs within the current shell.
431
.Pp
431
.Pp
432
Shell builtins are executed internally to the shell, without spawning a
432
Shell builtins are executed internally to the shell, without spawning a
433
new process.
433
new process.
434
.Pp
434
.Pp
435
Otherwise, if the command name doesn't match a function or builtin, the
435
Otherwise, if the command name doesn't match a function or builtin, the
436
command is searched for as a normal program in the filesystem (as
436
command is searched for as a normal program in the filesystem (as
437
described in the next section). When a normal program is executed, the
437
described in the next section). When a normal program is executed, the
438
shell runs the program, passing the arguments and the environment to the
438
shell runs the program, passing the arguments and the environment to the
439
program. If the program is not a normal executable file (i.e., if it does
439
program. If the program is not a normal executable file (i.e., if it does
440
not begin with the "magic number" whose
440
not begin with the "magic number" whose
441
.Tn ASCII
441
.Tn ASCII
442
representation is "#!", so
442
representation is "#!", so
443
.Xr execve 2
443
.Xr execve 2
444
returns
444
returns
445
.Er ENOEXEC
445
.Er ENOEXEC
446
then) the shell will interpret the program in a subshell.  The child shell
446
then) the shell will interpret the program in a subshell.  The child shell
447
will reinitialize itself in this case, so that the effect will be as if a
447
will reinitialize itself in this case, so that the effect will be as if a
448
new shell had been invoked to handle the ad-hoc shell script, except that
448
new shell had been invoked to handle the ad-hoc shell script, except that
449
the location of hashed commands located in the parent shell will be
449
the location of hashed commands located in the parent shell will be
450
remembered by the child.
450
remembered by the child.
451
.Pp
451
.Pp
452
Note that previous versions of this document and the source code itself
452
Note that previous versions of this document and the source code itself
453
misleadingly and sporadically refer to a shell script without a magic
453
misleadingly and sporadically refer to a shell script without a magic
454
number as a "shell procedure".
454
number as a "shell procedure".
455
.Ss Path Search
455
.Ss Path Search
456
.Pp
456
.Pp
457
When locating a command, the shell first looks to see if it has a shell
457
When locating a command, the shell first looks to see if it has a shell
458
function by that name.  Then it looks for a builtin command by that name.
458
function by that name.  Then it looks for a builtin command by that name.
459
If a builtin command is not found, one of two things happen:
459
If a builtin command is not found, one of two things happen:
460
.Bl -enum
460
.Bl -enum
461
.It
461
.It
462
Command names containing a slash are simply executed without performing
462
Command names containing a slash are simply executed without performing
463
any searches.
463
any searches.
464
.It
464
.It
465
The shell searches each entry in
465
The shell searches each entry in
466
.Ev PATH
466
.Ev PATH
467
in turn for the command. The value of the
467
in turn for the command. The value of the
468
.Ev PATH
468
.Ev PATH
469
variable should be a series of entries separated by colons.  Each entry
469
variable should be a series of entries separated by colons.  Each entry
470
consists of a directory name. The current directory may be indicated
470
consists of a directory name. The current directory may be indicated
471
implicitly by an empty directory name, or explicitly by a single period.
471
implicitly by an empty directory name, or explicitly by a single period.
472
.El
472
.El
473
.Ss Command Exit Status
473
.Ss Command Exit Status
474
Each command has an exit status that can influence the behavior
474
Each command has an exit status that can influence the behavior
475
of other shell commands.  The paradigm is that a command exits
475
of other shell commands.  The paradigm is that a command exits
476
with zero for normal or success, and non-zero for failure,
476
with zero for normal or success, and non-zero for failure,
477
error, or a false indication.  The man page for each command
477
error, or a false indication.  The man page for each command
478
should indicate the various exit codes and what they mean.
478
should indicate the various exit codes and what they mean.
479
Additionally, the builtin commands return exit codes, as does
479
Additionally, the builtin commands return exit codes, as does
480
an executed shell function.
480
an executed shell function.
481
.Ss Complex Commands
481
.Ss Complex Commands
482
Complex commands are combinations of simple commands with control
482
Complex commands are combinations of simple commands with control
483
operators or reserved words, together creating a larger complex command.
483
operators or reserved words, together creating a larger complex command.
484
More generally, a command is one of the following:
484
More generally, a command is one of the following:
485
.Bl -bullet
485
.Bl -bullet
486
.It
486
.It
487
simple command
487
simple command
488
.It
488
.It
489
pipeline
489
pipeline
490
.It
490
.It
491
list or compound-list
491
list or compound-list
492
.It
492
.It
493
compound command
493
compound command
494
.It
494
.It
495
function definition
495
function definition
496
.El
496
.El
497
.Pp
497
.Pp
498
Unless otherwise stated, the exit status of a command is that of the last
498
Unless otherwise stated, the exit status of a command is that of the last
499
simple command executed by the command.
499
simple command executed by the command.
500
.Ss Pipelines
500
.Ss Pipelines
501
.Pp
501
.Pp
502
A pipeline is a sequence of one or more commands separated
502
A pipeline is a sequence of one or more commands separated
503
by the control operator |.  The standard output of all but
503
by the control operator |.  The standard output of all but
504
the last command is connected to the standard input
504
the last command is connected to the standard input
505
of the next command.  The standard output of the last
505
of the next command.  The standard output of the last
506
command is inherited from the shell, as usual.
506
command is inherited from the shell, as usual.
507
.Pp
507
.Pp
508
The format for a pipeline is:
508
The format for a pipeline is:
509
.Pp
509
.Pp
510
.Dl [!] command1 [ | command2 ...]
510
.Dl [!] command1 [ | command2 ...]
511
.Pp
511
.Pp
512
The standard output of command1 is connected to the standard input of
512
The standard output of command1 is connected to the standard input of
513
command2. The standard input, standard output, or both of a command is
513
command2. The standard input, standard output, or both of a command is
514
considered to be assigned by the pipeline before any redirection specified
514
considered to be assigned by the pipeline before any redirection specified
515
by redirection operators that are part of the command.
515
by redirection operators that are part of the command.
516
.Pp
516
.Pp
517
If the pipeline is not in the background (discussed later), the shell
517
If the pipeline is not in the background (discussed later), the shell
518
waits for all commands to complete.
518
waits for all commands to complete.
519
.Pp
519
.Pp
520
If the reserved word ! does not precede the pipeline, the exit status is
520
If the reserved word ! does not precede the pipeline, the exit status is
521
the exit status of the last command specified in the pipeline.
521
the exit status of the last command specified in the pipeline.
522
Otherwise, the exit status is the logical NOT of the exit status of the
522
Otherwise, the exit status is the logical NOT of the exit status of the
523
last command.  That is, if the last command returns zero, the exit status
523
last command.  That is, if the last command returns zero, the exit status
524
is 1; if the last command returns greater than zero, the exit status is
524
is 1; if the last command returns greater than zero, the exit status is
525
zero.
525
zero.
526
.Pp
526
.Pp
527
Because pipeline assignment of standard input or standard output or both
527
Because pipeline assignment of standard input or standard output or both
528
takes place before redirection, it can be modified by redirection.  For
528
takes place before redirection, it can be modified by redirection.  For
529
example:
529
example:
530
.Pp
530
.Pp
531
.Dl $ command1 2>&1 | command2
531
.Dl $ command1 2>&1 | command2
532
.Pp
532
.Pp
533
sends both the standard output and standard error of command1
533
sends both the standard output and standard error of command1
534
to the standard input of command2.
534
to the standard input of command2.
535
.Pp
535
.Pp
536
A ; or <newline> terminator causes the preceding AND-OR-list (described
536
A ; or <newline> terminator causes the preceding AND-OR-list (described
537
next) to be executed sequentially; a & causes asynchronous execution of
537
next) to be executed sequentially; a & causes asynchronous execution of
538
the preceding AND-OR-list.
538
the preceding AND-OR-list.
539
.Pp
539
.Pp
540
Note that unlike some other shells, each process in the pipeline is a
540
Note that unlike some other shells, each process in the pipeline is a
541
child of the invoking shell (unless it is a shell builtin, in which case
541
child of the invoking shell (unless it is a shell builtin, in which case
542
it executes in the current shell -- but any effect it has on the
542
it executes in the current shell -- but any effect it has on the
543
environment is wiped).
543
environment is wiped).
544
.Ss Background Commands -- &
544
.Ss Background Commands -- &
545
If a command is terminated by the control operator ampersand (&), the
545
If a command is terminated by the control operator ampersand (&), the
546
shell executes the command asynchronously -- that is, the shell does not
546
shell executes the command asynchronously -- that is, the shell does not
547
wait for the command to finish before executing the next command.
547
wait for the command to finish before executing the next command.
548
.Pp
548
.Pp
549
The format for running a command in background is:
549
The format for running a command in background is:
550
.Pp
550
.Pp
551
.Dl command1 & [command2 & ...]
551
.Dl command1 & [command2 & ...]
552
.Pp
552
.Pp
553
If the shell is not interactive, the standard input of an asynchronous
553
If the shell is not interactive, the standard input of an asynchronous
554
command is set to
554
command is set to
555
.Pa /dev/null .
555
.Pa /dev/null .
556
.Ss Lists -- Generally Speaking
556
.Ss Lists -- Generally Speaking
557
A list is a sequence of zero or more commands separated by newlines,
557
A list is a sequence of zero or more commands separated by newlines,
558
semicolons, or ampersands, and optionally terminated by one of these three
558
semicolons, or ampersands, and optionally terminated by one of these three
559
characters. The commands in a list are executed in the order they are
559
characters. The commands in a list are executed in the order they are
560
written. If command is followed by an ampersand, the shell starts the
560
written. If command is followed by an ampersand, the shell starts the
561
command and immediately proceed onto the next command; otherwise it waits
561
command and immediately proceed onto the next command; otherwise it waits
562
for the command to terminate before proceeding to the next one.
562
for the command to terminate before proceeding to the next one.
563
.Ss Short-Circuit List Operators
563
.Ss Short-Circuit List Operators
564
.Dq &&
564
.Dq &&
565
and
565
and
566
.Dq ||
566
.Dq ||
567
are AND-OR list operators.
567
are AND-OR list operators.
568
.Dq &&
568
.Dq &&
569
executes the first command, and then executes the second command iff the
569
executes the first command, and then executes the second command iff the
570
exit status of the first command is zero.
570
exit status of the first command is zero.
571
.Dq ||
571
.Dq ||
572
is similar, but executes the second command iff the exit status of the first
572
is similar, but executes the second command iff the exit status of the first
573
command is nonzero.
573
command is nonzero.
574
.Dq &&
574
.Dq &&
575
and
575
and
576
.Dq ||
576
.Dq ||
577
both have the same priority.
577
both have the same priority.
578
.Ss Flow-Control Constructs -- if, while, for, case
578
.Ss Flow-Control Constructs -- if, while, for, case
579
The syntax of the if command is
579
The syntax of the if command is
580
.Bd -literal -offset indent
580
.Bd -literal -offset indent
581
if list
581
if list
582
then list
582
then list
583
[ elif list
583
[ elif list
584
then    list ] ...
584
then    list ] ...
585
[ else list ]
585
[ else list ]
586
fi
586
fi
587
.Ed
587
.Ed
588
.Pp
588
.Pp
589
The syntax of the while command is
589
The syntax of the while command is
590
.Bd -literal -offset indent
590
.Bd -literal -offset indent
591
while list
591
while list
592
do   list
592
do   list
593
done
593
done
594
.Ed
594
.Ed
595
.Pp
595
.Pp
596
The two lists are executed repeatedly while the exit status of the
596
The two lists are executed repeatedly while the exit status of the
597
first list is zero.  The until command is similar, but has the word
597
first list is zero.  The until command is similar, but has the word
598
until in place of while, which causes it to
598
until in place of while, which causes it to
599
repeat until the exit status of the first list is zero.
599
repeat until the exit status of the first list is zero.
600
.Pp
600
.Pp
601
The syntax of the for command is
601
The syntax of the for command is
602
.Bd -literal -offset indent
602
.Bd -literal -offset indent
603
for variable in word...
603
for variable in word...
604
do   list
604
do   list
605
done
605
done
606
.Ed
606
.Ed
607
.Pp
607
.Pp
608
The words are expanded, and then the list is executed repeatedly with the
608
The words are expanded, and then the list is executed repeatedly with the
609
variable set to each word in turn.  do and done may be replaced with
609
variable set to each word in turn.  do and done may be replaced with
610
.Dq {
610
.Dq {
611
and
611
and
612
.Dq } .
612
.Dq } .
613
.Pp
613
.Pp
614
The syntax of the break and continue command is
614
The syntax of the break and continue command is
615
.Bd -literal -offset indent
615
.Bd -literal -offset indent
616
break [ num ]
616
break [ num ]
617
continue [ num ]
617
continue [ num ]
618
.Ed
618
.Ed
619
.Pp
619
.Pp
620
Break terminates the num innermost for or while loops.
620
Break terminates the num innermost for or while loops.
621
Continue continues with the next iteration of the innermost loop.
621
Continue continues with the next iteration of the innermost loop.
622
These are implemented as builtin commands.
622
These are implemented as builtin commands.
623
.Pp
623
.Pp
624
The syntax of the case command is
624
The syntax of the case command is
625
.Bd -literal -offset indent
625
.Bd -literal -offset indent
626
case word in
626
case word in
627
pattern) list ;;
627
pattern) list ;;
628
\&...
628
\&...
629
esac
629
esac
630
.Ed
630
.Ed
631
.Pp
631
.Pp
632
The pattern can actually be one or more patterns (see Shell
632
The pattern can actually be one or more patterns (see Shell
633
Patterns described later), separated by
633
Patterns described later), separated by
634
.Dq \*(Ba
634
.Dq \*(Ba
635
characters.
635
characters.
636
.Ss Grouping Commands Together
636
.Ss Grouping Commands Together
637
Commands may be grouped by writing either
637
Commands may be grouped by writing either
638
.Pp
638
.Pp
639
.Dl (list)
639
.Dl (list)
640
.Pp
640
.Pp
641
or
641
or
642
.Pp
642
.Pp
643
.Dl { list; }
643
.Dl { list; }
644
.Pp
644
.Pp
645
The first of these executes the commands in a subshell. Builtin commands
645
The first of these executes the commands in a subshell. Builtin commands
646
grouped into a (list) will not affect the current shell. The second form
646
grouped into a (list) will not affect the current shell. The second form
647
does not fork another shell so is slightly more efficient. Grouping
647
does not fork another shell so is slightly more efficient. Grouping
648
commands together this way allows you to redirect their output as though
648
commands together this way allows you to redirect their output as though
649
they were one program:
649
they were one program:
650
.Pp
650
.Pp
651
.Bd -literal -offset indent
651
.Bd -literal -offset indent
652
{ echo \*q hello \\c\*q ; echo \*q world" } > greeting
652
{ echo \*q hello \\c\*q ; echo \*q world" } > greeting
653
.Ed
653
.Ed
654
.Pp
654
.Pp
655
.Ss Functions
655
.Ss Functions
656
The syntax of a function definition is
656
The syntax of a function definition is
657
.Pp
657
.Pp
658
.Dl name ( ) command
658
.Dl name ( ) command
659
.Pp
659
.Pp
660
A function definition is an executable statement; when executed it
660
A function definition is an executable statement; when executed it
661
installs a function named name and returns an exit status of zero.  The
661
installs a function named name and returns an exit status of zero.  The
662
command is normally a list enclosed between
662
command is normally a list enclosed between
663
.Dq {
663
.Dq {
664
and
664
and
665
.Dq } .
665
.Dq } .
666
.Pp
666
.Pp
667
Variables may be declared to be local to a function by using a local
667
Variables may be declared to be local to a function by using a local
668
command.  This should appear as the first statement of a function, and the
668
command.  This should appear as the first statement of a function, and the
669
syntax is
669
syntax is
670
.Pp
670
.Pp
671
.Dl local [ variable | - ] ...
671
.Dl local [ variable | - ] ...
672
.Pp
672
.Pp
673
Local is implemented as a builtin command.
673
Local is implemented as a builtin command.
674
.Pp
674
.Pp
675
When a variable is made local, it inherits the initial value and exported
675
When a variable is made local, it inherits the initial value and exported
676
and readonly flags from the variable with the same name in the surrounding
676
and readonly flags from the variable with the same name in the surrounding
677
scope, if there is one.  Otherwise, the variable is initially unset.  The
677
scope, if there is one.  Otherwise, the variable is initially unset.  The
678
shell uses dynamic scoping, so that if you make the variable x local to
678
shell uses dynamic scoping, so that if you make the variable x local to
679
function f, which then calls function g, references to the variable x made
679
function f, which then calls function g, references to the variable x made
680
inside g will refer to the variable x declared inside f, not to the global
680
inside g will refer to the variable x declared inside f, not to the global
681
variable named x.
681
variable named x.
682
.Pp
682
.Pp
683
The only special parameter than can be made local is
683
The only special parameter than can be made local is
684
.Dq - .
684
.Dq - .
685
Making
685
Making
686
.Dq -
686
.Dq -
687
local any shell options that are changed via the set command inside the
687
local any shell options that are changed via the set command inside the
688
function to be restored to their original values when the function
688
function to be restored to their original values when the function
689
returns.
689
returns.
690
.Pp
690
.Pp
691
The syntax of the return command is
691
The syntax of the return command is
692
.Pp
692
.Pp
693
.Dl return [ exitstatus ]
693
.Dl return [ exitstatus ]
694
.Pp
694
.Pp
695
It terminates the currently executing function.  Return is
695
It terminates the currently executing function.  Return is
696
implemented as a builtin command.
696
implemented as a builtin command.
697
.Ss Variables and Parameters
697
.Ss Variables and Parameters
698
The shell maintains a set of parameters.  A parameter denoted by a name is
698
The shell maintains a set of parameters.  A parameter denoted by a name is
699
called a variable. When starting up, the shell turns all the environment
699
called a variable. When starting up, the shell turns all the environment
700
variables into shell variables.  New variables can be set using the form
700
variables into shell variables.  New variables can be set using the form
701
.Pp
701
.Pp
702
.Dl name=value
702
.Dl name=value
703
.Pp
703
.Pp
704
Variables set by the user must have a name consisting solely of
704
Variables set by the user must have a name consisting solely of
705
alphabetics, numerics, and underscores - the first of which must not be
705
alphabetics, numerics, and underscores - the first of which must not be
706
numeric.  A parameter can also be denoted by a number or a special
706
numeric.  A parameter can also be denoted by a number or a special
707
character as explained below.
707
character as explained below.
708
.Ss Positional Parameters
708
.Ss Positional Parameters
709
A positional parameter is a parameter denoted by a number (n > 0). The
709
A positional parameter is a parameter denoted by a number (n > 0). The
710
shell sets these initially to the values of its command line arguments
710
shell sets these initially to the values of its command line arguments
711
that follow the name of the shell script. The
711
that follow the name of the shell script. The
712
.Xr set 1
712
.Xr set 1
713
builtin can also be used to set or reset them.
713
builtin can also be used to set or reset them.
714
.Ss Special Parameters
714
.Ss Special Parameters
715
A special parameter is a parameter denoted by one of the following special
715
A special parameter is a parameter denoted by one of the following special
716
characters.  The value of the parameter is listed next to its character.
716
characters.  The value of the parameter is listed next to its character.
717
.Bl -tag -width thinhyphena
717
.Bl -tag -width thinhyphena
718
.It *
718
.It *
719
Expands to the positional parameters, starting from one.  When the
719
Expands to the positional parameters, starting from one.  When the
720
expansion occurs within a double-quoted string it expands to a single
720
expansion occurs within a double-quoted string it expands to a single
721
field with the value of each parameter separated by the first character of
721
field with the value of each parameter separated by the first character of
722
the
722
the
723
.Ev IFS
723
.Ev IFS
724
variable, or by a <space> if
724
variable, or by a <space> if
725
.Ev IFS
725
.Ev IFS
726
is unset.
726
is unset.
727
.It @
727
.It @
728
Expands to the positional parameters, starting from one.  When
728
Expands to the positional parameters, starting from one.  When
729
the expansion occurs within double-quotes, each positional
729
the expansion occurs within double-quotes, each positional
730
parameter expands as a separate argument.
730
parameter expands as a separate argument.
731
If there are no positional parameters, the
731
If there are no positional parameters, the
732
expansion of @ generates zero arguments, even when @ is
732
expansion of @ generates zero arguments, even when @ is
733
double-quoted.  What this basically means, for example, is
733
double-quoted.  What this basically means, for example, is
734
if $1 is
734
if $1 is
735
.Dq abc
735
.Dq abc
736
and $2 is
736
and $2 is
737
.Dq def ghi ,
737
.Dq def ghi ,
738
then
738
then
739
.Qq $@
739
.Qq $@
740
expands to
740
expands to
741
the two arguments:
741
the two arguments:
742
.Pp
742
.Pp
743
.Sm off
743
.Sm off
744
.Dl \*q abc \*q \  \*q def\ ghi \*q
744
.Dl \*q abc \*q \  \*q def\ ghi \*q
745
.Sm on
745
.Sm on
746
.It #
746
.It #
747
Expands to the number of positional parameters.
747
Expands to the number of positional parameters.
748
.It ?
748
.It ?
749
Expands to the exit status of the most recent pipeline.
749
Expands to the exit status of the most recent pipeline.
750
.It - (Hyphen.)
750
.It - (Hyphen.)
751
Expands to the current option flags (the single-letter
751
Expands to the current option flags (the single-letter
752
option names concatenated into a string) as specified on
752
option names concatenated into a string) as specified on
753
invocation, by the set builtin command, or implicitly
753
invocation, by the set builtin command, or implicitly
754
by the shell.
754
by the shell.
755
.It $
755
.It $
756
Expands to the process ID of the invoked shell.  A subshell
756
Expands to the process ID of the invoked shell.  A subshell
757
retains the same value of $ as its parent.
757
retains the same value of $ as its parent.
758
.It !
758
.It !
759
Expands to the process ID of the most recent background
759
Expands to the process ID of the most recent background
760
command executed from the current shell.  For a
760
command executed from the current shell.  For a
761
pipeline, the process ID is that of the last command in the
761
pipeline, the process ID is that of the last command in the
762
pipeline.
762
pipeline.
763
.It 0 (Zero.)
763
.It 0 (Zero.)
764
Expands to the name of the shell or shell script.
764
Expands to the name of the shell or shell script.
765
.El
765
.El
766
.Ss Word Expansions
766
.Ss Word Expansions
767
This clause describes the various expansions that are performed on words.
767
This clause describes the various expansions that are performed on words.
768
Not all expansions are performed on every word, as explained later.
768
Not all expansions are performed on every word, as explained later.
769
.Pp
769
.Pp
770
Tilde expansions, parameter expansions, command substitutions, arithmetic
770
Tilde expansions, parameter expansions, command substitutions, arithmetic
771
expansions, and quote removals that occur within a single word expand to a
771
expansions, and quote removals that occur within a single word expand to a
772
single field.  It is only field splitting or pathname expansion that can
772
single field.  It is only field splitting or pathname expansion that can
773
create multiple fields from a single word. The single exception to this
773
create multiple fields from a single word. The single exception to this
774
rule is the expansion of the special parameter @ within double-quotes, as
774
rule is the expansion of the special parameter @ within double-quotes, as
775
was described above.
775
was described above.
776
.Pp
776
.Pp
777
The order of word expansion is:
777
The order of word expansion is:
778
.Bl -enum
778
.Bl -enum
779
.It
779
.It
780
Tilde Expansion, Parameter Expansion, Command Substitution,
780
Tilde Expansion, Parameter Expansion, Command Substitution,
781
Arithmetic Expansion (these all occur at the same time).
781
Arithmetic Expansion (these all occur at the same time).
782
.It
782
.It
783
Field Splitting is performed on fields
783
Field Splitting is performed on fields
784
generated by step (1) unless the
784
generated by step (1) unless the
785
.Ev IFS
785
.Ev IFS
786
variable is null.
786
variable is null.
787
.It
787
.It
788
Pathname Expansion (unless set
788
Pathname Expansion (unless set
789
.Fl f
789
.Fl f
790
is in effect).
790
is in effect).
791
.It
791
.It
792
Quote Removal.
792
Quote Removal.
793
.El
793
.El
794
.Pp
794
.Pp
795
The $ character is used to introduce parameter expansion, command
795
The $ character is used to introduce parameter expansion, command
796
substitution, or arithmetic evaluation.
796
substitution, or arithmetic evaluation.
797
.Ss Tilde Expansion (substituting a user's home directory)
797
.Ss Tilde Expansion (substituting a user's home directory)
798
A word beginning with an unquoted tilde character (~) is
798
A word beginning with an unquoted tilde character (~) is
799
subjected to tilde expansion.  All the characters up to
799
subjected to tilde expansion.  All the characters up to
800
a slash (/) or the end of the word are treated as a username
800
a slash (/) or the end of the word are treated as a username
801
and are replaced with the user's home directory.  If the
801
and are replaced with the user's home directory.  If the
802
username is missing (as in
802
username is missing (as in
803
.Pa ~/foobar ) ,
803
.Pa ~/foobar ) ,
804
the tilde is replaced with the value of the
804
the tilde is replaced with the value of the
805
.Va HOME
805
.Va HOME
806
variable (the current user's home directory).
806
variable (the current user's home directory).
807
.Ss Parameter Expansion
807
.Ss Parameter Expansion
808
The format for parameter expansion is as follows:
808
The format for parameter expansion is as follows:
809
.Pp
809
.Pp
810
.Dl ${expression}
810
.Dl ${expression}
811
.Pp
811
.Pp
812
where expression consists of all characters until the matching
812
where expression consists of all characters until the matching
813
.Dq } .
813
.Dq } .
814
Any
814
Any
815
.Dq }
815
.Dq }
816
escaped by a backslash or within a quoted string, and characters in
816
escaped by a backslash or within a quoted string, and characters in
817
embedded arithmetic expansions, command substitutions, and variable
817
embedded arithmetic expansions, command substitutions, and variable
818
expansions, are not examined in determining the matching
818
expansions, are not examined in determining the matching
819
.Dq } .
819
.Dq } .
820
.Pp
820
.Pp
821
The simplest form for parameter expansion is:
821
The simplest form for parameter expansion is:
822
.Pp
822
.Pp
823
.Dl ${parameter}
823
.Dl ${parameter}
824
.Pp
824
.Pp
825
The value, if any, of parameter is substituted.
825
The value, if any, of parameter is substituted.
826
.Pp
826
.Pp
827
The parameter name or symbol can be enclosed in braces, which are
827
The parameter name or symbol can be enclosed in braces, which are
828
optional except for positional parameters with more than one digit or
828
optional except for positional parameters with more than one digit or
829
when parameter is followed by a character that could be interpreted as
829
when parameter is followed by a character that could be interpreted as
830
part of the name.
830
part of the name.
831
If a parameter expansion occurs inside
831
If a parameter expansion occurs inside
832
double-quotes:
832
double-quotes:
833
.Bl -enum
833
.Bl -enum
834
.It
834
.It
835
Pathname expansion is not performed on the results of the
835
Pathname expansion is not performed on the results of the
836
expansion.
836
expansion.
837
.It
837
.It
838
Field splitting is not performed on the results of the
838
Field splitting is not performed on the results of the
839
expansion, with the exception of @.
839
expansion, with the exception of @.
840
.El
840
.El
841
.Pp
841
.Pp
842
In addition, a parameter expansion can be modified by using one of the
842
In addition, a parameter expansion can be modified by using one of the
843
following formats.
843
following formats.
844
.Bl -tag -width aaparameterwordaaaaa
844
.Bl -tag -width aaparameterwordaaaaa
845
.It ${parameter:-word}
845
.It ${parameter:-word}
846
Use Default Values.  If parameter is unset or null, the expansion of word
846
Use Default Values.  If parameter is unset or null, the expansion of word
847
is substituted; otherwise, the value of parameter is substituted.
847
is substituted; otherwise, the value of parameter is substituted.
848
.It ${parameter:=word}
848
.It ${parameter:=word}
849
Assign Default Values.  If parameter is unset or null, the expansion of
849
Assign Default Values.  If parameter is unset or null, the expansion of
850
word is assigned to parameter.  In all cases, the final value of parameter
850
word is assigned to parameter.  In all cases, the final value of parameter
851
is substituted.  Only variables, not positional parameters or special
851
is substituted.  Only variables, not positional parameters or special
852
parameters, can be assigned in this way.
852
parameters, can be assigned in this way.
853
.It ${parameter:?[word]}
853
.It ${parameter:?[word]}
854
Indicate Error if Null or Unset.  If parameter is unset or null, the
854
Indicate Error if Null or Unset.  If parameter is unset or null, the
855
expansion of word (or a message indicating it is unset if word is omitted)
855
expansion of word (or a message indicating it is unset if word is omitted)
856
is written to standard error and the shell exits with a nonzero exit
856
is written to standard error and the shell exits with a nonzero exit
857
status.  Otherwise, the value of parameter is substituted.  An interactive
857
status.  Otherwise, the value of parameter is substituted.  An interactive
858
shell need not exit.
858
shell need not exit.
859
.It ${parameter:+word}
859
.It ${parameter:+word}
860
Use Alternative Value.  If parameter is unset or null, null is
860
Use Alternative Value.  If parameter is unset or null, null is
861
substituted; otherwise, the expansion of word is substituted.
861
substituted; otherwise, the expansion of word is substituted.
862
.El
862
.El
863
.Pp
863
.Pp
864
In the parameter expansions shown previously, use of the colon in the
864
In the parameter expansions shown previously, use of the colon in the
865
format results in a test for a parameter that is unset or null; omission
865
format results in a test for a parameter that is unset or null; omission
866
of the colon results in a test for a parameter that is only unset.
866
of the colon results in a test for a parameter that is only unset.
867
.Bl -tag -width aaparameterwordaaaaa
867
.Bl -tag -width aaparameterwordaaaaa
868
.It ${#parameter}
868
.It ${#parameter}
869
String Length.  The length in characters of
869
String Length.  The length in characters of
870
the value of parameter.
870
the value of parameter.
871
.El
871
.El
872
.Pp
872
.Pp
873
The following four varieties of parameter expansion provide for substring
873
The following four varieties of parameter expansion provide for substring
874
processing.  In each case, pattern matching notation (see Shell Patterns),
874
processing.  In each case, pattern matching notation (see Shell Patterns),
875
rather than regular expression notation, is used to evaluate the patterns.
875
rather than regular expression notation, is used to evaluate the patterns.
876
If parameter is * or @, the result of the expansion is unspecified.
876
If parameter is * or @, the result of the expansion is unspecified.
877
Enclosing the full parameter expansion string in double-quotes does not
877
Enclosing the full parameter expansion string in double-quotes does not
878
cause the following four varieties of pattern characters to be quoted,
878
cause the following four varieties of pattern characters to be quoted,
879
whereas quoting characters within the braces has this effect.
879
whereas quoting characters within the braces has this effect.
880
.Bl -tag -width aaparameterwordaaaaa
880
.Bl -tag -width aaparameterwordaaaaa
881
.It ${parameter%word}
881
.It ${parameter%word}
882
Remove Smallest Suffix Pattern.  The word is expanded to produce a
882
Remove Smallest Suffix Pattern.  The word is expanded to produce a
883
pattern.  The parameter expansion then results in parameter, with the
883
pattern.  The parameter expansion then results in parameter, with the
884
smallest portion of the suffix matched by the pattern deleted.
884
smallest portion of the suffix matched by the pattern deleted.
885
.It ${parameter%%word}
885
.It ${parameter%%word}
886
Remove Largest Suffix Pattern.  The word is expanded to produce a pattern.
886
Remove Largest Suffix Pattern.  The word is expanded to produce a pattern.
887
The parameter expansion then results in parameter, with the largest
887
The parameter expansion then results in parameter, with the largest
888
portion of the suffix matched by the pattern deleted.
888
portion of the suffix matched by the pattern deleted.
889
.It ${parameter#word}
889
.It ${parameter#word}
890
Remove Smallest Prefix Pattern.  The word is expanded to produce a
890
Remove Smallest Prefix Pattern.  The word is expanded to produce a
891
pattern.  The parameter expansion then results in parameter, with the
891
pattern.  The parameter expansion then results in parameter, with the
892
smallest portion of the prefix matched by the pattern deleted.
892
smallest portion of the prefix matched by the pattern deleted.
893
.It ${parameter##word}
893
.It ${parameter##word}
894
Remove Largest Prefix Pattern.  The word is expanded to produce a pattern.
894
Remove Largest Prefix Pattern.  The word is expanded to produce a pattern.
895
The parameter expansion then results in parameter, with the largest
895
The parameter expansion then results in parameter, with the largest
896
portion of the prefix matched by the pattern deleted.
896
portion of the prefix matched by the pattern deleted.
897
.El
897
.El
898
.Ss Command Substitution
898
.Ss Command Substitution
899
Command substitution allows the output of a command to be substituted in
899
Command substitution allows the output of a command to be substituted in
900
place of the command name itself.  Command substitution occurs when
900
place of the command name itself.  Command substitution occurs when
901
the command is enclosed as follows:
901
the command is enclosed as follows:
902
.Pp
902
.Pp
903
.Dl $(command)
903
.Dl $(command)
904
.Pp
904
.Pp
905
or
905
or
906
.Po
906
.Po
907
.Dq backquoted
907
.Dq backquoted
908
version
908
version
909
.Pc :
909
.Pc :
910
.Pp
910
.Pp
911
.Dl `command`
911
.Dl `command`
912
.Pp
912
.Pp
913
The shell expands the command substitution by executing command in a
913
The shell expands the command substitution by executing command in a
914
subshell environment and replacing the command substitution with the
914
subshell environment and replacing the command substitution with the
915
standard output of the command, removing sequences of one or more
915
standard output of the command, removing sequences of one or more
916
<newline>s at the end of the substitution.  (Embedded <newline>s before
916
<newline>s at the end of the substitution.  (Embedded <newline>s before
917
the end of the output are not removed; however, during field splitting,
917
the end of the output are not removed; however, during field splitting,
918
they may be translated into <space>s, depending on the value of
918
they may be translated into <space>s, depending on the value of
919
.Ev IFS
919
.Ev IFS
920
and quoting that is in effect.)
920
and quoting that is in effect.)
921
.Ss Arithmetic Expansion
921
.Ss Arithmetic Expansion
922
.Pp
922
.Pp
923
Arithmetic expansion provides a mechanism for evaluating an arithmetic
923
Arithmetic expansion provides a mechanism for evaluating an arithmetic
924
expression and substituting its value. The format for arithmetic
924
expression and substituting its value. The format for arithmetic
925
expansion is as follows:
925
expansion is as follows:
926
.Pp
926
.Pp
927
.Dl $((expression))
927
.Dl $((expression))
928
.Pp
928
.Pp
929
The expression is treated as if it were in double-quotes, except
929
The expression is treated as if it were in double-quotes, except
930
that a double-quote inside the expression is not treated specially.  The
930
that a double-quote inside the expression is not treated specially.  The
931
shell expands all tokens in the expression for parameter expansion,
931
shell expands all tokens in the expression for parameter expansion,
932
command substitution, and quote removal.
932
command substitution, and quote removal.
933
.Pp
933
.Pp
934
Next, the shell treats this as an arithmetic expression and
934
Next, the shell treats this as an arithmetic expression and
935
substitutes the value of the expression.
935
substitutes the value of the expression.
936
.Ss White Space Splitting (Field Splitting)
936
.Ss White Space Splitting (Field Splitting)
937
After parameter expansion, command substitution, and
937
After parameter expansion, command substitution, and
938
arithmetic expansion the shell scans the results of
938
arithmetic expansion the shell scans the results of
939
expansions and substitutions that did not occur in double-quotes for
939
expansions and substitutions that did not occur in double-quotes for
940
field splitting and multiple fields can result.
940
field splitting and multiple fields can result.
941
.Pp
941
.Pp
942
The shell treats each character of the
942
The shell treats each character of the
943
.Ev IFS
943
.Ev IFS
944
as a delimiter and use the delimiters to split the results of parameter
944
as a delimiter and use the delimiters to split the results of parameter
945
expansion and command substitution into fields.
945
expansion and command substitution into fields.
946
.Ss Pathname Expansion (File Name Generation)
946
.Ss Pathname Expansion (File Name Generation)
947
Unless the
947
Unless the
948
.Fl f
948
.Fl f
949
flag is set, file name generation is performed after word splitting is
949
flag is set, file name generation is performed after word splitting is
950
complete.  Each word is viewed as a series of patterns, separated by
950
complete.  Each word is viewed as a series of patterns, separated by
951
slashes.  The process of expansion replaces the word with the names of all
951
slashes.  The process of expansion replaces the word with the names of all
952
existing files whose names can be formed by replacing each pattern with a
952
existing files whose names can be formed by replacing each pattern with a
953
string that matches the specified pattern. There are two restrictions on
953
string that matches the specified pattern. There are two restrictions on
954
this: first, a pattern cannot match a string containing a slash, and
954
this: first, a pattern cannot match a string containing a slash, and
955
second, a pattern cannot match a string starting with a period unless the
955
second, a pattern cannot match a string starting with a period unless the
956
first character of the pattern is a period. The next section describes the
956
first character of the pattern is a period. The next section describes the
957
patterns used for both Pathname Expansion and the
957
patterns used for both Pathname Expansion and the
958
.Xr case 1
958
.Xr case 1
959
command.
959
command.
960
.Ss Shell Patterns
960
.Ss Shell Patterns
961
A pattern consists of normal characters, which match themselves,
961
A pattern consists of normal characters, which match themselves,
962
and meta-characters.   The meta-characters are
962
and meta-characters.   The meta-characters are
963
.Dq ! ,
963
.Dq ! ,
964
.Dq * ,
964
.Dq * ,
965
.Dq ? ,
965
.Dq ? ,
966
and
966
and
967
.Dq [ .
967
.Dq [ .
968
These characters lose their special meanings if they are quoted.  When
968
These characters lose their special meanings if they are quoted.  When
969
command or variable substitution is performed and the dollar sign or back
969
command or variable substitution is performed and the dollar sign or back
970
quotes are not double quoted, the value of the variable or the output of
970
quotes are not double quoted, the value of the variable or the output of
971
the command is scanned for these characters and they are turned into
971
the command is scanned for these characters and they are turned into
972
meta-characters.
972
meta-characters.
973
.Pp
973
.Pp
974
An asterisk
974
An asterisk
975
.Pq Dq *
975
.Pq Dq *
976
matches any string of characters.  A question mark matches any single
976
matches any string of characters.  A question mark matches any single
977
character. A left bracket
977
character. A left bracket
978
.Pq Dq \&[
978
.Pq Dq \&[
979
introduces a character class.  The end of
979
introduces a character class.  The end of
980
the character class is indicated by a
980
the character class is indicated by a
981
.Pq Dq \&] ;
981
.Pq Dq \&] ;
982
if the
982
if the
983
.Dq \&]
983
.Dq \&]
984
is missing then the
984
is missing then the
985
.Dq \&[
985
.Dq \&[
986
matches a
986
matches a
987
.Dq \&[
987
.Dq \&[
988
rather than introducing a character class.  A character class matches any
988
rather than introducing a character class.  A character class matches any
989
of the characters between the square brackets.  A range of characters may
989
of the characters between the square brackets.  A range of characters may
990
be specified using a minus sign. The character class may be complemented
990
be specified using a minus sign. The character class may be complemented
991
by making an exclamation point the first character of the character class.
991
by making an exclamation point the first character of the character class.
992
.Pp
992
.Pp
993
To include a
993
To include a
994
.Dq \&]
994
.Dq \&]
995
in a character class, make it the first character listed (after the
995
in a character class, make it the first character listed (after the
996
.Dq \&! ,
996
.Dq \&! ,
997
if any).  To include a minus sign, make it the first or last character listed
997
if any).  To include a minus sign, make it the first or last character listed
998
.Ss Builtins
998
.Ss Builtins
999
.Pp
999
.Pp
1000
This section lists the builtin commands which are builtin because they
1000
This section lists the builtin commands which are builtin because they
1001
need to perform some operation that can't be performed by a separate
1001
need to perform some operation that can't be performed by a separate
1002
process. In addition to these, there are several other commands that may
1002
process. In addition to these, there are several other commands that may
1003
be builtin for efficiency (e.g.
1003
be builtin for efficiency (e.g.
1004
.Xr printf 1 ,
1004
.Xr printf 1 ,
1005
.Xr echo 1 ,
1005
.Xr echo 1 ,
1006
.Xr test 1 ,
1006
.Xr test 1 ,
1007
etc).
1007
etc).
1008
.Bl -tag -width 5n
1008
.Bl -tag -width 5n
1009
.It :
1009
.It :
1010
A null command that returns a 0 (true) exit value.
1010
A null command that returns a 0 (true) exit value.
1011
.It \&. file
1011
.It \&. file
1012
The commands in the specified file are read and executed by the shell.
1012
The commands in the specified file are read and executed by the shell.
1013
.It alias Op Ar name Ns Op Ar "=string ..."
1013
.It alias Op Ar name Ns Op Ar "=string ..."
1014
If
1014
If
1015
.Ar name=string
1015
.Ar name=string
1016
is specified, the shell defines the alias
1016
is specified, the shell defines the alias
1017
.Ar name
1017
.Ar name
1018
with value
1018
with value
1019
.Ar string .
1019
.Ar string .
1020
If just
1020
If just
1021
.Ar name
1021
.Ar name
1022
is specified, the value of the alias
1022
is specified, the value of the alias
1023
.Ar name
1023
.Ar name
1024
is printed. With no arguments, the
1024
is printed. With no arguments, the
1025
.Ic alias
1025
.Ic alias
1026
builtin prints the
1026
builtin prints the
1027
names and values of all defined aliases (see
1027
names and values of all defined aliases (see
1028
.Ic unalias ) .
1028
.Ic unalias ) .
1029
.It bg [ Ar job ] ...
1029
.It bg [ Ar job ] ...
1030
Continue the specified jobs (or the current job if no
1030
Continue the specified jobs (or the current job if no
1031
jobs are given) in the background.
1031
jobs are given) in the background.
1032
.It command Ar command Ar arg...
1032
.It command Ar command Ar arg...
1033
Execute the specified builtin command.  (This is useful when you
1033
Execute the specified builtin command.  (This is useful when you
1034
have a shell function with the same name as a builtin command.)
1034
have a shell function with the same name as a builtin command.)
1035
.It cd Op Ar directory
1035
.It cd Op Ar directory
1036
Switch to the specified directory (default
1036
Switch to the specified directory (default
1037
.Ev $HOME ) .
1037
.Ev $HOME ) .
1038
If an entry for
1038
If an entry for
1039
.Ev CDPATH
1039
.Ev CDPATH
1040
appears in the environment of the
1040
appears in the environment of the
1041
.Ic cd
1041
.Ic cd
1042
command or the shell variable
1042
command or the shell variable
1043
.Ev CDPATH
1043
.Ev CDPATH
1044
is set and the directory name does not begin with a slash, then the
1044
is set and the directory name does not begin with a slash, then the
1045
directories listed in
1045
directories listed in
1046
.Ev CDPATH
1046
.Ev CDPATH
1047
will be searched for the specified directory.  The format of
1047
will be searched for the specified directory.  The format of
1048
.Ev CDPATH
1048
.Ev CDPATH
1049
is the same as that of
1049
is the same as that of
1050
.Ev PATH .
1050
.Ev PATH .
1051
In an interactive shell, the
1051
In an interactive shell, the
1052
.Ic cd
1052
.Ic cd
1053
command will print out the name of the
1053
command will print out the name of the
1054
directory that it actually switched to if this is different from the name
1054
directory that it actually switched to if this is different from the name
1055
that the user gave.  These may be different either because the
1055
that the user gave.  These may be different either because the
1056
.Ev CDPATH
1056
.Ev CDPATH
1057
mechanism was used or because a symbolic link was crossed.
1057
mechanism was used or because a symbolic link was crossed.
1058
.It eval Ar string...
1058
.It eval Ar string...
1059
Concatenate all the arguments with spaces.  Then re-parse and execute
1059
Concatenate all the arguments with spaces.  Then re-parse and execute
1060
the command.
1060
the command.
1061
.It exec Op Ar command arg...
1061
.It exec Op Ar command arg...
1062
Unless command is omitted, the shell process is replaced with the
1062
Unless command is omitted, the shell process is replaced with the
1063
specified program (which must be a real program, not a shell builtin or
1063
specified program (which must be a real program, not a shell builtin or
1064
function).  Any redirections on the
1064
function).  Any redirections on the
1065
.Ic exec
1065
.Ic exec
1066
command are marked as permanent, so that they are not undone when the
1066
command are marked as permanent, so that they are not undone when the
1067
.Ic exec
1067
.Ic exec
1068
command finishes.
1068
command finishes.
1069
.It exit Op Ar exitstatus
1069
.It exit Op Ar exitstatus
1070
Terminate the shell process.  If
1070
Terminate the shell process.  If
1071
.Ar exitstatus
1071
.Ar exitstatus
1072
is given it is used as the exit status of the shell; otherwise the
1072
is given it is used as the exit status of the shell; otherwise the
1073
exit status of the preceding command is used.
1073
exit status of the preceding command is used.
1074
.It export Ar name...
1074
.It export Ar name...
1075
.It export Fl p
1075
.It export Fl p
1076
The specified names are exported so that they will appear in the
1076
The specified names are exported so that they will appear in the
1077
environment of subsequent commands. The only way to un-export a variable
1077
environment of subsequent commands. The only way to un-export a variable
1078
is to unset it. The shell allows the value of a variable to be set at the
1078
is to unset it. The shell allows the value of a variable to be set at the
1079
same time it is exported by writing
1079
same time it is exported by writing
1080
.Pp
1080
.Pp
1081
.Dl export name=value
1081
.Dl export name=value
1082
.Pp
1082
.Pp
1083
With no arguments the export command lists the names of all exported variables.
1083
With no arguments the export command lists the names of all exported variables.
1084
With the
1084
With the
1085
.Fl p
1085
.Fl p
1086
option specified the output will be formatted suitably for non-interactive use.
1086
option specified the output will be formatted suitably for non-interactive use.
1087
.It Xo fc Op Fl e Ar editor
1087
.It Xo fc Op Fl e Ar editor
1088
.Op Ar first Op Ar last
1088
.Op Ar first Op Ar last
1089
.Xc
1089
.Xc
1090
.It Xo fc Fl l
1090
.It Xo fc Fl l
1091
.Op Fl nr
1091
.Op Fl nr
1092
.Op Ar first Op Ar last
1092
.Op Ar first Op Ar last
1093
.Xc
1093
.Xc
1094
.It Xo fc Fl s Op Ar old=new
1094
.It Xo fc Fl s Op Ar old=new
1095
.Op Ar first
1095
.Op Ar first
1096
.Xc
1096
.Xc
1097
The
1097
The
1098
.Ic fc
1098
.Ic fc
1099
builtin lists, or edits and re-executes, commands previously entered
1099
builtin lists, or edits and re-executes, commands previously entered
1100
to an interactive shell.
1100
to an interactive shell.
1101
.Bl -tag -width 5n
1101
.Bl -tag -width 5n
1102
.It Fl e No editor
1102
.It Fl e No editor
1103
Use the editor named by editor to edit the commands.  The
1103
Use the editor named by editor to edit the commands.  The
1104
editor string is a command name, subject to search via the
1104
editor string is a command name, subject to search via the
1105
.Ev PATH
1105
.Ev PATH
1106
variable.  The value in the
1106
variable.  The value in the
1107
.Ev FCEDIT
1107
.Ev FCEDIT
1108
variable is used as a default when
1108
variable is used as a default when
1109
.Fl e
1109
.Fl e
1110
is not specified.  If
1110
is not specified.  If
1111
.Ev FCEDIT
1111
.Ev FCEDIT
1112
is null or unset, the value of the
1112
is null or unset, the value of the
1113
.Ev EDITOR
1113
.Ev EDITOR
1114
variable is used.  If
1114
variable is used.  If
1115
.Ev EDITOR
1115
.Ev EDITOR
1116
is null or unset,
1116
is null or unset,
1117
.Xr ed 1
1117
.Xr ed 1
1118
is used as the editor.
1118
is used as the editor.
1119
.It Fl l No (ell)
1119
.It Fl l No (ell)
1120
List the commands rather than invoking an editor on them.  The commands
1120
List the commands rather than invoking an editor on them.  The commands
1121
are written in the sequence indicated by the first and last operands, as
1121
are written in the sequence indicated by the first and last operands, as
1122
affected by
1122
affected by
1123
.Fl r ,
1123
.Fl r ,
1124
with each command preceded by the command number.
1124
with each command preceded by the command number.
1125
.It Fl n
1125
.It Fl n
1126
Suppress command numbers when listing with -l.
1126
Suppress command numbers when listing with -l.
1127
.It Fl r
1127
.It Fl r
1128
Reverse the order of the commands listed (with
1128
Reverse the order of the commands listed (with
1129
.Fl l )
1129
.Fl l )
1130
or edited (with neither
1130
or edited (with neither
1131
.Fl l
1131
.Fl l
1132
nor
1132
nor
1133
.Fl s ) .
1133
.Fl s ) .
1134
.It Fl s
1134
.It Fl s
1135
Re-execute the command without invoking an editor.
1135
Re-execute the command without invoking an editor.
1136
.It first
1136
.It first
1137
.It last
1137
.It last
1138
Select the commands to list or edit.  The number of previous commands that
1138
Select the commands to list or edit.  The number of previous commands that
1139
can be accessed are determined by the value of the
1139
can be accessed are determined by the value of the
1140
.Ev HISTSIZE
1140
.Ev HISTSIZE
1141
variable.  The value of first or last or both are one of the following:
1141
variable.  The value of first or last or both are one of the following:
1142
.Bl -tag -width 5n
1142
.Bl -tag -width 5n
1143
.It [+]number
1143
.It [+]number
1144
A positive number representing a command number; command numbers can be
1144
A positive number representing a command number; command numbers can be
1145
displayed with the
1145
displayed with the
1146
.Fl l
1146
.Fl l
1147
option.
1147
option.
1148
.It Fl number
1148
.It Fl number
1149
A negative decimal number representing the command that was executed
1149
A negative decimal number representing the command that was executed
1150
number of commands previously.  For example, -1 is the immediately
1150
number of commands previously.  For example, -1 is the immediately
1151
previous command.
1151
previous command.
1152
.El
1152
.El
1153
.It string
1153
.It string
1154
A string indicating the most recently entered command that begins with
1154
A string indicating the most recently entered command that begins with
1155
that string.  If the old=new operand is not also specified with
1155
that string.  If the old=new operand is not also specified with
1156
.Fl s ,
1156
.Fl s ,
1157
the string form of the first operand cannot contain an embedded equal sign.
1157
the string form of the first operand cannot contain an embedded equal sign.
1158
.El
1158
.El
1159
.Pp
1159
.Pp
1160
The following environment variables affect the execution of fc:
1160
The following environment variables affect the execution of fc:
1161
.Bl -tag -width HISTSIZE
1161
.Bl -tag -width HISTSIZE
1162
.It Ev FCEDIT
1162
.It Ev FCEDIT
1163
Name of the editor to use.
1163
Name of the editor to use.
1164
.It Ev HISTSIZE
1164
.It Ev HISTSIZE
1165
The number of previous commands that are accessible.
1165
The number of previous commands that are accessible.
1166
.El
1166
.El
1167
.It fg Op Ar job
1167
.It fg Op Ar job
1168
Move the specified job or the current job to the foreground.
1168
Move the specified job or the current job to the foreground.
1169
.It getopts Ar optstring var
1169
.It getopts Ar optstring var
1170
The
1170
The
1171
.Tn POSIX
1171
.Tn POSIX
1172
.Ic getopts
1172
.Ic getopts
1173
command, not to be confused with the
1173
command, not to be confused with the
1174
.Em Bell Labs
1174
.Em Bell Labs
1175
-derived
1175
-derived
1176
.Xr getopt 1 .
1176
.Xr getopt 1 .
1177
.Pp
1177
.Pp
1178
The first argument should be a series of letters, each of which may be
1178
The first argument should be a series of letters, each of which may be
1179
optionally followed by a colon to indicate that the option requires an
1179
optionally followed by a colon to indicate that the option requires an
1180
argument.  The variable specified is set to the parsed option.
1180
argument.  The variable specified is set to the parsed option.
1181
.Pp
1181
.Pp
1182
The
1182
The
1183
.Ic getopts
1183
.Ic getopts
1184
command deprecates the older
1184
command deprecates the older
1185
.Xr getopt 1
1185
.Xr getopt 1
1186
utility due to its handling of arguments containing whitespace.
1186
utility due to its handling of arguments containing whitespace.
1187
.Pp
1187
.Pp
1188
The
1188
The
1189
.Ic getopts
1189
.Ic getopts
1190
builtin may be used to obtain options and their arguments
1190
builtin may be used to obtain options and their arguments
1191
from a list of parameters.  When invoked,
1191
from a list of parameters.  When invoked,
1192
.Ic getopts
1192
.Ic getopts
1193
places the value of the next option from the option string in the list in
1193
places the value of the next option from the option string in the list in
1194
the shell variable specified by
1194
the shell variable specified by
1195
.Va var
1195
.Va var
1196
and it's index in the shell variable
1196
and it's index in the shell variable
1197
.Ev OPTIND .
1197
.Ev OPTIND .
1198
When the shell is invoked,
1198
When the shell is invoked,
1199
.Ev OPTIND
1199
.Ev OPTIND
1200
is initialized to 1.  For each option that requires an argument, the
1200
is initialized to 1.  For each option that requires an argument, the
1201
.Ic getopts
1201
.Ic getopts
1202
builtin will place it in the shell variable
1202
builtin will place it in the shell variable
1203
.Ev OPTARG .
1203
.Ev OPTARG .
1204
If an option is not allowed for in the
1204
If an option is not allowed for in the
1205
.Va optstring ,
1205
.Va optstring ,
1206
then
1206
then
1207
.Ev OPTARG
1207
.Ev OPTARG
1208
will be unset.
1208
will be unset.
1209
.Pp
1209
.Pp
1210
.Va optstring
1210
.Va optstring
1211
is a string of recognized option letters (see
1211
is a string of recognized option letters (see
1212
.Xr getopt 3 ) .
1212
.Xr getopt 3 ) .
1213
If a letter is followed by a colon, the option is expected to have an
1213
If a letter is followed by a colon, the option is expected to have an
1214
argument which may or may not be separated from it by white space.  If an
1214
argument which may or may not be separated from it by white space.  If an
1215
option character is not found where expected,
1215
option character is not found where expected,
1216
.Ic getopts
1216
.Ic getopts
1217
will set the variable
1217
will set the variable
1218
.Va var
1218
.Va var
1219
to a
1219
to a
1220
.Dq ? ;
1220
.Dq ? ;
1221
.Ic getopts
1221
.Ic getopts
1222
will then unset
1222
will then unset
1223
.Ev OPTARG
1223
.Ev OPTARG
1224
and write output to standard error.  By specifying a colon as the
1224
and write output to standard error.  By specifying a colon as the
1225
first character of
1225
first character of
1226
.Va optstring
1226
.Va optstring
1227
all errors will be ignored.
1227
all errors will be ignored.
1228
.Pp
1228
.Pp
1229
A nonzero value is returned when the last option is reached.
1229
A nonzero value is returned when the last option is reached.
1230
If there are no remaining arguments,
1230
If there are no remaining arguments,
1231
.Ic getopts
1231
.Ic getopts
1232
will set
1232
will set
1233
.Va var
1233
.Va var
1234
to the special option,
1234
to the special option,
1235
.Dq -- ,
1235
.Dq -- ,
1236
otherwise, it will set
1236
otherwise, it will set
1237
.Va var
1237
.Va var
1238
to
1238
to
1239
.Dq ? .
1239
.Dq ? .
1240
.Pp
1240
.Pp
1241
The following code fragment shows how one might process the arguments
1241
The following code fragment shows how one might process the arguments
1242
for a command that can take the options
1242
for a command that can take the options
1243
.Op a
1243
.Op a
1244
and
1244
and
1245
.Op b ,
1245
.Op b ,
1246
and the option
1246
and the option
1247
.Op c ,
1247
.Op c ,
1248
which requires an argument.
1248
which requires an argument.
1249
.Pp
1249
.Pp
1250
.Bd -literal -offset indent
1250
.Bd -literal -offset indent
1251
while getopts abc: f
1251
while getopts abc: f
1252
do
1252
do
1253
	case $f in
1253
	case $f in
1254
	a | b)	flag=$f;;
1254
	a | b)	flag=$f;;
1255
	c)	carg=$OPTARG;;
1255
	c)	carg=$OPTARG;;
1256
	\\?)	echo $USAGE; exit 1;;
1256
	\\?)	echo $USAGE; exit 1;;
1257
	esac
1257
	esac
1258
done
1258
done
1259
shift `expr $OPTIND - 1`
1259
shift `expr $OPTIND - 1`
1260
.Ed
1260
.Ed
1261
.Pp
1261
.Pp
1262
This code will accept any of the following as equivalent:
1262
This code will accept any of the following as equivalent:
1263
.Pp
1263
.Pp
1264
.Bd -literal -offset indent
1264
.Bd -literal -offset indent
1265
cmd \-acarg file file
1265
cmd \-acarg file file
1266
cmd \-a \-c arg file file
1266
cmd \-a \-c arg file file
1267
cmd \-carg -a file file
1267
cmd \-carg -a file file
1268
cmd \-a \-carg \-\- file file
1268
cmd \-a \-carg \-\- file file
1269
.Ed
1269
.Ed
1270
.It hash Fl rv Ar command...
1270
.It hash Fl rv Ar command...
1271
The shell maintains a hash table which remembers the
1271
The shell maintains a hash table which remembers the
1272
locations of commands.  With no arguments whatsoever,
1272
locations of commands.  With no arguments whatsoever,
1273
the
1273
the
1274
.Ic hash
1274
.Ic hash
1275
command prints out the contents of this table.  Entries which have not
1275
command prints out the contents of this table.  Entries which have not
1276
been looked at since the last
1276
been looked at since the last
1277
.Ic cd
1277
.Ic cd
1278
command are marked with an asterisk; it is possible for these entries
1278
command are marked with an asterisk; it is possible for these entries
1279
to be invalid.
1279
to be invalid.
1280
.Pp
1280
.Pp
1281
With arguments, the
1281
With arguments, the
1282
.Ic hash
1282
.Ic hash
1283
command removes the specified commands from the hash table (unless
1283
command removes the specified commands from the hash table (unless
1284
they are functions) and then locates them.  With the
1284
they are functions) and then locates them.  With the
1285
.Fl v
1285
.Fl v
1286
option, hash prints the locations of the commands as it finds them.  The
1286
option, hash prints the locations of the commands as it finds them.  The
1287
.Fl r
1287
.Fl r
1288
option causes the hash command to delete all the entries in the hash table
1288
option causes the hash command to delete all the entries in the hash table
1289
except for functions.
1289
except for functions.
1290
.It jobid Op Ar job
1290
.It jobid Op Ar job
1291
Print the process id's of the processes in the job.
1291
Print the process id's of the processes in the job.
1292
If the
1292
If the
1293
.Ar job
1293
.Ar job
1294
argument is omitted, the current job is used.
1294
argument is omitted, the current job is used.
1295
.It jobs
1295
.It jobs
1296
This command lists out all the background processes
1296
This command lists out all the background processes
1297
which are children of the current shell process.
1297
which are children of the current shell process.
1298
.It pwd
1298
.It pwd
1299
Print the current directory.  The builtin command may
1299
Print the current directory.  The builtin command may
1300
differ from the program of the same name because the
1300
differ from the program of the same name because the
1301
builtin command remembers what the current directory
1301
builtin command remembers what the current directory
1302
is rather than recomputing it each time.  This makes
1302
is rather than recomputing it each time.  This makes
1303
it faster.  However, if the current directory is
1303
it faster.  However, if the current directory is
1304
renamed, the builtin version of
1304
renamed, the builtin version of
1305
.Ic pwd
1305
.Ic pwd
1306
will continue to print the old name for the directory.
1306
will continue to print the old name for the directory.
1307
.It Xo read Op Fl p Ar prompt
1307
.It Xo read Op Fl p Ar prompt
1308
.Op Fl r
1308
.Op Fl r
1309
.Ar variable...
1309
.Ar variable...
1310
.Xc
1310
.Xc
1311
The prompt is printed if the
1311
The prompt is printed if the
1312
.Fl p
1312
.Fl p
1313
option is specified and the standard input is a terminal.  Then a line is
1313
option is specified and the standard input is a terminal.  Then a line is
1314
read from the standard input.  The trailing newline is deleted from the
1314
read from the standard input.  The trailing newline is deleted from the
1315
line and the line is split as described in the section on word splitting
1315
line and the line is split as described in the section on word splitting
1316
above, and the pieces are assigned to the variables in order.
1316
above, and the pieces are assigned to the variables in order.
1317
At least one variable must be specified.
1317
At least one variable must be specified.
1318
If there are
1318
If there are
1319
more pieces than variables, the remaining pieces (along with the
1319
more pieces than variables, the remaining pieces (along with the
1320
characters in
1320
characters in
1321
.Ev IFS
1321
.Ev IFS
1322
that separated them) are assigned to the last variable. If there are more
1322
that separated them) are assigned to the last variable. If there are more
1323
variables than pieces, the remaining variables are assigned the null
1323
variables than pieces, the remaining variables are assigned the null
1324
string. The
1324
string. The
1325
.Ic read
1325
.Ic read
1326
builtin will indicate success unless EOF is encountered on input, in
1326
builtin will indicate success unless EOF is encountered on input, in
1327
which case failure is returned.
1327
which case failure is returned.
1328
.Pp
1328
.Pp
1329
By default, unless the
1329
By default, unless the
1330
.Fl r
1330
.Fl r
1331
option is specified, the backslash
1331
option is specified, the backslash
1332
.Dq \e
1332
.Dq \e
1333
acts as an escape character, causing the following character to be treated
1333
acts as an escape character, causing the following character to be treated
1334
literally.  If a backslash is followed by a newline, the backslash and the
1334
literally.  If a backslash is followed by a newline, the backslash and the
1335
newline will be deleted.
1335
newline will be deleted.
1336
.It readonly Ar name...
1336
.It readonly Ar name...
1337
.It readonly Fl p
1337
.It readonly Fl p
1338
The specified names are marked as read only, so that they cannot be
1338
The specified names are marked as read only, so that they cannot be
1339
subsequently modified or unset.  The shell allows the value of a variable
1339
subsequently modified or unset.  The shell allows the value of a variable
1340
to be set at the same time it is marked read only by writing
1340
to be set at the same time it is marked read only by writing
1341
.Pp
1341
.Pp
1342
.Dl readonly name=value
1342
.Dl readonly name=value
1343
.Pp
1343
.Pp
1344
With no arguments the readonly command lists the names of all read only
1344
With no arguments the readonly command lists the names of all read only
1345
variables.
1345
variables.
1346
With the
1346
With the
1347
.Fl p
1347
.Fl p
1348
option specified the output will be formatted suitably for non-interactive use.
1348
option specified the output will be formatted suitably for non-interactive use.
1349
.Pp
1349
.Pp
1350
.It Xo set
1350
.It Xo set
1351
.Oo {
1351
.Oo {
1352
.Fl options | Cm +options | Cm -- }
1352
.Fl options | Cm +options | Cm -- }
1353
.Oc Ar arg...
1353
.Oc Ar arg...
1354
.Xc
1354
.Xc
1355
The
1355
The
1356
.Ic set
1356
.Ic set
1357
command performs three different functions.
1357
command performs three different functions.
1358
.Pp
1358
.Pp
1359
With no arguments, it lists the values of all shell
1359
With no arguments, it lists the values of all shell
1360
variables.
1360
variables.
1361
.Pp
1361
.Pp
1362
If options are given, it sets the specified option
1362
If options are given, it sets the specified option
1363
flags, or clears them as described in the section
1363
flags, or clears them as described in the section
1364
called
1364
called
1365
.Sx Argument List Processing .
1365
.Sx Argument List Processing .
1366
.Pp
1366
.Pp
1367
The third use of the set command is to set the values of the shell's
1367
The third use of the set command is to set the values of the shell's
1368
positional parameters to the specified args.  To change the positional
1368
positional parameters to the specified args.  To change the positional
1369
parameters without changing any options, use
1369
parameters without changing any options, use
1370
.Dq --
1370
.Dq --
1371
as the first argument to set.  If no args are present, the set command
1371
as the first argument to set.  If no args are present, the set command
1372
will clear all the positional parameters (equivalent to executing
1372
will clear all the positional parameters (equivalent to executing
1373
.Dq shift $# . )
1373
.Dq shift $# . )
1374
.It setvar Ar variable Ar value
1374
.It setvar Ar variable Ar value
1375
Assigns value to variable. (In general it is better to write
1375
Assigns value to variable. (In general it is better to write
1376
variable=value rather than using
1376
variable=value rather than using
1377
.Ic setvar .
1377
.Ic setvar .
1378
.Ic setvar 
1378
.Ic setvar 
1379
is intended to be used in
1379
is intended to be used in
1380
functions that assign values to variables whose names are passed as
1380
functions that assign values to variables whose names are passed as
1381
parameters.)
1381
parameters.)
1382
.It shift Op Ar n
1382
.It shift Op Ar n
1383
Shift the positional parameters n times.  A
1383
Shift the positional parameters n times.  A
1384
.Ic shift
1384
.Ic shift
1385
sets the value of
1385
sets the value of
1386
.Va $1
1386
.Va $1
1387
to the value of
1387
to the value of
1388
.Va $2 ,
1388
.Va $2 ,
1389
the value of
1389
the value of
1390
.Va $2
1390
.Va $2
1391
to the value of
1391
to the value of
1392
.Va $3 ,
1392
.Va $3 ,
1393
and so on, decreasing
1393
and so on, decreasing
1394
the value of
1394
the value of
1395
.Va $#
1395
.Va $#
1396
by one. If there are zero positional parameters,
1396
by one. If there are zero positional parameters,
1397
.Ic shift
1397
.Ic shift
1398
does nothing.
1398
does nothing.
1399
.It times
1399
.It times
1400
Print the accumulated user and system times for the shell and for processes
1400
Print the accumulated user and system times for the shell and for processes
1401
run from the shell.  The return status is 0.
1401
run from the shell.  The return status is 0.
1402
.It Xo trap
1402
.It Xo trap
1403
.Op Ar action
1403
.Op Ar action
1404
.Ar signal...
1404
.Ar signal...
1405
.Xc
1405
.Xc
1406
Cause the shell to parse and execute action when any of the specified
1406
Cause the shell to parse and execute action when any of the specified
1407
signals are received. The signals are specified by signal number. If
1407
signals are received. The signals are specified by signal number. If
1408
.Ar signal
1408
.Ar signal
1409
is
1409
is
1410
.Li 0 ,
1410
.Li 0 ,
1411
the action is executed when the shell exits.
1411
the action is executed when the shell exits.
1412
.Ar action
1412
.Ar action
1413
may be null or omitted; the former causes the specified signal to be
1413
may be null or omitted; the former causes the specified signal to be
1414
ignored and the latter causes the default action to be taken. When the
1414
ignored and the latter causes the default action to be taken. When the
1415
shell forks off a subshell, it resets trapped (but not ignored) signals to
1415
shell forks off a subshell, it resets trapped (but not ignored) signals to
1416
the default action. The
1416
the default action. The
1417
.Ic trap
1417
.Ic trap
1418
command has no effect on signals that were
1418
command has no effect on signals that were
1419
ignored on entry to the shell.
1419
ignored on entry to the shell.
1420
.It type Op Ar name ...
1420
.It type Op Ar name ...
1421
Interpret each name as a command and print the resolution of the command
1421
Interpret each name as a command and print the resolution of the command
1422
search. Possible resolutions are:
1422
search. Possible resolutions are:
1423
shell keyword, alias, shell builtin,
1423
shell keyword, alias, shell builtin,
1424
command, tracked alias and not found.  For aliases the alias expansion is
1424
command, tracked alias and not found.  For aliases the alias expansion is
1425
printed; for commands and tracked aliases the complete pathname of the
1425
printed; for commands and tracked aliases the complete pathname of the
1426
command is printed.
1426
command is printed.
1427
.It ulimit Xo
1427
.It ulimit Xo
1428
.Op Fl H \*(Ba Fl S
1428
.Op Fl H \*(Ba Fl S
1429
.Op Fl a \*(Ba Fl tfdscmlpn Op Ar value
1429
.Op Fl a \*(Ba Fl tfdscmlpn Op Ar value
1430
.Xc
1430
.Xc
1431
Inquire about or set the hard or soft limits on processes or set new
1431
Inquire about or set the hard or soft limits on processes or set new
1432
limits. The choice between hard limit (which no process is allowed to
1432
limits. The choice between hard limit (which no process is allowed to
1433
violate, and which may not be raised once it has been lowered) and soft
1433
violate, and which may not be raised once it has been lowered) and soft
1434
limit (which causes processes to be signaled but not necessarily killed,
1434
limit (which causes processes to be signaled but not necessarily killed,
1435
and which may be raised) is made with these flags:
1435
and which may be raised) is made with these flags:
1436
.Bl -tag -width Fl
1436
.Bl -tag -width Fl
1437
.It Fl H
1437
.It Fl H
1438
set or inquire about hard limits
1438
set or inquire about hard limits
1439
.It Fl S
1439
.It Fl S
1440
set or inquire about soft limits. If neither
1440
set or inquire about soft limits. If neither
1441
.Fl H
1441
.Fl H
1442
nor
1442
nor
1443
.Fl S
1443
.Fl S
1444
is specified, the soft limit is displayed or both limits are set. If both
1444
is specified, the soft limit is displayed or both limits are set. If both
1445
are specified, the last one wins.
1445
are specified, the last one wins.
1446
.El
1446
.El
1447
.Pp
1447
.Pp
1448
.Bl -tag -width Fl
1448
.Bl -tag -width Fl
1449
The limit to be interrogated or set, then, is chosen by specifying
1449
The limit to be interrogated or set, then, is chosen by specifying
1450
any one of these flags:
1450
any one of these flags:
1451
.It Fl a
1451
.It Fl a
1452
show all the current limits
1452
show all the current limits
1453
.It Fl t
1453
.It Fl t
1454
show or set the limit on CPU time (in seconds)
1454
show or set the limit on CPU time (in seconds)
1455
.It Fl f
1455
.It Fl f
1456
show or set the limit on the largest file that can be created
1456
show or set the limit on the largest file that can be created
1457
(in 512-byte blocks)
1457
(in 512-byte blocks)
1458
.It Fl d
1458
.It Fl d
1459
show or set the limit on the data segment size of a process (in kilobytes)
1459
show or set the limit on the data segment size of a process (in kilobytes)
1460
.It Fl s
1460
.It Fl s
1461
show or set the limit on the stack size of a process (in kilobytes)
1461
show or set the limit on the stack size of a process (in kilobytes)
1462
.It Fl c
1462
.It Fl c
1463
show or set the limit on the largest core dump size that can be produced
1463
show or set the limit on the largest core dump size that can be produced
1464
(in 512-byte blocks)
1464
(in 512-byte blocks)
1465
.It Fl m
1465
.It Fl m
1466
show or set the limit on the total physical memory that can be
1466
show or set the limit on the total physical memory that can be
1467
in use by a process (in kilobytes)
1467
in use by a process (in kilobytes)
1468
.It Fl l
1468
.It Fl l
1469
show or set the limit on how much memory a process can lock with
1469
show or set the limit on how much memory a process can lock with
1470
.Xr mlock 2
1470
.Xr mlock 2
1471
(in kilobytes)
1471
(in kilobytes)
1472
.It Fl p
1472
.It Fl p
1473
show or set the limit on the number of processes this user can
1473
show or set the limit on the number of processes this user can
1474
have at one time
1474
have at one time
1475
.It Fl n
1475
.It Fl n
1476
show or set the limit on the number files a process can have open at once
1476
show or set the limit on the number files a process can have open at once
1477
.El
1477
.El
1478
.Pp
1478
.Pp
1479
If none of these is specified, it is the limit on file size that is shown
1479
If none of these is specified, it is the limit on file size that is shown
1480
or set. If value is specified, the limit is set to that number; otherwise
1480
or set. If value is specified, the limit is set to that number; otherwise
1481
the current limit is displayed.
1481
the current limit is displayed.
1482
.Pp
1482
.Pp
1483
Limits of an arbitrary process can be displayed or set using the
1483
Limits of an arbitrary process can be displayed or set using the
1484
.Xr sysctl 8
1484
.Xr sysctl 8
1485
utility.
1485
utility.
1486
.Pp
1486
.Pp
1487
.It umask Op Ar mask
1487
.It umask Op Ar mask
1488
Set the value of umask (see
1488
Set the value of umask (see
1489
.Xr umask 2 )
1489
.Xr umask 2 )
1490
to the specified octal value. If the argument is omitted, the umask value
1490
to the specified octal value. If the argument is omitted, the umask value
1491
is printed.
1491
is printed.
1492
.It unalias Xo
1492
.It unalias Xo
1493
.Op Fl a
1493
.Op Fl a
1494
.Op Ar name
1494
.Op Ar name
1495
.Xc
1495
.Xc
1496
If
1496
If
1497
.Ar name
1497
.Ar name
1498
is specified, the shell removes that alias. If
1498
is specified, the shell removes that alias. If
1499
.Fl a
1499
.Fl a
1500
is specified, all aliases are removed.
1500
is specified, all aliases are removed.
1501
.It unset Ar name...
1501
.It unset Ar name...
1502
The specified variables and functions are unset and unexported. If a given
1502
The specified variables and functions are unset and unexported. If a given
1503
name corresponds to both a variable and a function, both the variable and
1503
name corresponds to both a variable and a function, both the variable and
1504
the function are unset.
1504
the function are unset.
1505
.It wait Op Ar job
1505
.It wait Op Ar job
1506
Wait for the specified job to complete and return the exit status of the
1506
Wait for the specified job to complete and return the exit status of the
1507
last process in the job. If the argument is omitted, wait for all jobs to
1507
last process in the job. If the argument is omitted, wait for all jobs to
1508
complete and the return an exit status of zero.
1508
complete and the return an exit status of zero.
1509
.El
1509
.El
1510
.Ss Command Line Editing
1510
.Ss Command Line Editing
1511
When
1511
When
1512
.Nm
1512
.Nm
1513
is being used interactively from a terminal, the current command
1513
is being used interactively from a terminal, the current command
1514
and the command history (see
1514
and the command history (see
1515
.Ic fc
1515
.Ic fc
1516
in
1516
in
1517
.Sx Builtins )
1517
.Sx Builtins )
1518
can be edited using vi-mode command-line editing. This mode uses commands,
1518
can be edited using vi-mode command-line editing. This mode uses commands,
1519
described below, similar to a subset of those described in the vi man
1519
described below, similar to a subset of those described in the vi man
1520
page. The command
1520
page. The command
1521
.Ql set -o vi
1521
.Ql set -o vi
1522
enables vi-mode editing and place sh into vi insert mode. With vi-mode
1522
enables vi-mode editing and place sh into vi insert mode. With vi-mode
1523
enabled, sh can be switched between insert mode and command mode. The
1523
enabled, sh can be switched between insert mode and command mode. The
1524
editor is not described in full here, but will be in a later document.
1524
editor is not described in full here, but will be in a later document.
1525
It's similar to vi: typing
1525
It's similar to vi: typing
1526
.Aq ESC
1526
.Aq ESC
1527
will throw you into command VI command mode. Hitting
1527
will throw you into command VI command mode. Hitting
1528
.Aq return
1528
.Aq return
1529
while in command mode will pass the line to the shell.
1529
while in command mode will pass the line to the shell.
1530
.Sh ENVIRONMENT
1530
.Sh ENVIRONMENT
1531
.Bl -tag -width MAILCHECK
1531
.Bl -tag -width MAILCHECK
1532
.It Ev HOME
1532
.It Ev HOME
1533
Set automaticly by
1533
Set automaticly by
1534
.Xr login 1
1534
.Xr login 1
1535
from the user's login directory in the password file
1535
from the user's login directory in the password file
1536
.Pq Xr passwd 4 .
1536
.Pq Xr passwd 4 .
1537
This environment variable also functions as the default argument for the
1537
This environment variable also functions as the default argument for the
1538
cd builtin.
1538
cd builtin.
1539
.It Ev PATH
1539
.It Ev PATH
1540
The default search path for executables.  See the above section
1540
The default search path for executables.  See the above section
1541
.Sx Path Search .
1541
.Sx Path Search .
1542
.It Ev CDPATH
1542
.It Ev CDPATH
1543
The search path used with the cd builtin.
1543
The search path used with the cd builtin.
1544
.It Ev MAIL
1544
.It Ev MAIL
1545
The name of a mail file, that will be checked for the arrival of new mail.
1545
The name of a mail file, that will be checked for the arrival of new mail.
1546
Overridden by
1546
Overridden by
1547
.Ev MAILPATH .
1547
.Ev MAILPATH .
1548
.It Ev MAILCHECK
1548
.It Ev MAILCHECK
1549
The frequency in seconds that the shell checks for the arrival of mail
1549
The frequency in seconds that the shell checks for the arrival of mail
1550
in the files specified by the
1550
in the files specified by the
1551
.Ev MAILPATH
1551
.Ev MAILPATH
1552
or the
1552
or the
1553
.Ev MAIL
1553
.Ev MAIL
1554
file.  If set to 0, the check will occur at each prompt.
1554
file.  If set to 0, the check will occur at each prompt.
1555
.It Ev MAILPATH
1555
.It Ev MAILPATH
1556
A colon
1556
A colon
1557
.Dq \&:
1557
.Dq \&:
1558
separated list of file names, for the shell to check for incoming mail.
1558
separated list of file names, for the shell to check for incoming mail.
1559
This environment setting overrides the
1559
This environment setting overrides the
1560
.Ev MAIL
1560
.Ev MAIL
1561
setting.  There is a maximum of 10 mailboxes that can be monitored at once.
1561
setting.  There is a maximum of 10 mailboxes that can be monitored at once.
1562
.It Ev PS1
1562
.It Ev PS1
1563
The primary prompt string, which defaults to
1563
The primary prompt string, which defaults to
1564
.Dq $ \  ,
1564
.Dq $ \  ,
1565
unless you are the superuser, in which case it defaults to
1565
unless you are the superuser, in which case it defaults to
1566
.Dq # \  .
1566
.Dq # \  .
1567
.It Ev PS2
1567
.It Ev PS2
1568
The secondary prompt string, which defaults to
1568
The secondary prompt string, which defaults to
1569
.Dq > \  .
1569
.Dq > \  .
1570
.It Ev IFS
1570
.It Ev IFS
1571
Input Field Separators.  This is normally set to <space> <tab> and
1571
Input Field Separators.  This is normally set to <space> <tab> and
1572
<newline>.  See the
1572
<newline>.  See the
1573
.Sx White Space Splitting
1573
.Sx White Space Splitting
1574
section for more details.
1574
section for more details.
1575
.It Ev TERM
1575
.It Ev TERM
1576
The default terminal setting for the shell.  This is inherited by
1576
The default terminal setting for the shell.  This is inherited by
1577
children of the shell, and is used in the history editing modes.
1577
children of the shell, and is used in the history editing modes.
1578
.It Ev HISTSIZE
1578
.It Ev HISTSIZE
1579
The number of lines in the history buffer for the shell.
1579
The number of lines in the history buffer for the shell.
1580
.El
1580
.El
1581
.Sh FILES
1581
.Sh FILES
1582
.Bl -item -width HOMEprofilexxxx
1582
.Bl -item -width HOMEprofilexxxx
1583
.It
1583
.It
1584
.Pa $HOME/.profile
1584
.Pa $HOME/.profile
1585
.It
1585
.It
1586
.Pa /etc/profile
1586
.Pa /etc/profile
1587
.El
1587
.El
1588
.Sh SEE ALSO
1588
.Sh SEE ALSO
1589
.Xr csh 1 ,
1589
.Xr csh 1 ,
1590
.Xr getopt 1 ,
1590
.Xr getopt 1 ,
1591
.Xr ksh 1 ,
1591
.Xr ksh 1 ,
1592
.Xr login 1 ,
1592
.Xr login 1 ,
1593
.Xr test 1 ,
1593
.Xr test 1 ,
1594
.Xr getopt 3 ,
1594
.Xr getopt 3 ,
1595
.Xr passwd 4 ,
1595
.Xr passwd 4 ,
1596
.Xr profile 4 ,
1596
.Xr profile 4 ,
1597
.Xr environ 5
1597
.Xr environ 5
1598
.Xr sysctl 8
1598
.Xr sysctl 8
1599
.Sh HISTORY
1599
.Sh HISTORY
1600
A
1600
A
1601
.Nm
1601
.Nm
1602
command appeared in
1602
command appeared in
1603
.At v1 .
1603
.At v1 .
1604
It was, however, unmaintainable so we wrote this one.
1604
It was, however, unmaintainable so we wrote this one.
1605
.Sh EXIT STATUS
1605
.Sh EXIT STATUS
1606
Errors that are detected by the shell, such as a syntax error, will cause the
1606
Errors that are detected by the shell, such as a syntax error, will cause the
1607
shell to exit with a non-zero exit status.  If the shell is not an
1607
shell to exit with a non-zero exit status.  If the shell is not an
1608
interactive shell, the execution of the shell file will be aborted.  Otherwise
1608
interactive shell, the execution of the shell file will be aborted.  Otherwise
1609
the shell will return the exit status of the last command executed, or
1609
the shell will return the exit status of the last command executed, or
1610
if the exit builtin is used with a numeric argument, it will return the
1610
if the exit builtin is used with a numeric argument, it will return the
1611
argument.
1611
argument.
1612
.Sh BUGS
1612
.Sh BUGS
1613
Setuid shell scripts should be avoided at all costs, as they are a
1613
Setuid shell scripts should be avoided at all costs, as they are a
1614
significant security risk.
1614
significant security risk.
1615
 
1615