| Commit | Line | Data |
|---|---|---|
| 10185af4 | 1 | .\"- |
| 984263bc MD |
2 | .\" Copyright (c) 1991, 1993 |
| 3 | .\" The Regents of the University of California. All rights reserved. | |
| 4 | .\" | |
| 5 | .\" This code is derived from software contributed to Berkeley by | |
| 6 | .\" Kenneth Almquist. | |
| 7 | .\" | |
| 8 | .\" Redistribution and use in source and binary forms, with or without | |
| 9 | .\" modification, are permitted provided that the following conditions | |
| 10 | .\" are met: | |
| 11 | .\" 1. Redistributions of source code must retain the above copyright | |
| 12 | .\" notice, this list of conditions and the following disclaimer. | |
| 13 | .\" 2. Redistributions in binary form must reproduce the above copyright | |
| 14 | .\" notice, this list of conditions and the following disclaimer in the | |
| 15 | .\" documentation and/or other materials provided with the distribution. | |
| 16 | .\" 3. All advertising materials mentioning features or use of this software | |
| 17 | .\" must display the following acknowledgement: | |
| 18 | .\" This product includes software developed by the University of | |
| 19 | .\" California, Berkeley and 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 | |
| 22 | .\" without specific prior written permission. | |
| 23 | .\" | |
| 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 | |
| 26 | .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
| 27 | .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |
| 28 | .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
| 29 | .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
| 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 | |
| 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 | |
| 34 | .\" SUCH DAMAGE. | |
| 35 | .\" | |
| 36 | .\" from: @(#)sh.1 8.6 (Berkeley) 5/4/95 | |
| 38cd81f1 | 37 | .\" $FreeBSD: src/bin/sh/sh.1,v 1.174 2011/07/10 15:02:25 jilles Exp $ |
| 984263bc | 38 | .\" |
| 088f2cdc | 39 | .Dd August 21, 2011 |
| 984263bc MD |
40 | .Dt SH 1 |
| 41 | .Os | |
| 42 | .Sh NAME | |
| 43 | .Nm sh | |
| 44 | .Nd command interpreter (shell) | |
| 45 | .Sh SYNOPSIS | |
| 46 | .Nm | |
| 99512ac4 | 47 | .Op Fl /+abCEefIimnPpTuVvx |
| 984263bc | 48 | .Op Fl /+o Ar longname |
| 99512ac4 PA |
49 | .Oo |
| 50 | .Ar script | |
| 51 | .Op Ar arg ... | |
| 52 | .Oc | |
| 53 | .Nm | |
| 54 | .Op Fl /+abCEefIimnPpTuVvx | |
| 55 | .Op Fl /+o Ar longname | |
| 56 | .Fl c Ar string | |
| 57 | .Oo | |
| 58 | .Ar name | |
| 59 | .Op Ar arg ... | |
| 60 | .Oc | |
| 61 | .Nm | |
| 62 | .Op Fl /+abCEefIimnPpTuVvx | |
| 63 | .Op Fl /+o Ar longname | |
| 64 | .Fl s | |
| 984263bc MD |
65 | .Op Ar arg ... |
| 66 | .Sh DESCRIPTION | |
| 67 | The | |
| 68 | .Nm | |
| 69 | utility is the standard command interpreter for the system. | |
| 70 | The current version of | |
| 71 | .Nm | |
| 99512ac4 PA |
72 | is close to the |
| 73 | .St -p1003.1 | |
| 10185af4 | 74 | specification for the shell. |
| 99512ac4 PA |
75 | It only supports features |
| 76 | designated by | |
| 77 | .Tn POSIX , | |
| 78 | plus a few Berkeley extensions. | |
| 984263bc MD |
79 | This man page is not intended to be a tutorial nor a complete |
| 80 | specification of the shell. | |
| 81 | .Ss Overview | |
| 82 | The shell is a command that reads lines from | |
| 83 | either a file or the terminal, interprets them, and | |
| 84 | generally executes other commands. | |
| 85 | It is the program that is started when a user logs into the system, | |
| 86 | although a user can select a different shell with the | |
| 87 | .Xr chsh 1 | |
| 88 | command. | |
| 89 | The shell | |
| 90 | implements a language that has flow control constructs, | |
| 91 | a macro facility that provides a variety of features in | |
| 92 | addition to data storage, along with built-in history and line | |
| 10185af4 PA |
93 | editing capabilities. |
| 94 | It incorporates many features to | |
| 984263bc MD |
95 | aid interactive use and has the advantage that the interpretative |
| 96 | language is common to both interactive and non-interactive | |
| 10185af4 PA |
97 | use (shell scripts). |
| 98 | That is, commands can be typed directly | |
| 984263bc MD |
99 | to the running shell or can be put into a file, |
| 100 | which can be executed directly by the shell. | |
| 101 | .Ss Invocation | |
| 102 | .\" | |
| 103 | .\" XXX This next sentence is incredibly confusing. | |
| 104 | .\" | |
| 105 | If no arguments are present and if the standard input of the shell | |
| 106 | is connected to a terminal | |
| 107 | (or if the | |
| 108 | .Fl i | |
| 109 | option is set), | |
| 10185af4 PA |
110 | the shell is considered an interactive shell. |
| 111 | An interactive shell | |
| 984263bc MD |
112 | generally prompts before each command and handles programming |
| 113 | and command errors differently (as described below). | |
| 114 | When first starting, the shell inspects argument 0, and | |
| 115 | if it begins with a dash | |
| 10185af4 | 116 | .Pq Ql - , |
| 984263bc MD |
117 | the shell is also considered a login shell. |
| 118 | This is normally done automatically by the system | |
| 10185af4 PA |
119 | when the user first logs in. |
| 120 | A login shell first reads commands | |
| 984263bc MD |
121 | from the files |
| 122 | .Pa /etc/profile | |
| 123 | and then | |
| 124 | .Pa .profile | |
| 99512ac4 | 125 | in a user's home directory, |
| 10185af4 PA |
126 | if they exist. |
| 127 | If the environment variable | |
| 984263bc MD |
128 | .Ev ENV |
| 129 | is set on entry to a shell, or is set in the | |
| 130 | .Pa .profile | |
| ccbebcd9 PA |
131 | of a login shell, the shell then subjects its value to parameter expansion |
| 132 | and arithmetic expansion and reads commands from the named file. | |
| 984263bc MD |
133 | Therefore, a user should place commands that are to be executed only |
| 134 | at login time in the | |
| 135 | .Pa .profile | |
| 136 | file, and commands that are executed for every shell inside the | |
| 137 | .Ev ENV | |
| 138 | file. | |
| 139 | The user can set the | |
| 140 | .Ev ENV | |
| 141 | variable to some file by placing the following line in the file | |
| 142 | .Pa .profile | |
| 143 | in the home directory, | |
| 144 | substituting for | |
| 145 | .Pa .shinit | |
| 146 | the filename desired: | |
| 147 | .Pp | |
| 99512ac4 | 148 | .Dl "ENV=$HOME/.shinit; export ENV" |
| 984263bc MD |
149 | .Pp |
| 150 | The first non-option argument specified on the command line | |
| 151 | will be treated as the | |
| 152 | name of a file from which to read commands (a shell script), and | |
| 153 | the remaining arguments are set as the positional parameters | |
| 99512ac4 PA |
154 | of the shell |
| 155 | .Li ( $1 , $2 , | |
| 156 | etc.). | |
| 10185af4 | 157 | Otherwise, the shell reads commands |
| 984263bc MD |
158 | from its standard input. |
| 159 | .Pp | |
| 160 | Unlike older versions of | |
| 161 | .Nm | |
| 162 | the | |
| 163 | .Ev ENV | |
| 10185af4 PA |
164 | script is only sourced on invocation of interactive shells. |
| 165 | This | |
| 984263bc MD |
166 | closes a well-known, and sometimes easily exploitable security |
| 167 | hole related to poorly thought out | |
| 168 | .Ev ENV | |
| 169 | scripts. | |
| 170 | .Ss Argument List Processing | |
| 171 | All of the single letter options to | |
| 172 | .Nm | |
| 173 | have a corresponding long name, | |
| 174 | with the exception of | |
| 175 | .Fl c | |
| 176 | and | |
| 177 | .Fl /+o . | |
| 178 | These long names are provided next to the single letter options | |
| 179 | in the descriptions below. | |
| 180 | The long name for an option may be specified as an argument to the | |
| 181 | .Fl /+o | |
| 182 | option of | |
| 183 | .Nm . | |
| 184 | Once the shell is running, | |
| 185 | the long name for an option may be specified as an argument to the | |
| 186 | .Fl /+o | |
| 187 | option of the | |
| 188 | .Ic set | |
| 189 | built-in command | |
| 190 | (described later in the section called | |
| 191 | .Sx Built-in Commands ) . | |
| 192 | Introducing an option with a dash | |
| 10185af4 | 193 | .Pq Ql - |
| 984263bc MD |
194 | enables the option, |
| 195 | while using a plus | |
| 10185af4 | 196 | .Pq Ql + |
| 984263bc MD |
197 | disables the option. |
| 198 | A | |
| 199 | .Dq Li -- | |
| 200 | or plain | |
| cca2c150 | 201 | .Ql - |
| 984263bc MD |
202 | will stop option processing and will force the remaining |
| 203 | words on the command line to be treated as arguments. | |
| 204 | The | |
| 205 | .Fl /+o | |
| 206 | and | |
| 207 | .Fl c | |
| 208 | options do not have long names. | |
| 209 | They take arguments and are described after the single letter options. | |
| 210 | .Bl -tag -width indent | |
| 211 | .It Fl a Li allexport | |
| 212 | Flag variables for export when assignments are made to them. | |
| 213 | .It Fl b Li notify | |
| 214 | Enable asynchronous notification of background job | |
| 215 | completion. | |
| 216 | (UNIMPLEMENTED) | |
| 217 | .It Fl C Li noclobber | |
| 218 | Do not overwrite existing files with | |
| cca2c150 | 219 | .Ql > . |
| 984263bc MD |
220 | .It Fl E Li emacs |
| 221 | Enable the built-in | |
| 222 | .Xr emacs 1 | |
| 223 | command line editor (disables the | |
| 224 | .Fl V | |
| 99512ac4 PA |
225 | option if it has been set; |
| 226 | set automatically when interactive on terminals). | |
| 984263bc MD |
227 | .It Fl e Li errexit |
| 228 | Exit immediately if any untested command fails in non-interactive mode. | |
| 229 | The exit status of a command is considered to be | |
| 6a3f0d3d | 230 | explicitly tested if the command is part of the list used to control |
| 10185af4 PA |
231 | an |
| 232 | .Ic if , elif , while , | |
| 233 | or | |
| 234 | .Ic until ; | |
| 235 | if the command is the left | |
| 984263bc MD |
236 | hand operand of an |
| 237 | .Dq Li && | |
| 238 | or | |
| 239 | .Dq Li || | |
| 6a3f0d3d SS |
240 | operator; or if the command is a pipeline preceded by the |
| 241 | .Ic !\& | |
| 984263bc | 242 | operator. |
| 6a3f0d3d SS |
243 | If a shell function is executed and its exit status is explicitly |
| 244 | tested, all commands of the function are considered to be tested as | |
| 245 | well. | |
| 984263bc MD |
246 | .It Fl f Li noglob |
| 247 | Disable pathname expansion. | |
| 6156762f PA |
248 | .It Fl h Li trackall |
| 249 | A do-nothing option for | |
| 250 | .Tn POSIX | |
| 251 | compliance. | |
| 984263bc MD |
252 | .It Fl I Li ignoreeof |
| 253 | Ignore | |
| 99512ac4 | 254 | .Dv EOF Ap s |
| 984263bc MD |
255 | from input when in interactive mode. |
| 256 | .It Fl i Li interactive | |
| 257 | Force the shell to behave interactively. | |
| 258 | .It Fl m Li monitor | |
| 259 | Turn on job control (set automatically when interactive). | |
| 260 | .It Fl n Li noexec | |
| 261 | If not interactive, read commands but do not | |
| 10185af4 PA |
262 | execute them. |
| 263 | This is useful for checking the | |
| 984263bc MD |
264 | syntax of shell scripts. |
| 265 | .It Fl P Li physical | |
| 266 | Change the default for the | |
| 267 | .Ic cd | |
| 268 | and | |
| 269 | .Ic pwd | |
| 270 | commands from | |
| 271 | .Fl L | |
| 272 | (logical directory layout) | |
| 273 | to | |
| 274 | .Fl P | |
| 275 | (physical directory layout). | |
| 276 | .It Fl p Li privileged | |
| 10185af4 PA |
277 | Turn on privileged mode. |
| 278 | This mode is enabled on startup | |
| 99512ac4 PA |
279 | if either the effective user or group ID is not equal to the |
| 280 | real user or group ID. | |
| 10185af4 | 281 | Turning this mode off sets the |
| 99512ac4 | 282 | effective user and group IDs to the real user and group IDs. |
| 984263bc MD |
283 | When this mode is enabled for interactive shells, the file |
| 284 | .Pa /etc/suid_profile | |
| 285 | is sourced instead of | |
| 286 | .Pa ~/.profile | |
| 287 | after | |
| 288 | .Pa /etc/profile | |
| 289 | is sourced, and the contents of the | |
| 290 | .Ev ENV | |
| 291 | variable are ignored. | |
| 292 | .It Fl s Li stdin | |
| 293 | Read commands from standard input (set automatically | |
| 10185af4 PA |
294 | if no file arguments are present). |
| 295 | This option has | |
| 984263bc | 296 | no effect when set after the shell has already started |
| 10185af4 | 297 | running (i.e., when set with the |
| 984263bc MD |
298 | .Ic set |
| 299 | command). | |
| 300 | .It Fl T Li trapsasync | |
| 301 | When waiting for a child, execute traps immediately. | |
| 302 | If this option is not set, | |
| 303 | traps are executed after the child exits, | |
| 304 | as specified in | |
| 10185af4 | 305 | .St -p1003.2 . |
| 984263bc | 306 | This nonstandard option is useful for putting guarding shells around |
| 10185af4 PA |
307 | children that block signals. |
| 308 | The surrounding shell may kill the child | |
| 984263bc MD |
309 | or it may just return control to the tty and leave the child alone, |
| 310 | like this: | |
| 311 | .Bd -literal -offset indent | |
| 312 | sh -T -c "trap 'exit 1' 2 ; some-blocking-program" | |
| 313 | .Ed | |
| 984263bc MD |
314 | .It Fl u Li nounset |
| 315 | Write a message to standard error when attempting | |
| 99512ac4 PA |
316 | to expand a variable, a positional parameter or |
| 317 | the special parameter | |
| 318 | .Va \&! | |
| 319 | that is not set, and if the | |
| 984263bc MD |
320 | shell is not interactive, exit immediately. |
| 321 | .It Fl V Li vi | |
| 322 | Enable the built-in | |
| 323 | .Xr vi 1 | |
| 324 | command line editor (disables | |
| 325 | .Fl E | |
| 326 | if it has been set). | |
| 327 | .It Fl v Li verbose | |
| 328 | The shell writes its input to standard error | |
| 10185af4 PA |
329 | as it is read. |
| 330 | Useful for debugging. | |
| 984263bc MD |
331 | .It Fl x Li xtrace |
| 332 | Write each command | |
| 0d5aaed6 | 333 | (preceded by the value of the |
| 99512ac4 | 334 | .Va PS4 |
| 97fe2313 | 335 | variable subjected to parameter expansion and arithmetic expansion) |
| 984263bc MD |
336 | to standard error before it is executed. |
| 337 | Useful for debugging. | |
| 3f2d021a YT |
338 | .It "\ \ " Em tabcomplete |
| 339 | Enables filename completion in the command line editor. | |
| 340 | Typing a tab character will extend the current input word to match a | |
| 341 | filename. | |
| 342 | If more than one filename matches it is only extended to be the common prefix. | |
| 343 | Typing a second tab character will list all the matching names. | |
| 344 | Turned on by default in an interactive shell. | |
| 984263bc MD |
345 | .El |
| 346 | .Pp | |
| 347 | The | |
| 348 | .Fl c | |
| 10185af4 PA |
349 | option causes the commands to be read from the |
| 350 | .Ar string | |
| 351 | operand instead of from the standard input. | |
| 984263bc MD |
352 | Keep in mind that this option only accepts a single string as its |
| 353 | argument, hence multi-word strings must be quoted. | |
| 354 | .Pp | |
| 355 | The | |
| 356 | .Fl /+o | |
| 357 | option takes as its only argument the long name of an option | |
| 358 | to be enabled or disabled. | |
| 359 | For example, the following two invocations of | |
| 360 | .Nm | |
| 361 | both enable the built-in | |
| 362 | .Xr emacs 1 | |
| 363 | command line editor: | |
| 364 | .Bd -literal -offset indent | |
| 365 | set -E | |
| 366 | set -o emacs | |
| 367 | .Ed | |
| 368 | .Pp | |
| 369 | If used without an argument, the | |
| 370 | .Fl o | |
| 371 | option displays the current option settings in a human-readable format. | |
| 372 | If | |
| 373 | .Cm +o | |
| 374 | is used without an argument, the current option settings are output | |
| 375 | in a format suitable for re-input into the shell. | |
| 376 | .Ss Lexical Structure | |
| 377 | The shell reads input in terms of lines from a file and breaks | |
| 378 | it up into words at whitespace (blanks and tabs), and at | |
| 379 | certain sequences of | |
| 380 | characters called | |
| 381 | .Dq operators , | |
| 382 | which are special to the shell. | |
| 383 | There are two types of operators: control operators and | |
| 384 | redirection operators (their meaning is discussed later). | |
| 385 | The following is a list of valid operators: | |
| 386 | .Bl -tag -width indent | |
| 387 | .It Control operators: | |
| 388 | .Bl -column "XXX" "XXX" "XXX" "XXX" "XXX" -offset center -compact | |
| 389 | .It Li & Ta Li && Ta Li ( Ta Li ) Ta Li \en | |
| 21f23b60 | 390 | .It Li ;; Ta Li ;& Ta Li ; Ta Li | Ta Li || |
| 984263bc MD |
391 | .El |
| 392 | .It Redirection operators: | |
| 393 | .Bl -column "XXX" "XXX" "XXX" "XXX" "XXX" -offset center -compact | |
| 394 | .It Li < Ta Li > Ta Li << Ta Li >> Ta Li <> | |
| 395 | .It Li <& Ta Li >& Ta Li <<- Ta Li >| | |
| 396 | .El | |
| 397 | .El | |
| 10185af4 PA |
398 | .Pp |
| 399 | The character | |
| 400 | .Ql # | |
| 401 | introduces a comment if used at the beginning of a word. | |
| 402 | The word starting with | |
| 403 | .Ql # | |
| 404 | and the rest of the line are ignored. | |
| 99512ac4 PA |
405 | .Pp |
| 406 | .Tn ASCII | |
| 407 | .Dv NUL | |
| 408 | characters (character code 0) are not allowed in shell input. | |
| 984263bc MD |
409 | .Ss Quoting |
| 410 | Quoting is used to remove the special meaning of certain characters | |
| 10185af4 PA |
411 | or words to the shell, such as operators, whitespace, keywords, |
| 412 | or alias names. | |
| 413 | .Pp | |
| e1489450 PA |
414 | There are four types of quoting: matched single quotes, |
| 415 | dollar-single quotes, | |
| 984263bc MD |
416 | matched double quotes, and backslash. |
| 417 | .Bl -tag -width indent | |
| 418 | .It Single Quotes | |
| 419 | Enclosing characters in single quotes preserves the literal | |
| 420 | meaning of all the characters (except single quotes, making | |
| 421 | it impossible to put single-quotes in a single-quoted string). | |
| e1489450 PA |
422 | .It Dollar-Single Quotes |
| 423 | Enclosing characters between | |
| 424 | .Li $' | |
| 425 | and | |
| 426 | .Li ' | |
| 427 | preserves the literal meaning of all characters | |
| 428 | except backslashes and single quotes. | |
| 429 | A backslash introduces a C-style escape sequence: | |
| 430 | .Bl -tag -width xUnnnnnnnn | |
| 431 | .It \ea | |
| 432 | Alert (ring the terminal bell) | |
| 433 | .It \eb | |
| 434 | Backspace | |
| 435 | .It \ec Ns Ar c | |
| 436 | The control character denoted by | |
| 437 | .Li ^ Ns Ar c | |
| 438 | in | |
| 439 | .Xr stty 1 . | |
| 440 | If | |
| 441 | .Ar c | |
| 442 | is a backslash, it must be doubled. | |
| 443 | .It \ee | |
| 444 | The ESC character | |
| 445 | .Tn ( ASCII | |
| 446 | 0x1b) | |
| 447 | .It \ef | |
| 448 | Formfeed | |
| 449 | .It \en | |
| 450 | Newline | |
| 451 | .It \er | |
| 452 | Carriage return | |
| 453 | .It \et | |
| 454 | Horizontal tab | |
| 455 | .It \ev | |
| 456 | Vertical tab | |
| 457 | .It \e\e | |
| 458 | Literal backslash | |
| 459 | .It \e\&' | |
| 460 | Literal single-quote | |
| 461 | .It \e\&" | |
| 462 | Literal double-quote | |
| 463 | .It \e Ns Ar nnn | |
| 464 | The byte whose octal value is | |
| 465 | .Ar nnn | |
| 466 | (one to three digits) | |
| 467 | .It \ex Ns Ar nn | |
| 468 | The byte whose hexadecimal value is | |
| 469 | .Ar nn | |
| 470 | (one or more digits only the last two of which are used) | |
| 471 | .It \eu Ns Ar nnnn | |
| 472 | The Unicode code point | |
| 473 | .Ar nnnn | |
| 474 | (four hexadecimal digits) | |
| 475 | .It \eU Ns Ar nnnnnnnn | |
| 476 | The Unicode code point | |
| 477 | .Ar nnnnnnnn | |
| 478 | (eight hexadecimal digits) | |
| 479 | .El | |
| 480 | .Pp | |
| 145a4981 PA |
481 | The sequences for Unicode code points are currently only useful with |
| 482 | UTF-8 locales. | |
| e1489450 PA |
483 | They reject code point 0 and UTF-16 surrogates. |
| 484 | .Pp | |
| 485 | If an escape sequence would produce a byte with value 0, | |
| 486 | that byte and the rest of the string until the matching single-quote | |
| 487 | are ignored. | |
| 488 | .Pp | |
| 489 | Any other string starting with a backslash is an error. | |
| 984263bc MD |
490 | .It Double Quotes |
| 491 | Enclosing characters within double quotes preserves the literal | |
| 99512ac4 | 492 | meaning of all characters except dollar sign |
| 10185af4 | 493 | .Pq Ql $ , |
| 984263bc | 494 | backquote |
| 10185af4 | 495 | .Pq Ql ` , |
| 984263bc | 496 | and backslash |
| 10185af4 | 497 | .Pq Ql \e . |
| 984263bc MD |
498 | The backslash inside double quotes is historically weird. |
| 499 | It remains literal unless it precedes the following characters, | |
| 500 | which it serves to quote: | |
| 501 | .Bl -column "XXX" "XXX" "XXX" "XXX" "XXX" -offset center -compact | |
| 502 | .It Li $ Ta Li ` Ta Li \&" Ta Li \e\ Ta Li \en | |
| 503 | .El | |
| 504 | .It Backslash | |
| 505 | A backslash preserves the literal meaning of the following | |
| 506 | character, with the exception of the newline character | |
| 10185af4 | 507 | .Pq Ql \en . |
| 984263bc MD |
508 | A backslash preceding a newline is treated as a line continuation. |
| 509 | .El | |
| 99512ac4 PA |
510 | .Ss Keywords |
| 511 | Keywords or reserved words are words that have special meaning to the | |
| 984263bc | 512 | shell and are recognized at the beginning of a line and |
| 10185af4 | 513 | after a control operator. |
| 99512ac4 | 514 | The following are keywords: |
| 984263bc MD |
515 | .Bl -column "doneXX" "elifXX" "elseXX" "untilXX" "whileX" -offset center |
| 516 | .It Li \&! Ta { Ta } Ta Ic case Ta Ic do | |
| 517 | .It Ic done Ta Ic elif Ta Ic else Ta Ic esac Ta Ic fi | |
| 518 | .It Ic for Ta Ic if Ta Ic then Ta Ic until Ta Ic while | |
| 519 | .El | |
| 520 | .Ss Aliases | |
| 521 | An alias is a name and corresponding value set using the | |
| 522 | .Ic alias | |
| 10185af4 | 523 | built-in command. |
| 088f2cdc PA |
524 | Wherever the command word of a simple command may occur, |
| 525 | and after checking for keywords if a keyword may occur, the shell | |
| 984263bc MD |
526 | checks the word to see if it matches an alias. |
| 527 | If it does, it replaces it in the input stream with its value. | |
| 528 | For example, if there is an alias called | |
| 529 | .Dq Li lf | |
| 530 | with the value | |
| 99512ac4 | 531 | .Dq Li "ls -F" , |
| 984263bc | 532 | then the input |
| 99512ac4 PA |
533 | .Pp |
| 534 | .Dl "lf foobar" | |
| 984263bc MD |
535 | .Pp |
| 536 | would become | |
| 99512ac4 PA |
537 | .Pp |
| 538 | .Dl "ls -F foobar" | |
| 984263bc MD |
539 | .Pp |
| 540 | Aliases provide a convenient way for naive users to | |
| 541 | create shorthands for commands without having to learn how | |
| 10185af4 | 542 | to create functions with arguments. |
| 99512ac4 PA |
543 | Using aliases in scripts is discouraged |
| 544 | because the command that defines them must be executed | |
| 545 | before the code that uses them is parsed. | |
| 546 | This is fragile and not portable. | |
| 10185af4 PA |
547 | .Pp |
| 548 | An alias name may be escaped in a command line, so that it is not | |
| 549 | replaced by its alias value, by using quoting characters within or | |
| 550 | adjacent to the alias name. | |
| 551 | This is most often done by prefixing | |
| 552 | an alias name with a backslash to execute a function, built-in, or | |
| 553 | normal program with the same name. | |
| 554 | See the | |
| 555 | .Sx Quoting | |
| 556 | subsection. | |
| 984263bc MD |
557 | .Ss Commands |
| 558 | The shell interprets the words it reads according to a | |
| 559 | language, the specification of which is outside the scope | |
| 560 | of this man page (refer to the BNF in the | |
| 561 | .St -p1003.2 | |
| 10185af4 PA |
562 | document). |
| 563 | Essentially though, a line is read and if | |
| 984263bc | 564 | the first word of the line (or after a control operator) |
| 99512ac4 | 565 | is not a keyword, then the shell has recognized a |
| 10185af4 PA |
566 | simple command. |
| 567 | Otherwise, a complex command or some | |
| 984263bc MD |
568 | other special construct may have been recognized. |
| 569 | .Ss Simple Commands | |
| 570 | If a simple command has been recognized, the shell performs | |
| 571 | the following actions: | |
| 572 | .Bl -enum | |
| 573 | .It | |
| 574 | Leading words of the form | |
| 575 | .Dq Li name=value | |
| 576 | are stripped off and assigned to the environment of | |
| 10185af4 PA |
577 | the simple command. |
| 578 | Redirection operators and | |
| 984263bc MD |
579 | their arguments (as described below) are stripped |
| 580 | off and saved for processing. | |
| 581 | .It | |
| 582 | The remaining words are expanded as described in | |
| 583 | the section called | |
| 584 | .Sx Word Expansions , | |
| 585 | and the first remaining word is considered the command | |
| 10185af4 PA |
586 | name and the command is located. |
| 587 | The remaining | |
| 984263bc MD |
588 | words are considered the arguments of the command. |
| 589 | If no command name resulted, then the | |
| 590 | .Dq Li name=value | |
| 591 | variable assignments recognized in 1) affect the | |
| 592 | current shell. | |
| 593 | .It | |
| 594 | Redirections are performed as described in | |
| 595 | the next section. | |
| 596 | .El | |
| 597 | .Ss Redirections | |
| 598 | Redirections are used to change where a command reads its input | |
| 10185af4 PA |
599 | or sends its output. |
| 600 | In general, redirections open, close, or | |
| 601 | duplicate an existing reference to a file. | |
| 602 | The overall format | |
| 984263bc MD |
603 | used for redirection is: |
| 604 | .Pp | |
| 99512ac4 | 605 | .D1 Oo Ar n Oc Ar redir-op file |
| 984263bc MD |
606 | .Pp |
| 607 | The | |
| 99512ac4 | 608 | .Ar redir-op |
| 984263bc | 609 | is one of the redirection operators mentioned |
| 10185af4 PA |
610 | previously. |
| 611 | The following gives some examples of how these | |
| 984263bc MD |
612 | operators can be used. |
| 613 | Note that stdin and stdout are commonly used abbreviations | |
| 614 | for standard input and standard output respectively. | |
| 615 | .Bl -tag -width "1234567890XX" -offset indent | |
| 99512ac4 PA |
616 | .It Oo Ar n Oc Ns Li > Ar file |
| 617 | redirect stdout (or file descriptor | |
| 618 | .Ar n ) | |
| 619 | to | |
| 620 | .Ar file | |
| 621 | .It Oo Ar n Oc Ns Li >| Ar file | |
| 984263bc MD |
622 | same as above, but override the |
| 623 | .Fl C | |
| 624 | option | |
| 99512ac4 PA |
625 | .It Oo Ar n Oc Ns Li >> Ar file |
| 626 | append stdout (or file descriptor | |
| 627 | .Ar n ) | |
| 628 | to | |
| 629 | .Ar file | |
| 630 | .It Oo Ar n Oc Ns Li < Ar file | |
| 631 | redirect stdin (or file descriptor | |
| 632 | .Ar n ) | |
| 633 | from | |
| 634 | .Ar file | |
| 635 | .It Oo Ar n Oc Ns Li <> Ar file | |
| 636 | redirect stdin (or file descriptor | |
| 637 | .Ar n ) | |
| 638 | to and from | |
| 639 | .Ar file | |
| 640 | .It Oo Ar n1 Oc Ns Li <& Ns Ar n2 | |
| 641 | duplicate stdin (or file descriptor | |
| 642 | .Ar n1 ) | |
| 643 | from file descriptor | |
| 644 | .Ar n2 | |
| 645 | .It Oo Ar n Oc Ns Li <&- | |
| 646 | close stdin (or file descriptor | |
| 647 | .Ar n ) | |
| 648 | .It Oo Ar n1 Oc Ns Li >& Ns Ar n2 | |
| 649 | duplicate stdout (or file descriptor | |
| 650 | .Ar n1 ) | |
| 651 | to file descriptor | |
| 652 | .Ar n2 | |
| 653 | .It Oo Ar n Oc Ns Li >&- | |
| 654 | close stdout (or file descriptor | |
| 655 | .Ar n ) | |
| 984263bc MD |
656 | .El |
| 657 | .Pp | |
| 658 | The following redirection is often called a | |
| 659 | .Dq here-document . | |
| 99512ac4 PA |
660 | .Bd -unfilled -offset indent |
| 661 | .Oo Ar n Oc Ns Li << Ar delimiter | |
| 662 | .D1 Ar here-doc-text | |
| 663 | .D1 ... | |
| 664 | .Ar delimiter | |
| 984263bc MD |
665 | .Ed |
| 666 | .Pp | |
| 667 | All the text on successive lines up to the delimiter is | |
| 668 | saved away and made available to the command on standard | |
| 99512ac4 PA |
669 | input, or file descriptor |
| 670 | .Ar n | |
| 671 | if it is specified. | |
| 672 | If the | |
| 673 | .Ar delimiter | |
| 674 | as specified on the initial line is quoted, then the | |
| 675 | .Ar here-doc-text | |
| 984263bc MD |
676 | is treated literally, otherwise the text is subjected to |
| 677 | parameter expansion, command substitution, and arithmetic | |
| 678 | expansion (as described in the section on | |
| 679 | .Sx Word Expansions ) . | |
| 680 | If the operator is | |
| 681 | .Dq Li <<- | |
| 682 | instead of | |
| 683 | .Dq Li << , | |
| 684 | then leading tabs | |
| 99512ac4 PA |
685 | in the |
| 686 | .Ar here-doc-text | |
| 687 | are stripped. | |
| 984263bc MD |
688 | .Ss Search and Execution |
| 689 | There are three types of commands: shell functions, | |
| 690 | built-in commands, and normal programs. | |
| 691 | The command is searched for (by name) in that order. | |
| 692 | The three types of commands are all executed in a different way. | |
| 693 | .Pp | |
| 694 | When a shell function is executed, all of the shell positional | |
| 99512ac4 PA |
695 | parameters (except |
| 696 | .Li $0 , | |
| 697 | which remains unchanged) are | |
| 984263bc MD |
698 | set to the arguments of the shell function. |
| 699 | The variables which are explicitly placed in the environment of | |
| 700 | the command (by placing assignments to them before the | |
| 701 | function name) are made local to the function and are set | |
| 702 | to the values given. | |
| 703 | Then the command given in the function definition is executed. | |
| 704 | The positional parameters are restored to their original values | |
| 705 | when the command completes. | |
| 706 | This all occurs within the current shell. | |
| 707 | .Pp | |
| 708 | Shell built-in commands are executed internally to the shell, without | |
| 709 | spawning a new process. | |
| 99512ac4 PA |
710 | There are two kinds of built-in commands: regular and special. |
| 711 | Assignments before special builtins persist after they finish | |
| 712 | executing and assignment errors, redirection errors and certain | |
| 713 | operand errors cause a script to be aborted. | |
| 714 | Special builtins cannot be overridden with a function. | |
| 715 | Both regular and special builtins can affect the shell in ways | |
| 716 | normal programs cannot. | |
| 984263bc MD |
717 | .Pp |
| 718 | Otherwise, if the command name does not match a function | |
| 719 | or built-in command, the command is searched for as a normal | |
| 720 | program in the file system (as described in the next section). | |
| 721 | When a normal program is executed, the shell runs the program, | |
| 722 | passing the arguments and the environment to the program. | |
| 723 | If the program is not a normal executable file | |
| 10185af4 | 724 | (i.e., if it does not begin with the |
| 99512ac4 | 725 | .Dq "magic number" |
| 984263bc MD |
726 | whose |
| 727 | .Tn ASCII | |
| 728 | representation is | |
| 99512ac4 | 729 | .Dq Li #! , |
| 984263bc MD |
730 | resulting in an |
| 731 | .Er ENOEXEC | |
| 732 | return value from | |
| 733 | .Xr execve 2 ) | |
| 99512ac4 PA |
734 | but appears to be a text file, |
| 735 | the shell will run a new instance of | |
| 736 | .Nm | |
| 737 | to interpret it. | |
| 984263bc MD |
738 | .Pp |
| 739 | Note that previous versions of this document | |
| 740 | and the source code itself misleadingly and sporadically | |
| 741 | refer to a shell script without a magic number | |
| 742 | as a | |
| 99512ac4 | 743 | .Dq "shell procedure" . |
| 984263bc MD |
744 | .Ss Path Search |
| 745 | When locating a command, the shell first looks to see if | |
| 10185af4 PA |
746 | it has a shell function by that name. |
| 747 | Then it looks for a | |
| 748 | built-in command by that name. | |
| 749 | If a built-in command is not found, | |
| 984263bc MD |
750 | one of two things happen: |
| 751 | .Bl -enum | |
| 752 | .It | |
| 753 | Command names containing a slash are simply executed without | |
| 754 | performing any searches. | |
| 755 | .It | |
| 99512ac4 PA |
756 | The shell searches each entry in the |
| 757 | .Va PATH | |
| 758 | variable | |
| 10185af4 PA |
759 | in turn for the command. |
| 760 | The value of the | |
| 99512ac4 | 761 | .Va PATH |
| 984263bc | 762 | variable should be a series of |
| 10185af4 PA |
763 | entries separated by colons. |
| 764 | Each entry consists of a | |
| 984263bc MD |
765 | directory name. |
| 766 | The current directory | |
| 767 | may be indicated implicitly by an empty directory name, | |
| 768 | or explicitly by a single period. | |
| 769 | .El | |
| 770 | .Ss Command Exit Status | |
| 771 | Each command has an exit status that can influence the behavior | |
| 10185af4 PA |
772 | of other shell commands. |
| 773 | The paradigm is that a command exits | |
| 984263bc | 774 | with zero for normal or success, and non-zero for failure, |
| 10185af4 PA |
775 | error, or a false indication. |
| 776 | The man page for each command | |
| 984263bc MD |
777 | should indicate the various exit codes and what they mean. |
| 778 | Additionally, the built-in commands return exit codes, as does | |
| 779 | an executed shell function. | |
| 780 | .Pp | |
| 781 | If a command is terminated by a signal, its exit status is 128 plus | |
| 10185af4 PA |
782 | the signal number. |
| 783 | Signal numbers are defined in the header file | |
| 44cb301e | 784 | .In sys/signal.h . |
| 984263bc MD |
785 | .Ss Complex Commands |
| 786 | Complex commands are combinations of simple commands | |
| 99512ac4 | 787 | with control operators or keywords, together creating a larger complex |
| 10185af4 PA |
788 | command. |
| 789 | More generally, a command is one of the following: | |
| 984263bc MD |
790 | .Bl -item -offset indent |
| 791 | .It | |
| 792 | simple command | |
| 793 | .It | |
| 794 | pipeline | |
| 795 | .It | |
| 796 | list or compound-list | |
| 797 | .It | |
| 798 | compound command | |
| 799 | .It | |
| 800 | function definition | |
| 801 | .El | |
| 802 | .Pp | |
| 803 | Unless otherwise stated, the exit status of a command is | |
| 804 | that of the last simple command executed by the command. | |
| 805 | .Ss Pipelines | |
| 806 | A pipeline is a sequence of one or more commands separated | |
| 99512ac4 PA |
807 | by the control operator |
| 808 | .Ql \&| . | |
| 10185af4 | 809 | The standard output of all but |
| 984263bc | 810 | the last command is connected to the standard input |
| 10185af4 PA |
811 | of the next command. |
| 812 | The standard output of the last | |
| 984263bc MD |
813 | command is inherited from the shell, as usual. |
| 814 | .Pp | |
| 815 | The format for a pipeline is: | |
| 816 | .Pp | |
| 99512ac4 | 817 | .D1 Oo Li \&! Oc Ar command1 Op Li \&| Ar command2 ... |
| 984263bc | 818 | .Pp |
| 99512ac4 PA |
819 | The standard output of |
| 820 | .Ar command1 | |
| 821 | is connected to the standard input of | |
| 822 | .Ar command2 . | |
| 10185af4 | 823 | The standard input, standard output, or |
| 984263bc MD |
824 | both of a command is considered to be assigned by the |
| 825 | pipeline before any redirection specified by redirection | |
| 826 | operators that are part of the command. | |
| 827 | .Pp | |
| 99512ac4 PA |
828 | Note that unlike some other shells, |
| 829 | .Nm | |
| 830 | executes each process in a pipeline with more than one command | |
| 831 | in a subshell environment and as a child of the | |
| 832 | .Nm | |
| 833 | process. | |
| 834 | .Pp | |
| 984263bc MD |
835 | If the pipeline is not in the background (discussed later), |
| 836 | the shell waits for all commands to complete. | |
| 837 | .Pp | |
| 99512ac4 | 838 | If the keyword |
| 10185af4 PA |
839 | .Ic !\& |
| 840 | does not precede the pipeline, the | |
| 984263bc | 841 | exit status is the exit status of the last command specified |
| 10185af4 PA |
842 | in the pipeline. |
| 843 | Otherwise, the exit status is the logical | |
| 844 | NOT of the exit status of the last command. | |
| 845 | That is, if | |
| 984263bc MD |
846 | the last command returns zero, the exit status is 1; if |
| 847 | the last command returns greater than zero, the exit status | |
| 848 | is zero. | |
| 849 | .Pp | |
| 850 | Because pipeline assignment of standard input or standard | |
| 851 | output or both takes place before redirection, it can be | |
| 10185af4 PA |
852 | modified by redirection. |
| 853 | For example: | |
| 984263bc | 854 | .Pp |
| 99512ac4 | 855 | .Dl "command1 2>&1 | command2" |
| 984263bc MD |
856 | .Pp |
| 857 | sends both the standard output and standard error of | |
| 99512ac4 | 858 | .Ar command1 |
| 984263bc | 859 | to the standard input of |
| 99512ac4 | 860 | .Ar command2 . |
| 984263bc MD |
861 | .Pp |
| 862 | A | |
| cca2c150 | 863 | .Ql \&; |
| 984263bc MD |
864 | or newline terminator causes the preceding |
| 865 | AND-OR-list | |
| 866 | (described below in the section called | |
| 867 | .Sx Short-Circuit List Operators ) | |
| 868 | to be executed sequentially; | |
| 869 | an | |
| cca2c150 | 870 | .Ql & |
| 984263bc | 871 | causes asynchronous execution of the preceding AND-OR-list. |
| 984263bc MD |
872 | .Ss Background Commands (&) |
| 873 | If a command is terminated by the control operator ampersand | |
| 10185af4 | 874 | .Pq Ql & , |
| 38cd81f1 PA |
875 | the shell executes the command in a subshell environment (see |
| 876 | .Sx Grouping Commands Together | |
| 877 | below) and asynchronously; | |
| 984263bc MD |
878 | the shell does not wait for the command to finish |
| 879 | before executing the next command. | |
| 880 | .Pp | |
| 881 | The format for running a command in background is: | |
| 99512ac4 PA |
882 | .Pp |
| 883 | .D1 Ar command1 Li & Op Ar command2 Li & Ar ... | |
| 984263bc MD |
884 | .Pp |
| 885 | If the shell is not interactive, the standard input of an | |
| 99512ac4 PA |
886 | asynchronous command is set to |
| 887 | .Pa /dev/null . | |
| 984263bc MD |
888 | .Ss Lists (Generally Speaking) |
| 889 | A list is a sequence of zero or more commands separated by | |
| 890 | newlines, semicolons, or ampersands, | |
| 891 | and optionally terminated by one of these three characters. | |
| 892 | The commands in a | |
| 893 | list are executed in the order they are written. | |
| 894 | If command is followed by an ampersand, the shell starts the | |
| 895 | command and immediately proceeds onto the next command; | |
| 896 | otherwise it waits for the command to terminate before | |
| 897 | proceeding to the next one. | |
| 898 | .Ss Short-Circuit List Operators | |
| 899 | .Dq Li && | |
| 900 | and | |
| 901 | .Dq Li || | |
| 902 | are AND-OR list operators. | |
| 903 | .Dq Li && | |
| 904 | executes the first command, and then executes the second command | |
| 905 | if the exit status of the first command is zero. | |
| 906 | .Dq Li || | |
| 907 | is similar, but executes the second command if the exit | |
| 908 | status of the first command is nonzero. | |
| 909 | .Dq Li && | |
| 910 | and | |
| 911 | .Dq Li || | |
| 912 | both have the same priority. | |
| 913 | .Ss Flow-Control Constructs (if, while, for, case) | |
| 914 | The syntax of the | |
| 915 | .Ic if | |
| 916 | command is: | |
| 99512ac4 PA |
917 | .Bd -unfilled -offset indent -compact |
| 918 | .Ic if Ar list | |
| 919 | .Ic then Ar list | |
| 920 | .Oo Ic elif Ar list | |
| 921 | .Ic then Ar list Oc Ar ... | |
| 922 | .Op Ic else Ar list | |
| 923 | .Ic fi | |
| 924 | .Ed | |
| 984263bc MD |
925 | .Pp |
| 926 | The syntax of the | |
| 927 | .Ic while | |
| 928 | command is: | |
| 99512ac4 PA |
929 | .Bd -unfilled -offset indent -compact |
| 930 | .Ic while Ar list | |
| 931 | .Ic do Ar list | |
| 932 | .Ic done | |
| 933 | .Ed | |
| 984263bc MD |
934 | .Pp |
| 935 | The two lists are executed repeatedly while the exit status of the | |
| 936 | first list is zero. | |
| 937 | The | |
| 938 | .Ic until | |
| 939 | command is similar, but has the word | |
| 940 | .Ic until | |
| 941 | in place of | |
| 942 | .Ic while , | |
| 943 | which causes it to | |
| 944 | repeat until the exit status of the first list is zero. | |
| 945 | .Pp | |
| 946 | The syntax of the | |
| 947 | .Ic for | |
| 948 | command is: | |
| 99512ac4 PA |
949 | .Bd -unfilled -offset indent -compact |
| 950 | .Ic for Ar variable Op Ic in Ar word ... | |
| 951 | .Ic do Ar list | |
| 952 | .Ic done | |
| 953 | .Ed | |
| 984263bc | 954 | .Pp |
| 10185af4 PA |
955 | If |
| 956 | .Ic in | |
| 957 | and the following words are omitted, | |
| 99512ac4 | 958 | .Ic in Li \&"$@\&" |
| 10185af4 | 959 | is used instead. |
| 984263bc MD |
960 | The words are expanded, and then the list is executed |
| 961 | repeatedly with the variable set to each word in turn. | |
| 962 | The | |
| 963 | .Ic do | |
| 964 | and | |
| 965 | .Ic done | |
| 966 | commands may be replaced with | |
| cca2c150 | 967 | .Ql { |
| 984263bc | 968 | and |
| cca2c150 | 969 | .Ql } . |
| 984263bc MD |
970 | .Pp |
| 971 | The syntax of the | |
| 972 | .Ic break | |
| 973 | and | |
| 974 | .Ic continue | |
| 975 | commands is: | |
| 99512ac4 PA |
976 | .D1 Ic break Op Ar num |
| 977 | .D1 Ic continue Op Ar num | |
| 984263bc MD |
978 | .Pp |
| 979 | The | |
| 980 | .Ic break | |
| 981 | command terminates the | |
| 982 | .Ar num | |
| 983 | innermost | |
| 984 | .Ic for | |
| 985 | or | |
| 986 | .Ic while | |
| 987 | loops. | |
| 988 | The | |
| 989 | .Ic continue | |
| 990 | command continues with the next iteration of the innermost loop. | |
| 99512ac4 | 991 | These are implemented as special built-in commands. |
| 984263bc MD |
992 | .Pp |
| 993 | The syntax of the | |
| 994 | .Ic case | |
| 99512ac4 PA |
995 | command is: |
| 996 | .Bd -unfilled -offset indent -compact | |
| 997 | .Ic case Ar word Ic in | |
| 998 | .Ar pattern Ns Li ) Ar list Li ;; | |
| 999 | .Ar ... | |
| 1000 | .Ic esac | |
| 1001 | .Ed | |
| 984263bc MD |
1002 | .Pp |
| 1003 | The pattern can actually be one or more patterns | |
| 1004 | (see | |
| 1005 | .Sx Shell Patterns | |
| 1006 | described later), | |
| 1007 | separated by | |
| cca2c150 | 1008 | .Ql \&| |
| 984263bc | 1009 | characters. |
| d09bba72 PA |
1010 | Tilde expansion, parameter expansion, command substitution, |
| 1011 | arithmetic expansion and quote removal are applied to the word. | |
| 1012 | Then, each pattern is expanded in turn using tilde expansion, | |
| 1013 | parameter expansion, command substitution and arithmetic expansion and | |
| 1014 | the expanded form of the word is checked against it. | |
| 1015 | If a match is found, the corresponding list is executed. | |
| 21f23b60 PA |
1016 | If the selected list is terminated by the control operator |
| 1017 | .Ql ;& | |
| 1018 | instead of | |
| 1019 | .Ql ;; , | |
| d09bba72 PA |
1020 | execution continues with the next list, |
| 1021 | continuing until a list terminated with | |
| 1022 | .Ql ;; | |
| 1023 | or the end of the | |
| 1024 | .Ic case | |
| 1025 | command. | |
| 99512ac4 PA |
1026 | The exit code of the |
| 1027 | .Ic case | |
| 1028 | command is the exit code of the last command executed in the list or | |
| 1029 | zero if no patterns were matched. | |
| 984263bc MD |
1030 | .Ss Grouping Commands Together |
| 1031 | Commands may be grouped by writing either | |
| 99512ac4 PA |
1032 | .Pp |
| 1033 | .D1 Li \&( Ns Ar list Ns Li \%) | |
| 984263bc MD |
1034 | .Pp |
| 1035 | or | |
| 99512ac4 PA |
1036 | .Pp |
| 1037 | .D1 Li { Ar list Ns Li \&; } | |
| 984263bc | 1038 | .Pp |
| 1de90000 | 1039 | The first form executes the commands in a subshell environment. |
| 38cd81f1 PA |
1040 | A subshell environment has its own copy of: |
| 1041 | .Pp | |
| 1042 | .Bl -enum | |
| 1043 | .It | |
| 1044 | The current working directory as set by | |
| 1045 | .Ic cd . | |
| 1046 | .It | |
| 1047 | The file creation mask as set by | |
| 1048 | .Ic umask . | |
| 1049 | .It | |
| 1050 | References to open files. | |
| 1051 | .It | |
| 1052 | Traps as set by | |
| 1053 | .Ic trap . | |
| 1054 | .It | |
| 1055 | Known jobs. | |
| 1056 | .It | |
| 1057 | Positional parameters and variables. | |
| 1058 | .It | |
| 1059 | Shell options. | |
| 1060 | .It | |
| 1061 | Shell functions. | |
| 1062 | .It | |
| 1063 | Shell aliases. | |
| 1064 | .El | |
| 1065 | .Pp | |
| 1066 | These are copied from the parent shell environment, | |
| 1067 | except that trapped (but not ignored) signals are reset to the default action | |
| 1068 | and known jobs are cleared. | |
| 1069 | Any changes do not affect the parent shell environment. | |
| 1070 | .Pp | |
| 1071 | A subshell environment may be implemented as a child process or differently. | |
| 1072 | If job control is enabled in an interactive shell, | |
| 1073 | commands grouped in parentheses can be suspended and continued as a unit. | |
| 1074 | .Pp | |
| 1de90000 | 1075 | The second form never forks another shell, |
| 984263bc MD |
1076 | so it is slightly more efficient. |
| 1077 | Grouping commands together this way allows the user to | |
| 1078 | redirect their output as though they were one program: | |
| 1079 | .Bd -literal -offset indent | |
| 1080 | { echo -n "hello"; echo " world"; } > greeting | |
| 1081 | .Ed | |
| 1082 | .Ss Functions | |
| 1083 | The syntax of a function definition is | |
| 99512ac4 PA |
1084 | .Pp |
| 1085 | .D1 Ar name Li \&( \&) Ar command | |
| 984263bc MD |
1086 | .Pp |
| 1087 | A function definition is an executable statement; when | |
| 99512ac4 PA |
1088 | executed it installs a function named |
| 1089 | .Ar name | |
| 1090 | and returns an | |
| 10185af4 | 1091 | exit status of zero. |
| 99512ac4 PA |
1092 | The |
| 1093 | .Ar command | |
| 1094 | is normally a list | |
| 984263bc | 1095 | enclosed between |
| cca2c150 | 1096 | .Ql { |
| 984263bc | 1097 | and |
| cca2c150 | 1098 | .Ql } . |
| 984263bc MD |
1099 | .Pp |
| 1100 | Variables may be declared to be local to a function by | |
| 1101 | using the | |
| 1102 | .Ic local | |
| 1103 | command. | |
| 1104 | This should appear as the first statement of a function, | |
| 1105 | and the syntax is: | |
| 99512ac4 PA |
1106 | .Pp |
| 1107 | .D1 Ic local Oo Ar variable ... Oc Op Fl | |
| 984263bc MD |
1108 | .Pp |
| 1109 | The | |
| 1110 | .Ic local | |
| 1111 | command is implemented as a built-in command. | |
| 1112 | .Pp | |
| 1113 | When a variable is made local, it inherits the initial | |
| 1114 | value and exported and readonly flags from the variable | |
| 1115 | with the same name in the surrounding scope, if there is | |
| 10185af4 PA |
1116 | one. |
| 1117 | Otherwise, the variable is initially unset. | |
| 1118 | The shell | |
| 984263bc | 1119 | uses dynamic scoping, so that if the variable |
| 99512ac4 | 1120 | .Va x |
| 984263bc MD |
1121 | is made local to function |
| 1122 | .Em f , | |
| 1123 | which then calls function | |
| 1124 | .Em g , | |
| 1125 | references to the variable | |
| 99512ac4 | 1126 | .Va x |
| 984263bc MD |
1127 | made inside |
| 1128 | .Em g | |
| 1129 | will refer to the variable | |
| 99512ac4 | 1130 | .Va x |
| 984263bc MD |
1131 | declared inside |
| 1132 | .Em f , | |
| 1133 | not to the global variable named | |
| 99512ac4 | 1134 | .Va x . |
| 984263bc | 1135 | .Pp |
| 10185af4 | 1136 | The only special parameter that can be made local is |
| cca2c150 | 1137 | .Ql - . |
| 984263bc | 1138 | Making |
| cca2c150 | 1139 | .Ql - |
| 984263bc | 1140 | local causes any shell options that are |
| 99512ac4 PA |
1141 | changed via the |
| 1142 | .Ic set | |
| 1143 | command inside the function to be | |
| 984263bc MD |
1144 | restored to their original values when the function |
| 1145 | returns. | |
| 1146 | .Pp | |
| 1147 | The syntax of the | |
| 1148 | .Ic return | |
| 1149 | command is | |
| 99512ac4 PA |
1150 | .Pp |
| 1151 | .D1 Ic return Op Ar exitstatus | |
| 984263bc | 1152 | .Pp |
| 10185af4 PA |
1153 | It terminates the current executional scope, returning from the previous |
| 1154 | nested function, sourced script, or shell instance, in that order. | |
| 984263bc MD |
1155 | The |
| 1156 | .Ic return | |
| 99512ac4 | 1157 | command is implemented as a special built-in command. |
| 984263bc | 1158 | .Ss Variables and Parameters |
| 10185af4 PA |
1159 | The shell maintains a set of parameters. |
| 1160 | A parameter | |
| 1161 | denoted by a name is called a variable. | |
| 1162 | When starting up, | |
| 984263bc | 1163 | the shell turns all the environment variables into shell |
| 10185af4 PA |
1164 | variables. |
| 1165 | New variables can be set using the form | |
| 99512ac4 PA |
1166 | .Pp |
| 1167 | .D1 Ar name Ns = Ns Ar value | |
| 984263bc MD |
1168 | .Pp |
| 1169 | Variables set by the user must have a name consisting solely | |
| 1170 | of alphabetics, numerics, and underscores. | |
| 1171 | The first letter of a variable name must not be numeric. | |
| 1172 | A parameter can also be denoted by a number | |
| 1173 | or a special character as explained below. | |
| 1174 | .Ss Positional Parameters | |
| 1175 | A positional parameter is a parameter denoted by a number greater than zero. | |
| 1176 | The shell sets these initially to the values of its command line | |
| 10185af4 PA |
1177 | arguments that follow the name of the shell script. |
| 1178 | The | |
| 984263bc MD |
1179 | .Ic set |
| 1180 | built-in command can also be used to set or reset them. | |
| 1181 | .Ss Special Parameters | |
| 99512ac4 PA |
1182 | Special parameters are parameters denoted by a single special character |
| 1183 | or the digit zero. | |
| 1184 | They are shown in the following list, exactly as they would appear in input | |
| 10185af4 | 1185 | typed by the user or in the source of a shell script. |
| 984263bc | 1186 | .Bl -hang |
| 10185af4 PA |
1187 | .It Li $* |
| 1188 | Expands to the positional parameters, starting from one. | |
| 1189 | When | |
| 984263bc MD |
1190 | the expansion occurs within a double-quoted string |
| 1191 | it expands to a single field with the value of each parameter | |
| 1192 | separated by the first character of the | |
| 99512ac4 | 1193 | .Va IFS |
| 984263bc | 1194 | variable, |
| 99512ac4 PA |
1195 | or by a space if |
| 1196 | .Va IFS | |
| 984263bc | 1197 | is unset. |
| 10185af4 PA |
1198 | .It Li $@ |
| 1199 | Expands to the positional parameters, starting from one. | |
| 1200 | When | |
| 984263bc MD |
1201 | the expansion occurs within double-quotes, each positional |
| 1202 | parameter expands as a separate argument. | |
| 1203 | If there are no positional parameters, the | |
| 1204 | expansion of | |
| 1205 | .Li @ | |
| 1206 | generates zero arguments, even when | |
| 1207 | .Li @ | |
| 10185af4 PA |
1208 | is double-quoted. |
| 1209 | What this basically means, for example, is | |
| 99512ac4 PA |
1210 | if |
| 1211 | .Li $1 | |
| 1212 | is | |
| 1213 | .Dq Li abc | |
| 1214 | and | |
| 1215 | .Li $2 | |
| 1216 | is | |
| 1217 | .Dq Li "def ghi" , | |
| 984263bc | 1218 | then |
| 99512ac4 | 1219 | .Li \&"$@\&" |
| 984263bc MD |
1220 | expands to |
| 1221 | the two arguments: | |
| 1222 | .Bd -literal -offset indent | |
| 1223 | "abc" "def ghi" | |
| 1224 | .Ed | |
| 10185af4 | 1225 | .It Li $# |
| 984263bc | 1226 | Expands to the number of positional parameters. |
| 99512ac4 | 1227 | .It Li $? |
| 984263bc | 1228 | Expands to the exit status of the most recent pipeline. |
| 10185af4 | 1229 | .It Li $- |
| 984263bc MD |
1230 | (hyphen) Expands to the current option flags (the single-letter |
| 1231 | option names concatenated into a string) as specified on | |
| 99512ac4 PA |
1232 | invocation, by the |
| 1233 | .Ic set | |
| 1234 | built-in command, or implicitly | |
| 984263bc | 1235 | by the shell. |
| 10185af4 PA |
1236 | .It Li $$ |
| 1237 | Expands to the process ID of the invoked shell. | |
| 1238 | A subshell | |
| 99512ac4 PA |
1239 | retains the same value of |
| 1240 | .Va $ | |
| 1241 | as its parent. | |
| 1242 | .It Li $! | |
| 984263bc | 1243 | Expands to the process ID of the most recent background |
| 10185af4 PA |
1244 | command executed from the current shell. |
| 1245 | For a | |
| 984263bc MD |
1246 | pipeline, the process ID is that of the last command in the |
| 1247 | pipeline. | |
| 99512ac4 PA |
1248 | If this parameter is referenced, the shell will remember |
| 1249 | the process ID and its exit status until the | |
| 1250 | .Ic wait | |
| 1251 | built-in command reports completion of the process. | |
| 10185af4 | 1252 | .It Li $0 |
| 99512ac4 PA |
1253 | (zero) Expands to the name of the shell script if passed on the command line, |
| 1254 | the | |
| 1255 | .Ar name | |
| 1256 | operand if given (with | |
| 1257 | .Fl c ) | |
| 1258 | or otherwise argument 0 passed to the shell. | |
| 1259 | .El | |
| 1260 | .Ss Special Variables | |
| 1261 | The following variables are set by the shell or | |
| 1262 | have special meaning to it: | |
| 1263 | .Bl -tag -width ".Va HISTSIZE" | |
| 1264 | .It Va CDPATH | |
| 1265 | The search path used with the | |
| 1266 | .Ic cd | |
| 1267 | built-in. | |
| 1268 | .It Va EDITOR | |
| 1269 | The fallback editor used with the | |
| 1270 | .Ic fc | |
| 1271 | built-in. | |
| 1272 | If not set, the default editor is | |
| 1273 | .Xr ed 1 . | |
| 1274 | .It Va FCEDIT | |
| 1275 | The default editor used with the | |
| 1276 | .Ic fc | |
| 1277 | built-in. | |
| 1278 | .It Va HISTSIZE | |
| 1279 | The number of previous commands that are accessible. | |
| 1280 | .It Va HOME | |
| 1281 | The user's home directory, | |
| 1282 | used in tilde expansion and as a default directory for the | |
| 1283 | .Ic cd | |
| 1284 | built-in. | |
| 1285 | .It Va IFS | |
| 1286 | Input Field Separators. | |
| 1287 | This is normally set to | |
| 1288 | .Aq space , | |
| 1289 | .Aq tab , | |
| 1290 | and | |
| 1291 | .Aq newline . | |
| 1292 | See the | |
| 1293 | .Sx White Space Splitting | |
| 1294 | section for more details. | |
| 1295 | .It Va LINENO | |
| 1296 | The current line number in the script or function. | |
| 1297 | .It Va MAIL | |
| 1298 | The name of a mail file, that will be checked for the arrival of new | |
| 1299 | mail. | |
| 1300 | Overridden by | |
| 1301 | .Va MAILPATH . | |
| 1302 | .It Va MAILPATH | |
| 1303 | A colon | |
| 1304 | .Pq Ql \&: | |
| 1305 | separated list of file names, for the shell to check for incoming | |
| 1306 | mail. | |
| 1307 | This variable overrides the | |
| 1308 | .Va MAIL | |
| 1309 | setting. | |
| 1310 | There is a maximum of 10 mailboxes that can be monitored at once. | |
| 1311 | .It Va PATH | |
| 1312 | The default search path for executables. | |
| 1313 | See the | |
| 1314 | .Sx Path Search | |
| 1315 | section for details. | |
| 1316 | .It Va PPID | |
| 1317 | The parent process ID of the invoked shell. | |
| 1318 | This is set at startup | |
| 1319 | unless this variable is in the environment. | |
| 1320 | A later change of parent process ID is not reflected. | |
| 1321 | A subshell retains the same value of | |
| 1322 | .Va PPID . | |
| 1323 | .It Va PS1 | |
| 1324 | The primary prompt string, which defaults to | |
| 1325 | .Dq Li "$ " , | |
| 1326 | unless you are the superuser, in which case it defaults to | |
| 1327 | .Dq Li "# " . | |
| 1328 | .It Va PS2 | |
| 1329 | The secondary prompt string, which defaults to | |
| 1330 | .Dq Li "> " . | |
| 1331 | .It Va PS4 | |
| 1332 | The prefix for the trace output (if | |
| 1333 | .Fl x | |
| 1334 | is active). | |
| 1335 | The default is | |
| 1336 | .Dq Li "+ " . | |
| 984263bc MD |
1337 | .El |
| 1338 | .Ss Word Expansions | |
| 1339 | This clause describes the various expansions that are | |
| 10185af4 PA |
1340 | performed on words. |
| 1341 | Not all expansions are performed on | |
| 984263bc MD |
1342 | every word, as explained later. |
| 1343 | .Pp | |
| 1344 | Tilde expansions, parameter expansions, command substitutions, | |
| 1345 | arithmetic expansions, and quote removals that occur within | |
| 10185af4 PA |
1346 | a single word expand to a single field. |
| 1347 | It is only field | |
| 984263bc MD |
1348 | splitting or pathname expansion that can create multiple |
| 1349 | fields from a single word. | |
| 1350 | The single exception to this rule is | |
| 1351 | the expansion of the special parameter | |
| 99512ac4 | 1352 | .Va @ |
| 984263bc MD |
1353 | within double-quotes, |
| 1354 | as was described above. | |
| 1355 | .Pp | |
| 1356 | The order of word expansion is: | |
| 1357 | .Bl -enum | |
| 1358 | .It | |
| 1359 | Tilde Expansion, Parameter Expansion, Command Substitution, | |
| 1360 | Arithmetic Expansion (these all occur at the same time). | |
| 1361 | .It | |
| 1362 | Field Splitting is performed on fields generated by step (1) | |
| 1363 | unless the | |
| 99512ac4 | 1364 | .Va IFS |
| 984263bc MD |
1365 | variable is null. |
| 1366 | .It | |
| 1367 | Pathname Expansion (unless the | |
| 1368 | .Fl f | |
| 1369 | option is in effect). | |
| 1370 | .It | |
| 1371 | Quote Removal. | |
| 1372 | .El | |
| 1373 | .Pp | |
| 1374 | The | |
| cca2c150 | 1375 | .Ql $ |
| 984263bc | 1376 | character is used to introduce parameter expansion, command |
| 99512ac4 | 1377 | substitution, or arithmetic expansion. |
| 984263bc MD |
1378 | .Ss Tilde Expansion (substituting a user's home directory) |
| 1379 | A word beginning with an unquoted tilde character | |
| 10185af4 | 1380 | .Pq Ql ~ |
| 984263bc MD |
1381 | is |
| 1382 | subjected to tilde expansion. | |
| 1383 | All the characters up to a slash | |
| 10185af4 | 1384 | .Pq Ql / |
| 984263bc | 1385 | or the end of the word are treated as a username |
| 10185af4 PA |
1386 | and are replaced with the user's home directory. |
| 1387 | If the | |
| 99512ac4 PA |
1388 | username is missing (as in |
| 1389 | .Pa ~/foobar ) , | |
| 1390 | the tilde is replaced with the value of the | |
| 1391 | .Va HOME | |
| 1392 | variable (the current user's home directory). | |
| 984263bc MD |
1393 | .Ss Parameter Expansion |
| 1394 | The format for parameter expansion is as follows: | |
| 984263bc | 1395 | .Pp |
| 99512ac4 PA |
1396 | .D1 Li ${ Ns Ar expression Ns Li } |
| 1397 | .Pp | |
| 1398 | where | |
| 1399 | .Ar expression | |
| 1400 | consists of all characters until the matching | |
| cca2c150 | 1401 | .Ql } . |
| 984263bc | 1402 | Any |
| cca2c150 | 1403 | .Ql } |
| 99512ac4 PA |
1404 | escaped by a backslash or within a single-quoted or double-quoted |
| 1405 | string, and characters in | |
| 984263bc MD |
1406 | embedded arithmetic expansions, command substitutions, and variable |
| 1407 | expansions, are not examined in determining the matching | |
| cca2c150 | 1408 | .Ql } . |
| 99512ac4 PA |
1409 | If the variants with |
| 1410 | .Ql + , | |
| 1411 | .Ql - , | |
| 1412 | .Ql = | |
| 1413 | or | |
| 1414 | .Ql ?\& | |
| 1415 | occur within a double-quoted string, | |
| 1416 | as an extension there may be unquoted parts | |
| 1417 | (via double-quotes inside the expansion); | |
| 1418 | .Ql } | |
| 1419 | within such parts are also not examined in determining the matching | |
| 1420 | .Ql } . | |
| 984263bc MD |
1421 | .Pp |
| 1422 | The simplest form for parameter expansion is: | |
| 984263bc | 1423 | .Pp |
| 99512ac4 PA |
1424 | .D1 Li ${ Ns Ar parameter Ns Li } |
| 1425 | .Pp | |
| 1426 | The value, if any, of | |
| 1427 | .Ar parameter | |
| 1428 | is substituted. | |
| 984263bc MD |
1429 | .Pp |
| 1430 | The parameter name or symbol can be enclosed in braces, which are | |
| 1431 | optional except for positional parameters with more than one digit or | |
| 1432 | when parameter is followed by a character that could be interpreted as | |
| 1433 | part of the name. | |
| 1434 | If a parameter expansion occurs inside double-quotes: | |
| 1435 | .Bl -enum | |
| 1436 | .It | |
| 1437 | Pathname expansion is not performed on the results of the | |
| 1438 | expansion. | |
| 1439 | .It | |
| 1440 | Field splitting is not performed on the results of the | |
| 1441 | expansion, with the exception of the special parameter | |
| 99512ac4 | 1442 | .Va @ . |
| 984263bc MD |
1443 | .El |
| 1444 | .Pp | |
| 1445 | In addition, a parameter expansion can be modified by using one of the | |
| 1446 | following formats. | |
| 1447 | .Bl -tag -width indent | |
| 99512ac4 | 1448 | .It Li ${ Ns Ar parameter Ns Li :- Ns Ar word Ns Li } |
| 10185af4 | 1449 | Use Default Values. |
| 99512ac4 PA |
1450 | If |
| 1451 | .Ar parameter | |
| 1452 | is unset or null, the expansion of | |
| 1453 | .Ar word | |
| 1454 | is substituted; otherwise, the value of | |
| 1455 | .Ar parameter | |
| 1456 | is substituted. | |
| 1457 | .It Li ${ Ns Ar parameter Ns Li := Ns Ar word Ns Li } | |
| 10185af4 | 1458 | Assign Default Values. |
| 99512ac4 PA |
1459 | If |
| 1460 | .Ar parameter | |
| 1461 | is unset or null, the expansion of | |
| 1462 | .Ar word | |
| 1463 | is assigned to | |
| 1464 | .Ar parameter . | |
| 10185af4 | 1465 | In all cases, the |
| 99512ac4 PA |
1466 | final value of |
| 1467 | .Ar parameter | |
| 1468 | is substituted. | |
| 1469 | Quoting inside | |
| 1470 | .Ar word | |
| 1471 | does not prevent field splitting or pathname expansion. | |
| 10185af4 | 1472 | Only variables, not positional |
| 984263bc MD |
1473 | parameters or special parameters, can be |
| 1474 | assigned in this way. | |
| 99512ac4 | 1475 | .It Li ${ Ns Ar parameter Ns Li :? Ns Oo Ar word Oc Ns Li } |
| 10185af4 PA |
1476 | Indicate Error if Null or Unset. |
| 1477 | If | |
| 99512ac4 PA |
1478 | .Ar parameter |
| 1479 | is unset or null, the expansion of | |
| 1480 | .Ar word | |
| 1481 | (or a message indicating it is unset if | |
| 1482 | .Ar word | |
| 1483 | is omitted) is written to standard | |
| 984263bc MD |
1484 | error and the shell exits with a nonzero |
| 1485 | exit status. | |
| 1486 | Otherwise, the value of | |
| 99512ac4 PA |
1487 | .Ar parameter |
| 1488 | is substituted. | |
| 10185af4 | 1489 | An |
| 984263bc | 1490 | interactive shell need not exit. |
| 99512ac4 | 1491 | .It Li ${ Ns Ar parameter Ns Li :+ Ns Ar word Ns Li } |
| 10185af4 | 1492 | Use Alternate Value. |
| 99512ac4 PA |
1493 | If |
| 1494 | .Ar parameter | |
| 1495 | is unset or null, null is substituted; | |
| 1496 | otherwise, the expansion of | |
| 1497 | .Ar word | |
| 1498 | is substituted. | |
| 984263bc MD |
1499 | .El |
| 1500 | .Pp | |
| 1501 | In the parameter expansions shown previously, use of the colon in the | |
| 1502 | format results in a test for a parameter that is unset or null; omission | |
| 1503 | of the colon results in a test for a parameter that is only unset. | |
| 99512ac4 PA |
1504 | .Pp |
| 1505 | The | |
| 1506 | .Ar word | |
| 1507 | inherits the type of quoting | |
| 1508 | (unquoted, double-quoted or here-document) | |
| 1509 | from the surroundings, | |
| 1510 | with the exception that a backslash that quotes a closing brace is removed | |
| 1511 | during quote removal. | |
| 984263bc | 1512 | .Bl -tag -width indent |
| 99512ac4 | 1513 | .It Li ${# Ns Ar parameter Ns Li } |
| 10185af4 PA |
1514 | String Length. |
| 1515 | The length in characters of | |
| 99512ac4 PA |
1516 | the value of |
| 1517 | .Ar parameter . | |
| 984263bc MD |
1518 | .El |
| 1519 | .Pp | |
| 1520 | The following four varieties of parameter expansion provide for substring | |
| 1521 | processing. | |
| 1522 | In each case, pattern matching notation | |
| 1523 | (see | |
| 1524 | .Sx Shell Patterns ) , | |
| 1525 | rather than regular expression notation, | |
| 1526 | is used to evaluate the patterns. | |
| 1527 | If parameter is one of the special parameters | |
| 99512ac4 | 1528 | .Va * |
| 984263bc | 1529 | or |
| 99512ac4 | 1530 | .Va @ , |
| 984263bc MD |
1531 | the result of the expansion is unspecified. |
| 1532 | Enclosing the full parameter expansion string in double-quotes does not | |
| 1533 | cause the following four varieties of pattern characters to be quoted, | |
| 1534 | whereas quoting characters within the braces has this effect. | |
| 1535 | .Bl -tag -width indent | |
| 99512ac4 | 1536 | .It Li ${ Ns Ar parameter Ns Li % Ns Ar word Ns Li } |
| 10185af4 | 1537 | Remove Smallest Suffix Pattern. |
| 99512ac4 PA |
1538 | The |
| 1539 | .Ar word | |
| 10185af4 PA |
1540 | is expanded to produce a pattern. |
| 1541 | The | |
| 984263bc | 1542 | parameter expansion then results in |
| 99512ac4 PA |
1543 | .Ar parameter , |
| 1544 | with the smallest portion of the | |
| 984263bc | 1545 | suffix matched by the pattern deleted. |
| 99512ac4 | 1546 | .It Li ${ Ns Ar parameter Ns Li %% Ns Ar word Ns Li } |
| 10185af4 | 1547 | Remove Largest Suffix Pattern. |
| 99512ac4 PA |
1548 | The |
| 1549 | .Ar word | |
| 10185af4 PA |
1550 | is expanded to produce a pattern. |
| 1551 | The | |
| 984263bc | 1552 | parameter expansion then results in |
| 99512ac4 PA |
1553 | .Ar parameter , |
| 1554 | with the largest portion of the | |
| 984263bc | 1555 | suffix matched by the pattern deleted. |
| 99512ac4 | 1556 | .It Li ${ Ns Ar parameter Ns Li # Ns Ar word Ns Li } |
| 10185af4 | 1557 | Remove Smallest Prefix Pattern. |
| 99512ac4 PA |
1558 | The |
| 1559 | .Ar word | |
| 10185af4 PA |
1560 | is expanded to produce a pattern. |
| 1561 | The | |
| 984263bc | 1562 | parameter expansion then results in |
| 99512ac4 PA |
1563 | .Ar parameter , |
| 1564 | with the smallest portion of the | |
| 984263bc | 1565 | prefix matched by the pattern deleted. |
| 99512ac4 | 1566 | .It Li ${ Ns Ar parameter Ns Li ## Ns Ar word Ns Li } |
| 10185af4 | 1567 | Remove Largest Prefix Pattern. |
| 99512ac4 PA |
1568 | The |
| 1569 | .Ar word | |
| 10185af4 PA |
1570 | is expanded to produce a pattern. |
| 1571 | The | |
| 984263bc | 1572 | parameter expansion then results in |
| 99512ac4 PA |
1573 | .Ar parameter , |
| 1574 | with the largest portion of the | |
| 984263bc MD |
1575 | prefix matched by the pattern deleted. |
| 1576 | .El | |
| 1577 | .Ss Command Substitution | |
| 1578 | Command substitution allows the output of a command to be substituted in | |
| 10185af4 PA |
1579 | place of the command name itself. |
| 1580 | Command substitution occurs when | |
| 984263bc | 1581 | the command is enclosed as follows: |
| 99512ac4 PA |
1582 | .Pp |
| 1583 | .D1 Li $( Ns Ar command Ns Li )\& | |
| 984263bc MD |
1584 | .Pp |
| 1585 | or the backquoted version: | |
| 99512ac4 PA |
1586 | .Pp |
| 1587 | .D1 Li ` Ns Ar command Ns Li ` | |
| 984263bc | 1588 | .Pp |
| 1de90000 PA |
1589 | The shell expands the command substitution by executing command |
| 1590 | and replacing the command substitution | |
| 984263bc MD |
1591 | with the standard output of the command, |
| 1592 | removing sequences of one or more newlines at the end of the substitution. | |
| 1593 | Embedded newlines before the end of the output are not removed; | |
| 1594 | however, during field splitting, they may be translated into spaces | |
| 1595 | depending on the value of | |
| 99512ac4 | 1596 | .Va IFS |
| 984263bc | 1597 | and the quoting that is in effect. |
| 1de90000 PA |
1598 | The command is executed in a subshell environment, |
| 1599 | except that the built-in commands | |
| 1600 | .Ic jobid , | |
| 1601 | .Ic jobs , | |
| 1de90000 PA |
1602 | and |
| 1603 | .Ic trap | |
| 38cd81f1 PA |
1604 | return information about the parent shell environment |
| 1605 | and | |
| 1606 | .Ic times | |
| 1607 | returns information about the same process | |
| 32931063 | 1608 | if they are the only command in a command substitution. |
| 984263bc MD |
1609 | .Ss Arithmetic Expansion |
| 1610 | Arithmetic expansion provides a mechanism for evaluating an arithmetic | |
| 1611 | expression and substituting its value. | |
| 1612 | The format for arithmetic expansion is as follows: | |
| 984263bc | 1613 | .Pp |
| 99512ac4 PA |
1614 | .D1 Li $(( Ns Ar expression Ns Li )) |
| 1615 | .Pp | |
| 1616 | The | |
| 1617 | .Ar expression | |
| 1618 | is treated as if it were in double-quotes, except | |
| 10185af4 PA |
1619 | that a double-quote inside the expression is not treated specially. |
| 1620 | The | |
| 99512ac4 PA |
1621 | shell expands all tokens in the |
| 1622 | .Ar expression | |
| 1623 | for parameter expansion, | |
| 1624 | command substitution, | |
| 1625 | arithmetic expansion | |
| 1626 | and quote removal. | |
| 1627 | .Pp | |
| 1628 | The allowed expressions are a subset of C expressions, | |
| 1629 | summarized below. | |
| 1630 | .Bl -tag -width "Variables" -offset indent | |
| 1631 | .It Values | |
| 1632 | All values are of type | |
| 1633 | .Ft intmax_t . | |
| 1634 | .It Constants | |
| 1635 | Decimal, octal (starting with | |
| 1636 | .Li 0 ) | |
| 1637 | and hexadecimal (starting with | |
| 1638 | .Li 0x ) | |
| 1639 | integer constants. | |
| 1640 | .It Variables | |
| 1641 | Shell variables can be read and written | |
| 1642 | and contain integer constants. | |
| 1643 | .It Unary operators | |
| 1644 | .Li "! ~ + -" | |
| 1645 | .It Binary operators | |
| 1646 | .Li "* / % + - << >> < <= > >= == != & ^ | && ||" | |
| 1647 | .It Assignment operators | |
| 1648 | .Li "= += -= *= /= %= <<= >>= &= ^= |=" | |
| 1649 | .It Conditional operator | |
| 1650 | .Li "? :" | |
| 1651 | .El | |
| 984263bc | 1652 | .Pp |
| 99512ac4 | 1653 | The result of the expression is substituted in decimal. |
| 984263bc MD |
1654 | .Ss White Space Splitting (Field Splitting) |
| 1655 | After parameter expansion, command substitution, and | |
| 1656 | arithmetic expansion the shell scans the results of | |
| 1657 | expansions and substitutions that did not occur in double-quotes for | |
| 1658 | field splitting and multiple fields can result. | |
| 1659 | .Pp | |
| 1660 | The shell treats each character of the | |
| 99512ac4 PA |
1661 | .Va IFS |
| 1662 | variable as a delimiter and uses | |
| 984263bc MD |
1663 | the delimiters to split the results of parameter expansion and command |
| 1664 | substitution into fields. | |
| 1665 | .Ss Pathname Expansion (File Name Generation) | |
| 1666 | Unless the | |
| 1667 | .Fl f | |
| 1668 | option is set, | |
| 1669 | file name generation is performed | |
| 10185af4 PA |
1670 | after word splitting is complete. |
| 1671 | Each word is | |
| 1672 | viewed as a series of patterns, separated by slashes. | |
| 1673 | The | |
| 984263bc MD |
1674 | process of expansion replaces the word with the names of |
| 1675 | all existing files whose names can be formed by replacing | |
| 1676 | each pattern with a string that matches the specified pattern. | |
| 1677 | There are two restrictions on this: first, a pattern cannot match | |
| 1678 | a string containing a slash, and second, | |
| 1679 | a pattern cannot match a string starting with a period | |
| 1680 | unless the first character of the pattern is a period. | |
| 2fbd2f09 PA |
1681 | The next section describes the patterns used for |
| 1682 | Pathname Expansion, | |
| 1683 | the four varieties of parameter expansion for substring processing and the | |
| 984263bc MD |
1684 | .Ic case |
| 1685 | command. | |
| 1686 | .Ss Shell Patterns | |
| 1687 | A pattern consists of normal characters, which match themselves, | |
| 1688 | and meta-characters. | |
| 1689 | The meta-characters are | |
| cca2c150 TN |
1690 | .Ql * , |
| 1691 | .Ql \&? , | |
| 984263bc | 1692 | and |
| cca2c150 | 1693 | .Ql \&[ . |
| 984263bc MD |
1694 | These characters lose their special meanings if they are quoted. |
| 1695 | When command or variable substitution is performed and the dollar sign | |
| 1696 | or back quotes are not double-quoted, the value of the | |
| 1697 | variable or the output of the command is scanned for these | |
| 1698 | characters and they are turned into meta-characters. | |
| 1699 | .Pp | |
| 1700 | An asterisk | |
| 10185af4 | 1701 | .Pq Ql * |
| 984263bc MD |
1702 | matches any string of characters. |
| 1703 | A question mark | |
| 10185af4 | 1704 | .Pq Ql \&? |
| 984263bc MD |
1705 | matches any single character. |
| 1706 | A left bracket | |
| cca2c150 | 1707 | .Pq Ql \&[ |
| 984263bc MD |
1708 | introduces a character class. |
| 1709 | The end of the character class is indicated by a | |
| cca2c150 | 1710 | .Ql \&] ; |
| 984263bc | 1711 | if the |
| cca2c150 | 1712 | .Ql \&] |
| 984263bc | 1713 | is missing then the |
| cca2c150 | 1714 | .Ql \&[ |
| 984263bc | 1715 | matches a |
| cca2c150 | 1716 | .Ql \&[ |
| 984263bc MD |
1717 | rather than introducing a character class. |
| 1718 | A character class matches any of the characters between the square brackets. | |
| 2fbd2f09 | 1719 | A locale-dependent range of characters may be specified using a minus sign. |
| 215809b7 PA |
1720 | A named class of characters (see |
| 1721 | .Xr wctype 3 ) | |
| 1722 | may be specified by surrounding the name with | |
| 1723 | .Ql \&[: | |
| 1724 | and | |
| 1725 | .Ql :\&] . | |
| 1726 | For example, | |
| 1727 | .Ql \&[\&[:alpha:\&]\&] | |
| 1728 | is a shell pattern that matches a single letter. | |
| 984263bc | 1729 | The character class may be complemented by making an exclamation point |
| 10185af4 | 1730 | .Pq Ql !\& |
| 984263bc | 1731 | the first character of the character class. |
| 2fbd2f09 PA |
1732 | A caret |
| 1733 | .Pq Ql ^ | |
| 1734 | has the same effect but is non-standard. | |
| 984263bc MD |
1735 | .Pp |
| 1736 | To include a | |
| cca2c150 | 1737 | .Ql \&] |
| 984263bc MD |
1738 | in a character class, make it the first character listed |
| 1739 | (after the | |
| cca2c150 | 1740 | .Ql \&! |
| bb9a009b | 1741 | or |
| 2fbd2f09 | 1742 | .Ql ^ , |
| 984263bc MD |
1743 | if any). |
| 1744 | To include a | |
| cca2c150 | 1745 | .Ql - , |
| 984263bc MD |
1746 | make it the first or last character listed. |
| 1747 | .Ss Built-in Commands | |
| 99512ac4 | 1748 | This section lists the built-in commands. |
| 984263bc MD |
1749 | .Bl -tag -width indent |
| 1750 | .It Ic \&: | |
| 1751 | A null command that returns a 0 (true) exit value. | |
| 1752 | .It Ic \&. Ar file | |
| 1753 | The commands in the specified file are read and executed by the shell. | |
| 10185af4 PA |
1754 | The |
| 1755 | .Ic return | |
| 1756 | command may be used to return to the | |
| 1757 | .Ic \&. | |
| 1758 | command's caller. | |
| 984263bc MD |
1759 | If |
| 1760 | .Ar file | |
| 1761 | contains any | |
| cca2c150 | 1762 | .Ql / |
| 10185af4 PA |
1763 | characters, it is used as is. |
| 1764 | Otherwise, the shell searches the | |
| 99512ac4 | 1765 | .Va PATH |
| 10185af4 PA |
1766 | for the file. |
| 1767 | If it is not found in the | |
| 99512ac4 | 1768 | .Va PATH , |
| 984263bc | 1769 | it is sought in the current working directory. |
| 10185af4 PA |
1770 | .It Ic \&[ |
| 1771 | A built-in equivalent of | |
| 1772 | .Xr test 1 . | |
| 1bd69ff1 | 1773 | .It Ic alias Oo Ar name Ns Oo = Ns Ar string Oc Ar ... Oc |
| 984263bc MD |
1774 | If |
| 1775 | .Ar name Ns = Ns Ar string | |
| 1776 | is specified, the shell defines the alias | |
| 1777 | .Ar name | |
| 1778 | with value | |
| 1779 | .Ar string . | |
| 1780 | If just | |
| 1781 | .Ar name | |
| 1782 | is specified, the value of the alias | |
| 1783 | .Ar name | |
| 1784 | is printed. | |
| 1785 | With no arguments, the | |
| 1786 | .Ic alias | |
| 1787 | built-in command prints the names and values of all defined aliases | |
| 1788 | (see | |
| 1789 | .Ic unalias ) . | |
| 1790 | Alias values are written with appropriate quoting so that they are | |
| 1791 | suitable for re-input to the shell. | |
| 10185af4 PA |
1792 | Also see the |
| 1793 | .Sx Aliases | |
| 1794 | subsection. | |
| 984263bc MD |
1795 | .It Ic bg Op Ar job ... |
| 1796 | Continue the specified jobs | |
| 1797 | (or the current job if no jobs are given) | |
| 1798 | in the background. | |
| 99512ac4 PA |
1799 | .It Ic bind Oo Fl aeklrsv Oc Oo Ar key Oo Ar command Oc Oc |
| 1800 | List or alter key bindings for the line editor. | |
| 1801 | This command is documented in | |
| 1802 | .Xr editrc 5 . | |
| 1803 | .It Ic break Op Ar num | |
| 1804 | See the | |
| 1805 | .Sx Flow-Control Constructs | |
| 1806 | subsection. | |
| 984263bc MD |
1807 | .It Ic builtin Ar cmd Op Ar arg ... |
| 1808 | Execute the specified built-in command, | |
| 1809 | .Ar cmd . | |
| 1810 | This is useful when the user wishes to override a shell function | |
| 1811 | with the same name as a built-in command. | |
| 8c603ea4 | 1812 | .It Ic cd Oo Fl L | P Oc Oo Fl e Oc Op Ar directory |
| 984263bc MD |
1813 | Switch to the specified |
| 1814 | .Ar directory , | |
| 1815 | or to the directory specified in the | |
| 99512ac4 | 1816 | .Va HOME |
| 984263bc MD |
1817 | environment variable if no |
| 1818 | .Ar directory | |
| 1819 | is specified. | |
| 1820 | If | |
| 1821 | .Ar directory | |
| 1822 | does not begin with | |
| 1823 | .Pa / , \&. , | |
| 1824 | or | |
| 1825 | .Pa .. , | |
| 1826 | then the directories listed in the | |
| 99512ac4 | 1827 | .Va CDPATH |
| 984263bc MD |
1828 | variable will be |
| 1829 | searched for the specified | |
| 1830 | .Ar directory . | |
| 1831 | If | |
| 99512ac4 | 1832 | .Va CDPATH |
| 984263bc MD |
1833 | is unset, the current directory is searched. |
| 1834 | The format of | |
| 99512ac4 | 1835 | .Va CDPATH |
| 984263bc | 1836 | is the same as that of |
| 99512ac4 | 1837 | .Va PATH . |
| 984263bc MD |
1838 | In an interactive shell, |
| 1839 | the | |
| 1840 | .Ic cd | |
| 1841 | command will print out the name of the directory | |
| 1842 | that it actually switched to | |
| 1843 | if this is different from the name that the user gave. | |
| 1844 | These may be different either because the | |
| 99512ac4 | 1845 | .Va CDPATH |
| 984263bc MD |
1846 | mechanism was used or because a symbolic link was crossed. |
| 1847 | .Pp | |
| 1848 | If the | |
| 1849 | .Fl P | |
| 1850 | option is specified, | |
| 1851 | .Pa .. | |
| 1852 | is handled physically and symbolic links are resolved before | |
| 1853 | .Pa .. | |
| 1854 | components are processed. | |
| 1855 | If the | |
| 1856 | .Fl L | |
| 1857 | option is specified, | |
| 1858 | .Pa .. | |
| 1859 | is handled logically. | |
| 1860 | This is the default. | |
| 8c603ea4 PA |
1861 | .Pp |
| 1862 | The | |
| 1863 | .Fl e | |
| 1864 | option causes | |
| 1865 | .Ic cd | |
| 1866 | to return exit status 1 if the full pathname of the new directory | |
| 1867 | cannot be determined reliably or at all. | |
| 1868 | Normally this is not considered an error, | |
| 1869 | although a warning is printed. | |
| 984263bc MD |
1870 | .It Ic chdir |
| 1871 | A synonym for the | |
| 1872 | .Ic cd | |
| 1873 | built-in command. | |
| 1874 | .It Ic command Oo Fl p Oc Op Ar utility Op Ar argument ... | |
| 99512ac4 PA |
1875 | .It Ic command Oo Fl p Oc Fl v Ar utility |
| 1876 | .It Ic command Oo Fl p Oc Fl V Ar utility | |
| 10185af4 | 1877 | The first form of invocation executes the specified |
| 99512ac4 PA |
1878 | .Ar utility , |
| 1879 | ignoring shell functions in the search. | |
| 1880 | If | |
| 984263bc | 1881 | .Ar utility |
| 99512ac4 PA |
1882 | is a special builtin, |
| 1883 | it is executed as if it were a regular builtin. | |
| 984263bc MD |
1884 | .Pp |
| 1885 | If the | |
| 1886 | .Fl p | |
| 1887 | option is specified, the command search is performed using a | |
| 1888 | default value of | |
| 99512ac4 | 1889 | .Va PATH |
| 984263bc | 1890 | that is guaranteed to find all of the standard utilities. |
| 10185af4 PA |
1891 | .Pp |
| 1892 | If the | |
| 1893 | .Fl v | |
| 1894 | option is specified, | |
| 1895 | .Ar utility | |
| 1896 | is not executed but a description of its interpretation by the shell is | |
| 1897 | printed. | |
| 1898 | For ordinary commands the output is the path name; for shell built-in | |
| 1899 | commands, shell functions and keywords only the name is written. | |
| 1900 | Aliases are printed as | |
| 1901 | .Dq Ic alias Ar name Ns = Ns Ar value . | |
| 1902 | .Pp | |
| 1903 | The | |
| 1904 | .Fl V | |
| 1905 | option is identical to | |
| 1906 | .Fl v | |
| 1907 | except for the output. | |
| 1908 | It prints | |
| 1909 | .Dq Ar utility Ic is Ar description | |
| 1910 | where | |
| 1911 | .Ar description | |
| 1912 | is either | |
| 1913 | the path name to | |
| 1914 | .Ar utility , | |
| 99512ac4 | 1915 | a special shell builtin, |
| 10185af4 PA |
1916 | a shell builtin, |
| 1917 | a shell function, | |
| 1918 | a shell keyword | |
| 1919 | or | |
| 1920 | an alias for | |
| 8e8ff7b0 | 1921 | .Ar value . |
| 99512ac4 PA |
1922 | .It Ic continue Op Ar num |
| 1923 | See the | |
| 1924 | .Sx Flow-Control Constructs | |
| 1925 | subsection. | |
| 10185af4 PA |
1926 | .It Ic echo Oo Fl e | n Oc Op Ar string ... |
| 1927 | Print a space-separated list of the arguments to the standard output | |
| 1928 | and append a newline character. | |
| 984263bc MD |
1929 | .Bl -tag -width indent |
| 1930 | .It Fl n | |
| 1931 | Suppress the output of the trailing newline. | |
| 1932 | .It Fl e | |
| 1933 | Process C-style backslash escape sequences. | |
| 99512ac4 | 1934 | The |
| 984263bc | 1935 | .Ic echo |
| 99512ac4 | 1936 | command understands the following character escapes: |
| 984263bc MD |
1937 | .Bl -tag -width indent |
| 1938 | .It \ea | |
| 1939 | Alert (ring the terminal bell) | |
| 1940 | .It \eb | |
| 1941 | Backspace | |
| 1942 | .It \ec | |
| 1943 | Suppress the trailing newline (this has the side-effect of truncating the | |
| 1944 | line if it is not the last character) | |
| 1945 | .It \ee | |
| 99512ac4 PA |
1946 | The ESC character |
| 1947 | .Tn ( ASCII | |
| 1948 | 0x1b) | |
| 984263bc MD |
1949 | .It \ef |
| 1950 | Formfeed | |
| 1951 | .It \en | |
| 1952 | Newline | |
| 1953 | .It \er | |
| 1954 | Carriage return | |
| 1955 | .It \et | |
| 1956 | Horizontal tab | |
| 1957 | .It \ev | |
| 1958 | Vertical tab | |
| 1959 | .It \e\e | |
| 1960 | Literal backslash | |
| 1961 | .It \e0nnn | |
| 99512ac4 PA |
1962 | (Zero) The character whose octal value is |
| 1963 | .Ar nnn | |
| 984263bc MD |
1964 | .El |
| 1965 | .Pp | |
| 1966 | If | |
| 1967 | .Ar string | |
| 1968 | is not enclosed in quotes then the backslash itself must be escaped | |
| 10185af4 PA |
1969 | with a backslash to protect it from the shell. |
| 1970 | For example | |
| 984263bc MD |
1971 | .Bd -literal -offset indent |
| 1972 | $ echo -e "a\evb" | |
| 1973 | a | |
| 1974 | b | |
| 1975 | $ echo -e a\e\evb | |
| 1976 | a | |
| 1977 | b | |
| 1978 | $ echo -e "a\e\eb" | |
| 1979 | a\eb | |
| 1980 | $ echo -e a\e\e\e\eb | |
| 1981 | a\eb | |
| 1982 | .Ed | |
| 1983 | .El | |
| 1984 | .Pp | |
| 1985 | Only one of the | |
| 1986 | .Fl e | |
| 1987 | and | |
| 1988 | .Fl n | |
| 1989 | options may be specified. | |
| 1990 | .It Ic eval Ar string ... | |
| 1991 | Concatenate all the arguments with spaces. | |
| 1992 | Then re-parse and execute the command. | |
| 1bd69ff1 | 1993 | .It Ic exec Op Ar command Op Ar arg ... |
| 984263bc MD |
1994 | Unless |
| 1995 | .Ar command | |
| 1996 | is omitted, | |
| 1997 | the shell process is replaced with the specified program | |
| 1998 | (which must be a real program, not a shell built-in command or function). | |
| 1999 | Any redirections on the | |
| 2000 | .Ic exec | |
| 2001 | command are marked as permanent, | |
| 2002 | so that they are not undone when the | |
| 2003 | .Ic exec | |
| 2004 | command finishes. | |
| 2005 | .It Ic exit Op Ar exitstatus | |
| 2006 | Terminate the shell process. | |
| 2007 | If | |
| 2008 | .Ar exitstatus | |
| 2009 | is given | |
| 1de90000 PA |
2010 | it is used as the exit status of the shell. |
| 2011 | Otherwise, if the shell is executing an | |
| 99512ac4 PA |
2012 | .Cm EXIT |
| 2013 | trap, the exit status of the last command before the trap is used; | |
| 2014 | if the shell is executing a trap for a signal, | |
| 1de90000 PA |
2015 | the shell exits by resending the signal to itself. |
| 2016 | Otherwise, the exit status of the preceding command is used. | |
| 99512ac4 | 2017 | The exit status should be an integer between 0 and 255. |
| 10185af4 PA |
2018 | .It Ic export Ar name ... |
| 2019 | .It Ic export Op Fl p | |
| 984263bc MD |
2020 | The specified names are exported so that they will |
| 2021 | appear in the environment of subsequent commands. | |
| 2022 | The only way to un-export a variable is to | |
| 2023 | .Ic unset | |
| 2024 | it. | |
| 2025 | The shell allows the value of a variable to be set | |
| 2026 | at the same time as it is exported by writing | |
| 984263bc | 2027 | .Pp |
| 99512ac4 PA |
2028 | .D1 Ic export Ar name Ns = Ns Ar value |
| 2029 | .Pp | |
| 2030 | With no arguments the | |
| 2031 | .Ic export | |
| 2032 | command lists the names | |
| 984263bc MD |
2033 | of all exported variables. |
| 2034 | If the | |
| 2035 | .Fl p | |
| 2036 | option is specified, the exported variables are printed as | |
| 2037 | .Dq Ic export Ar name Ns = Ns Ar value | |
| 2038 | lines, suitable for re-input to the shell. | |
| 10185af4 PA |
2039 | .It Ic false |
| 2040 | A null command that returns a non-zero (false) exit value. | |
| 984263bc MD |
2041 | .It Ic fc Oo Fl e Ar editor Oc Op Ar first Op Ar last |
| 2042 | .It Ic fc Fl l Oo Fl nr Oc Op Ar first Op Ar last | |
| 2043 | .It Ic fc Fl s Oo Ar old Ns = Ns Ar new Oc Op Ar first | |
| 2044 | The | |
| 2045 | .Ic fc | |
| 2046 | built-in command lists, or edits and re-executes, | |
| 2047 | commands previously entered to an interactive shell. | |
| 2048 | .Bl -tag -width indent | |
| 2049 | .It Fl e Ar editor | |
| 2050 | Use the editor named by | |
| 2051 | .Ar editor | |
| 2052 | to edit the commands. | |
| 99512ac4 PA |
2053 | The |
| 2054 | .Ar editor | |
| 2055 | string is a command name, | |
| 984263bc | 2056 | subject to search via the |
| 99512ac4 | 2057 | .Va PATH |
| 984263bc MD |
2058 | variable. |
| 2059 | The value in the | |
| 99512ac4 | 2060 | .Va FCEDIT |
| 984263bc MD |
2061 | variable is used as a default when |
| 2062 | .Fl e | |
| 2063 | is not specified. | |
| 2064 | If | |
| 99512ac4 | 2065 | .Va FCEDIT |
| 984263bc | 2066 | is null or unset, the value of the |
| 99512ac4 | 2067 | .Va EDITOR |
| 984263bc MD |
2068 | variable is used. |
| 2069 | If | |
| 99512ac4 | 2070 | .Va EDITOR |
| 984263bc MD |
2071 | is null or unset, |
| 2072 | .Xr ed 1 | |
| 2073 | is used as the editor. | |
| 2074 | .It Fl l No (ell) | |
| 2075 | List the commands rather than invoking | |
| 10185af4 PA |
2076 | an editor on them. |
| 2077 | The commands are written in the | |
| 99512ac4 PA |
2078 | sequence indicated by the |
| 2079 | .Ar first | |
| 2080 | and | |
| 2081 | .Ar last | |
| 2082 | operands, as affected by | |
| 984263bc MD |
2083 | .Fl r , |
| 2084 | with each command preceded by the command number. | |
| 2085 | .It Fl n | |
| 2086 | Suppress command numbers when listing with | |
| 2087 | .Fl l . | |
| 2088 | .It Fl r | |
| 2089 | Reverse the order of the commands listed | |
| 2090 | (with | |
| 2091 | .Fl l ) | |
| 2092 | or edited | |
| 2093 | (with neither | |
| 2094 | .Fl l | |
| 2095 | nor | |
| 2096 | .Fl s ) . | |
| 2097 | .It Fl s | |
| 2098 | Re-execute the command without invoking an editor. | |
| 2099 | .It Ar first | |
| 2100 | .It Ar last | |
| 2101 | Select the commands to list or edit. | |
| 2102 | The number of previous commands that can be accessed | |
| 2103 | are determined by the value of the | |
| 99512ac4 | 2104 | .Va HISTSIZE |
| 984263bc MD |
2105 | variable. |
| 2106 | The value of | |
| 2107 | .Ar first | |
| 2108 | or | |
| 2109 | .Ar last | |
| 2110 | or both are one of the following: | |
| 2111 | .Bl -tag -width indent | |
| 99512ac4 | 2112 | .It Oo Cm + Oc Ns Ar num |
| 984263bc MD |
2113 | A positive number representing a command number; |
| 2114 | command numbers can be displayed with the | |
| 2115 | .Fl l | |
| 2116 | option. | |
| 99512ac4 | 2117 | .It Fl Ar num |
| 984263bc MD |
2118 | A negative decimal number representing the |
| 2119 | command that was executed | |
| 2120 | .Ar num | |
| 2121 | of | |
| 2122 | commands previously. | |
| 99512ac4 | 2123 | For example, \-1 is the immediately previous command. |
| 984263bc MD |
2124 | .It Ar string |
| 2125 | A string indicating the most recently entered command | |
| 2126 | that begins with that string. | |
| 2127 | If the | |
| 99512ac4 | 2128 | .Ar old Ns = Ns Ar new |
| 984263bc MD |
2129 | operand is not also specified with |
| 2130 | .Fl s , | |
| 2131 | the string form of the first operand cannot contain an embedded equal sign. | |
| 2132 | .El | |
| 2133 | .El | |
| 2134 | .Pp | |
| 99512ac4 | 2135 | The following variables affect the execution of |
| 984263bc | 2136 | .Ic fc : |
| 99512ac4 PA |
2137 | .Bl -tag -width ".Va HISTSIZE" |
| 2138 | .It Va FCEDIT | |
| 10185af4 | 2139 | Name of the editor to use for history editing. |
| 99512ac4 | 2140 | .It Va HISTSIZE |
| 984263bc MD |
2141 | The number of previous commands that are accessible. |
| 2142 | .El | |
| 2143 | .It Ic fg Op Ar job | |
| 2144 | Move the specified | |
| 2145 | .Ar job | |
| 2146 | or the current job to the foreground. | |
| 99512ac4 PA |
2147 | .It Ic getopts Ar optstring var |
| 2148 | The | |
| 2149 | .Tn POSIX | |
| 984263bc MD |
2150 | .Ic getopts |
| 2151 | command. | |
| 2152 | The | |
| 2153 | .Ic getopts | |
| 2154 | command deprecates the older | |
| 2155 | .Xr getopt 1 | |
| 2156 | command. | |
| 2157 | The first argument should be a series of letters, each possibly | |
| 2158 | followed by a colon which indicates that the option takes an argument. | |
| 10185af4 PA |
2159 | The specified variable is set to the parsed option. |
| 2160 | The index of | |
| 984263bc | 2161 | the next argument is placed into the shell variable |
| 99512ac4 | 2162 | .Va OPTIND . |
| 984263bc | 2163 | If an option takes an argument, it is placed into the shell variable |
| 99512ac4 | 2164 | .Va OPTARG . |
| 984263bc | 2165 | If an invalid option is encountered, |
| 99512ac4 | 2166 | .Ar var |
| 984263bc | 2167 | is set to |
| cca2c150 | 2168 | .Ql \&? . |
| 984263bc MD |
2169 | It returns a false value (1) when it encounters the end of the options. |
| 2170 | .It Ic hash Oo Fl rv Oc Op Ar command ... | |
| 2171 | The shell maintains a hash table which remembers the locations of commands. | |
| 2172 | With no arguments whatsoever, the | |
| 2173 | .Ic hash | |
| 2174 | command prints out the contents of this table. | |
| 2175 | Entries which have not been looked at since the last | |
| 2176 | .Ic cd | |
| 2177 | command are marked with an asterisk; | |
| 2178 | it is possible for these entries to be invalid. | |
| 2179 | .Pp | |
| 2180 | With arguments, the | |
| 2181 | .Ic hash | |
| 2182 | command removes each specified | |
| 2183 | .Ar command | |
| 2184 | from the hash table (unless they are functions) and then locates it. | |
| 2185 | With the | |
| 2186 | .Fl v | |
| 2187 | option, | |
| 2188 | .Ic hash | |
| 2189 | prints the locations of the commands as it finds them. | |
| 2190 | The | |
| 2191 | .Fl r | |
| 2192 | option causes the | |
| 2193 | .Ic hash | |
| 2194 | command to delete all the entries in the hash table except for functions. | |
| 2195 | .It Ic jobid Op Ar job | |
| 99512ac4 | 2196 | Print the process IDs of the processes in the specified |
| 984263bc MD |
2197 | .Ar job . |
| 2198 | If the | |
| 2199 | .Ar job | |
| 2200 | argument is omitted, use the current job. | |
| 9d7989de | 2201 | .It Ic jobs Oo Fl lps Oc Op Ar job ... |
| 984263bc MD |
2202 | Print information about the specified jobs, or all jobs if no |
| 2203 | .Ar job | |
| 2204 | argument is given. | |
| 2205 | The information printed includes job ID, status and command name. | |
| 2206 | .Pp | |
| 2207 | If the | |
| 2208 | .Fl l | |
| 2209 | option is specified, the PID of each job is also printed. | |
| 2210 | If the | |
| 9d7989de PA |
2211 | .Fl p |
| 2212 | option is specified, only the process IDs for the process group leaders | |
| 2213 | are printed, one per line. | |
| 2214 | If the | |
| 984263bc | 2215 | .Fl s |
| 9d7989de PA |
2216 | option is specified, only the PIDs of the job commands are printed, one per |
| 2217 | line. | |
| 99512ac4 PA |
2218 | .It Ic kill |
| 2219 | A built-in equivalent of | |
| 2220 | .Xr kill 1 | |
| 2221 | that additionally supports sending signals to jobs. | |
| 10185af4 PA |
2222 | .It Ic local Oo Ar variable ... Oc Op Fl |
| 2223 | See the | |
| 2224 | .Sx Functions | |
| 2225 | subsection. | |
| 99512ac4 PA |
2226 | .It Ic printf |
| 2227 | A built-in equivalent of | |
| 2228 | .Xr printf 1 . | |
| 10185af4 PA |
2229 | .It Ic pwd Op Fl L | P |
| 2230 | Print the path of the current directory. | |
| 2231 | The built-in command may | |
| 984263bc MD |
2232 | differ from the program of the same name because the |
| 2233 | built-in command remembers what the current directory | |
| 10185af4 PA |
2234 | is rather than recomputing it each time. |
| 2235 | This makes | |
| 2236 | it faster. | |
| 2237 | However, if the current directory is | |
| 984263bc MD |
2238 | renamed, |
| 2239 | the built-in version of | |
| 2240 | .Xr pwd 1 | |
| 2241 | will continue to print the old name for the directory. | |
| 2242 | .Pp | |
| 2243 | If the | |
| 2244 | .Fl P | |
| 2245 | option is specified, symbolic links are resolved. | |
| 2246 | If the | |
| 2247 | .Fl L | |
| 2248 | option is specified, the shell's notion of the current directory | |
| 2249 | is printed (symbolic links are not resolved). | |
| 2250 | This is the default. | |
| 99512ac4 PA |
2251 | .It Ic read Oo Fl p Ar prompt Oc Oo |
| 2252 | .Fl t Ar timeout Oc Oo Fl er Oc Ar variable ... | |
| 984263bc MD |
2253 | The |
| 2254 | .Ar prompt | |
| 2255 | is printed if the | |
| 2256 | .Fl p | |
| 2257 | option is specified | |
| 10185af4 PA |
2258 | and the standard input is a terminal. |
| 2259 | Then a line is | |
| 2260 | read from the standard input. | |
| 2261 | The trailing newline | |
| 984263bc MD |
2262 | is deleted from the line and the line is split as |
| 2263 | described in the section on | |
| 2264 | .Sx White Space Splitting (Field Splitting) | |
| 2265 | above, and | |
| 2266 | the pieces are assigned to the variables in order. | |
| 2267 | If there are more pieces than variables, the remaining | |
| 2268 | pieces (along with the characters in | |
| 99512ac4 | 2269 | .Va IFS |
| 984263bc MD |
2270 | that separated them) |
| 2271 | are assigned to the last variable. | |
| 2272 | If there are more variables than pieces, the remaining | |
| 2273 | variables are assigned the null string. | |
| 2274 | .Pp | |
| 2275 | Backslashes are treated specially, unless the | |
| 2276 | .Fl r | |
| 2277 | option is | |
| 10185af4 PA |
2278 | specified. |
| 2279 | If a backslash is followed by | |
| 984263bc | 2280 | a newline, the backslash and the newline will be |
| 10185af4 PA |
2281 | deleted. |
| 2282 | If a backslash is followed by any other | |
| 984263bc MD |
2283 | character, the backslash will be deleted and the following |
| 2284 | character will be treated as though it were not in | |
| 99512ac4 | 2285 | .Va IFS , |
| 984263bc MD |
2286 | even if it is. |
| 2287 | .Pp | |
| 2288 | If the | |
| 2289 | .Fl t | |
| 2290 | option is specified and the | |
| 2291 | .Ar timeout | |
| 99512ac4 | 2292 | elapses before a complete line of input is supplied, |
| 984263bc MD |
2293 | the |
| 2294 | .Ic read | |
| 10185af4 | 2295 | command will return an exit status of 1 without assigning any values. |
| 984263bc MD |
2296 | The |
| 2297 | .Ar timeout | |
| 2298 | value may optionally be followed by one of | |
| cca2c150 TN |
2299 | .Ql s , |
| 2300 | .Ql m | |
| 984263bc | 2301 | or |
| cca2c150 | 2302 | .Ql h |
| 984263bc MD |
2303 | to explicitly specify seconds, minutes or hours. |
| 2304 | If none is supplied, | |
| cca2c150 | 2305 | .Ql s |
| 984263bc MD |
2306 | is assumed. |
| 2307 | .Pp | |
| 2308 | The | |
| 2309 | .Fl e | |
| 2310 | option exists only for backward compatibility with older scripts. | |
| 2311 | .It Ic readonly Oo Fl p Oc Op Ar name ... | |
| 2312 | Each specified | |
| 2313 | .Ar name | |
| 2314 | is marked as read only, | |
| 2315 | so that it cannot be subsequently modified or unset. | |
| 2316 | The shell allows the value of a variable to be set | |
| 2317 | at the same time as it is marked read only | |
| 2318 | by using the following form: | |
| 99512ac4 PA |
2319 | .Pp |
| 2320 | .D1 Ic readonly Ar name Ns = Ns Ar value | |
| 984263bc MD |
2321 | .Pp |
| 2322 | With no arguments the | |
| 2323 | .Ic readonly | |
| 2324 | command lists the names of all read only variables. | |
| 2325 | If the | |
| 2326 | .Fl p | |
| 2327 | option is specified, the read-only variables are printed as | |
| 2328 | .Dq Ic readonly Ar name Ns = Ns Ar value | |
| 2329 | lines, suitable for re-input to the shell. | |
| 10185af4 PA |
2330 | .It Ic return Op Ar exitstatus |
| 2331 | See the | |
| 2332 | .Sx Functions | |
| 2333 | subsection. | |
| 984263bc MD |
2334 | .It Ic set Oo Fl /+abCEefIimnpTuVvx Oc Oo Fl /+o Ar longname Oc Oo |
| 2335 | .Fl c Ar string Oc Op Fl - Ar arg ... | |
| 2336 | The | |
| 2337 | .Ic set | |
| 2338 | command performs three different functions: | |
| 2339 | .Bl -item | |
| 2340 | .It | |
| 2341 | With no arguments, it lists the values of all shell variables. | |
| 2342 | .It | |
| 2343 | If options are given, | |
| 2344 | either in short form or using the long | |
| 2345 | .Dq Fl /+o Ar longname | |
| 2346 | form, | |
| 2347 | it sets or clears the specified options as described in the section called | |
| 2348 | .Sx Argument List Processing . | |
| 2349 | .It | |
| 2350 | If the | |
| 2351 | .Dq Fl - | |
| 2352 | option is specified, | |
| 2353 | .Ic set | |
| 2354 | will replace the shell's positional parameters with the subsequent | |
| 2355 | arguments. | |
| 2356 | If no arguments follow the | |
| 2357 | .Dq Fl - | |
| 2358 | option, | |
| 2359 | all the positional parameters will be cleared, | |
| 2360 | which is equivalent to executing the command | |
| 99512ac4 | 2361 | .Dq Li "shift $#" . |
| 984263bc MD |
2362 | The |
| 2363 | .Dq Fl - | |
| 2364 | flag may be omitted when specifying arguments to be used | |
| 2365 | as positional replacement parameters. | |
| 2366 | This is not recommended, | |
| 2367 | because the first argument may begin with a dash | |
| 10185af4 | 2368 | .Pq Ql - |
| 984263bc | 2369 | or a plus |
| 10185af4 | 2370 | .Pq Ql + , |
| 984263bc MD |
2371 | which the |
| 2372 | .Ic set | |
| 2373 | command will interpret as a request to enable or disable options. | |
| 2374 | .El | |
| 99512ac4 | 2375 | .It Ic setvar Ar variable value |
| 984263bc MD |
2376 | Assigns the specified |
| 2377 | .Ar value | |
| 2378 | to the specified | |
| 2379 | .Ar variable . | |
| 99512ac4 PA |
2380 | The |
| 2381 | .Ic setvar | |
| 2382 | command is intended to be used in functions that | |
| 984263bc MD |
2383 | assign values to variables whose names are passed as parameters. |
| 2384 | In general it is better to write | |
| 99512ac4 | 2385 | .Dq Ar variable Ns = Ns Ar value |
| 984263bc MD |
2386 | rather than using |
| 2387 | .Ic setvar . | |
| 2388 | .It Ic shift Op Ar n | |
| 2389 | Shift the positional parameters | |
| 2390 | .Ar n | |
| 2391 | times, or once if | |
| 2392 | .Ar n | |
| 2393 | is not specified. | |
| 99512ac4 PA |
2394 | A shift sets the value of |
| 2395 | .Li $1 | |
| 2396 | to the value of | |
| 2397 | .Li $2 , | |
| 2398 | the value of | |
| 2399 | .Li $2 | |
| 2400 | to the value of | |
| 2401 | .Li $3 , | |
| 2402 | and so on, | |
| 2403 | decreasing the value of | |
| 2404 | .Li $# | |
| 2405 | by one. | |
| 984263bc | 2406 | If there are zero positional parameters, shifting does not do anything. |
| 10185af4 PA |
2407 | .It Ic test |
| 2408 | A built-in equivalent of | |
| 2409 | .Xr test 1 . | |
| 0d5aaed6 | 2410 | .It Ic times |
| 38cd81f1 PA |
2411 | Print the amount of time spent executing the shell process and its children. |
| 2412 | The first output line shows the user and system times for the shell process | |
| 0d5aaed6 PA |
2413 | itself, the second one contains the user and system times for the |
| 2414 | children. | |
| 984263bc | 2415 | .It Ic trap Oo Ar action Oc Ar signal ... |
| 10185af4 | 2416 | .It Ic trap Fl l |
| 984263bc MD |
2417 | Cause the shell to parse and execute |
| 2418 | .Ar action | |
| 2419 | when any specified | |
| 2420 | .Ar signal | |
| 2421 | is received. | |
| 2422 | The signals are specified by name or number. | |
| 2423 | In addition, the pseudo-signal | |
| 2424 | .Cm EXIT | |
| 99512ac4 PA |
2425 | may be used to specify an |
| 2426 | .Ar action | |
| 2427 | that is performed when the shell terminates. | |
| 984263bc MD |
2428 | The |
| 2429 | .Ar action | |
| 10185af4 PA |
2430 | may be an empty string or a dash |
| 2431 | .Pq Ql - ; | |
| 984263bc MD |
2432 | the former causes the specified signal to be ignored |
| 2433 | and the latter causes the default action to be taken. | |
| 10185af4 PA |
2434 | Omitting the |
| 2435 | .Ar action | |
| 2436 | is another way to request the default action, for compatibility reasons this | |
| 2437 | usage is not recommended though. | |
| 38cd81f1 | 2438 | In a subshell or utility environment, |
| 1de90000 | 2439 | the shell resets trapped (but not ignored) signals to the default action. |
| 984263bc MD |
2440 | The |
| 2441 | .Ic trap | |
| 2442 | command has no effect on signals that were ignored on entry to the shell. | |
| 10185af4 PA |
2443 | .Pp |
| 2444 | Option | |
| 2445 | .Fl l | |
| 2446 | causes the | |
| 2447 | .Ic trap | |
| 2448 | command to display a list of valid signal names. | |
| 2449 | .It Ic true | |
| 2450 | A null command that returns a 0 (true) exit value. | |
| 984263bc MD |
2451 | .It Ic type Op Ar name ... |
| 2452 | Interpret each | |
| 2453 | .Ar name | |
| 2454 | as a command and print the resolution of the command search. | |
| 2455 | Possible resolutions are: | |
| 99512ac4 PA |
2456 | shell keyword, alias, special shell builtin, shell builtin, command, |
| 2457 | tracked alias | |
| 984263bc MD |
2458 | and not found. |
| 2459 | For aliases the alias expansion is printed; | |
| 2460 | for commands and tracked aliases | |
| 2461 | the complete pathname of the command is printed. | |
| 2462 | .It Ic ulimit Oo Fl HSabcdflmnstuv Oc Op Ar limit | |
| 2463 | Set or display resource limits (see | |
| 2464 | .Xr getrlimit 2 ) . | |
| 2465 | If | |
| 2466 | .Ar limit | |
| 2467 | is specified, the named resource will be set; | |
| 2468 | otherwise the current resource value will be displayed. | |
| 2469 | .Pp | |
| 2470 | If | |
| 2471 | .Fl H | |
| 2472 | is specified, the hard limits will be set or displayed. | |
| 2473 | While everybody is allowed to reduce a hard limit, | |
| 2474 | only the superuser can increase it. | |
| 2475 | The | |
| 2476 | .Fl S | |
| 2477 | option | |
| 10185af4 PA |
2478 | specifies the soft limits instead. |
| 2479 | When displaying limits, | |
| 984263bc MD |
2480 | only one of |
| 2481 | .Fl S | |
| 2482 | or | |
| 2483 | .Fl H | |
| 2484 | can be given. | |
| 2485 | The default is to display the soft limits, | |
| 2486 | and to set both the hard and the soft limits. | |
| 2487 | .Pp | |
| 2488 | Option | |
| 2489 | .Fl a | |
| 2490 | causes the | |
| 2491 | .Ic ulimit | |
| 2492 | command to display all resources. | |
| 2493 | The parameter | |
| 2494 | .Ar limit | |
| 2495 | is not acceptable in this mode. | |
| 2496 | .Pp | |
| 2497 | The remaining options specify which resource value is to be | |
| 2498 | displayed or modified. | |
| 2499 | They are mutually exclusive. | |
| 2500 | .Bl -tag -width indent | |
| 2501 | .It Fl b Ar sbsize | |
| 2502 | The maximum size of socket buffer usage, in bytes. | |
| 2503 | .It Fl c Ar coredumpsize | |
| 2504 | The maximal size of core dump files, in 512-byte blocks. | |
| 2505 | .It Fl d Ar datasize | |
| 2506 | The maximal size of the data segment of a process, in kilobytes. | |
| 2507 | .It Fl f Ar filesize | |
| 2508 | The maximal size of a file, in 512-byte blocks. | |
| 2509 | .It Fl l Ar lockedmem | |
| 2510 | The maximal size of memory that can be locked by a process, in | |
| 2511 | kilobytes. | |
| 2512 | .It Fl m Ar memoryuse | |
| 2513 | The maximal resident set size of a process, in kilobytes. | |
| 2514 | .It Fl n Ar nofiles | |
| 2515 | The maximal number of descriptors that could be opened by a process. | |
| 2516 | .It Fl s Ar stacksize | |
| 2517 | The maximal size of the stack segment, in kilobytes. | |
| 2518 | .It Fl t Ar time | |
| 2519 | The maximal amount of CPU time to be used by each process, in seconds. | |
| 2520 | .It Fl u Ar userproc | |
| 2521 | The maximal number of simultaneous processes for this user ID. | |
| 2522 | .It Fl v Ar virtualmem | |
| 2523 | The maximal virtual size of a process, in kilobytes. | |
| 2524 | .El | |
| 10185af4 | 2525 | .It Ic umask Oo Fl S Oc Op Ar mask |
| 984263bc MD |
2526 | Set the file creation mask (see |
| 2527 | .Xr umask 2 ) | |
| 10185af4 PA |
2528 | to the octal or symbolic (see |
| 2529 | .Xr chmod 1 ) | |
| 2530 | value specified by | |
| 984263bc MD |
2531 | .Ar mask . |
| 2532 | If the argument is omitted, the current mask value is printed. | |
| 10185af4 PA |
2533 | If the |
| 2534 | .Fl S | |
| 2535 | option is specified, the output is symbolic, otherwise the output is octal. | |
| 2536 | .It Ic unalias Oo Fl a Oc Op Ar name ... | |
| 2537 | The specified alias names are removed. | |
| 984263bc MD |
2538 | If |
| 2539 | .Fl a | |
| 2540 | is specified, all aliases are removed. | |
| 2541 | .It Ic unset Oo Fl fv Oc Ar name ... | |
| 2542 | The specified variables or functions are unset and unexported. | |
| 2543 | If the | |
| 2544 | .Fl v | |
| 2545 | option is specified or no options are given, the | |
| 2546 | .Ar name | |
| 2547 | arguments are treated as variable names. | |
| 2548 | If the | |
| 2549 | .Fl f | |
| 2550 | option is specified, the | |
| 2551 | .Ar name | |
| 2552 | arguments are treated as function names. | |
| 2553 | .It Ic wait Op Ar job | |
| 2554 | Wait for the specified | |
| 2555 | .Ar job | |
| 2556 | to complete and return the exit status of the last process in the | |
| 2557 | .Ar job . | |
| 2558 | If the argument is omitted, wait for all jobs to complete | |
| 2559 | and return an exit status of zero. | |
| 2560 | .El | |
| 2561 | .Ss Commandline Editing | |
| 2562 | When | |
| 2563 | .Nm | |
| 2564 | is being used interactively from a terminal, the current command | |
| 2565 | and the command history | |
| 2566 | (see | |
| 2567 | .Ic fc | |
| 2568 | in | |
| 2569 | .Sx Built-in Commands ) | |
| 99512ac4 PA |
2570 | can be edited using |
| 2571 | .Nm vi Ns -mode | |
| 2572 | command line editing. | |
| 984263bc | 2573 | This mode uses commands similar |
| 99512ac4 PA |
2574 | to a subset of those described in the |
| 2575 | .Xr vi 1 | |
| 2576 | man page. | |
| 984263bc | 2577 | The command |
| 99512ac4 | 2578 | .Dq Li "set -o vi" |
| 984263bc | 2579 | (or |
| 99512ac4 PA |
2580 | .Dq Li "set -V" ) |
| 2581 | enables | |
| 2582 | .Nm vi Ns -mode | |
| 2583 | editing and places | |
| 984263bc | 2584 | .Nm |
| 99512ac4 PA |
2585 | into |
| 2586 | .Nm vi | |
| 2587 | insert mode. | |
| 2588 | With | |
| 2589 | .Nm vi Ns -mode | |
| 2590 | enabled, | |
| 984263bc MD |
2591 | .Nm |
| 2592 | can be switched between insert mode and command mode by typing | |
| 2593 | .Aq ESC . | |
| 2594 | Hitting | |
| 2595 | .Aq return | |
| 2596 | while in command mode will pass the line to the shell. | |
| 2597 | .Pp | |
| 2598 | Similarly, the | |
| 99512ac4 | 2599 | .Dq Li "set -o emacs" |
| 984263bc | 2600 | (or |
| 99512ac4 | 2601 | .Dq Li "set -E" ) |
| 984263bc | 2602 | command can be used to enable a subset of |
| 99512ac4 PA |
2603 | .Nm emacs Ns -style |
| 2604 | command line editing features. | |
| 10185af4 PA |
2605 | .Sh ENVIRONMENT |
| 2606 | The following environment variables affect the execution of | |
| 2607 | .Nm : | |
| 99512ac4 PA |
2608 | .Bl -tag -width ".Ev LANGXXXXXX" |
| 2609 | .It Ev ENV | |
| 2610 | Initialization file for interactive shells. | |
| 2611 | .It Ev LANG , Ev LC_* | |
| 2612 | Locale settings. | |
| 2613 | These are inherited by children of the shell, | |
| 2614 | and is used in a limited manner by the shell itself. | |
| 2615 | .It Ev PWD | |
| 2616 | An absolute pathname for the current directory, | |
| 2617 | possibly containing symbolic links. | |
| 2618 | This is used and updated by the shell. | |
| 10185af4 PA |
2619 | .It Ev TERM |
| 2620 | The default terminal setting for the shell. | |
| 2621 | This is inherited by children of the shell, and is used in the history | |
| 2622 | editing modes. | |
| 2623 | .El | |
| 99512ac4 PA |
2624 | .Pp |
| 2625 | Additionally, all environment variables are turned into shell variables | |
| 2626 | at startup, | |
| 2627 | which may affect the shell as described under | |
| 2628 | .Sx Special Variables . | |
| 10185af4 PA |
2629 | .Sh EXIT STATUS |
| 2630 | Errors that are detected by the shell, such as a syntax error, will | |
| 2631 | cause the shell to exit with a non-zero exit status. | |
| 2632 | If the shell is not an interactive shell, the execution of the shell | |
| 2633 | file will be aborted. | |
| 2634 | Otherwise the shell will return the exit status of the last command | |
| 99512ac4 PA |
2635 | executed, or if the |
| 2636 | .Ic exit | |
| 2637 | builtin is used with a numeric argument, it | |
| 10185af4 | 2638 | will return the argument. |
| 984263bc MD |
2639 | .Sh SEE ALSO |
| 2640 | .Xr builtin 1 , | |
| 10185af4 | 2641 | .Xr chsh 1 , |
| 984263bc | 2642 | .Xr echo 1 , |
| 10185af4 | 2643 | .Xr ed 1 , |
| 7cd7d057 | 2644 | .Xr emacs 1 Pq Pa pkgsrc/editors/emacs , |
| 99512ac4 | 2645 | .Xr kill 1 , |
| 984263bc MD |
2646 | .Xr printf 1 , |
| 2647 | .Xr pwd 1 , | |
| 10185af4 PA |
2648 | .Xr test 1 , |
| 2649 | .Xr vi 1 , | |
| 2650 | .Xr execve 2 , | |
| 2651 | .Xr getrlimit 2 , | |
| 2652 | .Xr umask 2 , | |
| 215809b7 | 2653 | .Xr wctype 3 , |
| e0bca924 SW |
2654 | .Xr editrc 5 , |
| 2655 | .Xr script 7 | |
| 984263bc MD |
2656 | .Sh HISTORY |
| 2657 | A | |
| 2658 | .Nm | |
| 10185af4 | 2659 | command, the Thompson shell, appeared in |
| 984263bc | 2660 | .At v1 . |
| 10185af4 PA |
2661 | It was superseded in |
| 2662 | .At v7 | |
| 2663 | by the Bourne shell, which inherited the name | |
| 2664 | .Nm . | |
| 2665 | .Pp | |
| 2666 | This version of | |
| 2667 | .Nm | |
| 2668 | was rewritten in 1989 under the | |
| 2669 | .Bx | |
| 2670 | license after the Bourne shell from | |
| 2671 | .At V.4 . | |
| 2672 | .Sh AUTHORS | |
| 2673 | This version of | |
| 2674 | .Nm | |
| 2675 | was originally written by | |
| 2676 | .An Kenneth Almquist . | |
| 2677 | .Sh BUGS | |
| 2678 | The | |
| 2679 | .Nm | |
| 7602056e PA |
2680 | utility does not recognize multibyte characters other than UTF-8. |
| 2681 | Splitting using | |
| 2682 | .Va IFS | |
| 2683 | and the line editing library | |
| 2684 | .Xr editline 3 | |
| 2685 | do not recognize multibyte characters. | |
| 3f2d021a YT |
2686 | .Pp |
| 2687 | The characters generated by filename completion should probably be quoted | |
| 2688 | to ensure that the filename is still valid after the input line has been | |
| 2689 | processed. |