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 |