xref: /freebsd/bin/sh/sh.1 (revision fb039b55dcf1adebe6564747f7941bb70dda3337)
19ddb49cbSWarner Losh.\"-
24b88c807SRodney W. Grimes.\" Copyright (c) 1991, 1993
34b88c807SRodney W. Grimes.\"	The Regents of the University of California.  All rights reserved.
44b88c807SRodney W. Grimes.\"
54b88c807SRodney W. Grimes.\" This code is derived from software contributed to Berkeley by
64b88c807SRodney W. Grimes.\" Kenneth Almquist.
74b88c807SRodney W. Grimes.\"
84b88c807SRodney W. Grimes.\" Redistribution and use in source and binary forms, with or without
94b88c807SRodney W. Grimes.\" modification, are permitted provided that the following conditions
104b88c807SRodney W. Grimes.\" are met:
114b88c807SRodney W. Grimes.\" 1. Redistributions of source code must retain the above copyright
124b88c807SRodney W. Grimes.\"    notice, this list of conditions and the following disclaimer.
134b88c807SRodney W. Grimes.\" 2. Redistributions in binary form must reproduce the above copyright
144b88c807SRodney W. Grimes.\"    notice, this list of conditions and the following disclaimer in the
154b88c807SRodney W. Grimes.\"    documentation and/or other materials provided with the distribution.
164b88c807SRodney W. Grimes.\" 4. Neither the name of the University nor the names of its contributors
174b88c807SRodney W. Grimes.\"    may be used to endorse or promote products derived from this software
184b88c807SRodney W. Grimes.\"    without specific prior written permission.
194b88c807SRodney W. Grimes.\"
204b88c807SRodney W. Grimes.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
214b88c807SRodney W. Grimes.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
224b88c807SRodney W. Grimes.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
234b88c807SRodney W. Grimes.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
244b88c807SRodney W. Grimes.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
254b88c807SRodney W. Grimes.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
264b88c807SRodney W. Grimes.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
274b88c807SRodney W. Grimes.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
284b88c807SRodney W. Grimes.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
294b88c807SRodney W. Grimes.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
304b88c807SRodney W. Grimes.\" SUCH DAMAGE.
314b88c807SRodney W. Grimes.\"
32ab72124fSSteve Price.\"	from: @(#)sh.1	8.6 (Berkeley) 5/4/95
332a456239SPeter Wemm.\" $FreeBSD$
344b88c807SRodney W. Grimes.\"
35128dc4a2STim J. Robbins.Dd July 3, 2004
36ab72124fSSteve Price.Dt SH 1
37caa2db3bSRuslan Ermilov.Os
38ab72124fSSteve Price.Sh NAME
39ab72124fSSteve Price.Nm sh
40ab72124fSSteve Price.Nd command interpreter (shell)
41ab72124fSSteve Price.Sh SYNOPSIS
42ab72124fSSteve Price.Nm
437e1975c2STim J. Robbins.Op Fl /+abCEefIimnPpsTuVvx
44ab72124fSSteve Price.Op Fl /+o Ar longname
45c7a197e1SWolfram Schneider.Op Fl c Ar string
4681e9cda2SRuslan Ermilov.Op Ar arg ...
47ab72124fSSteve Price.Sh DESCRIPTION
48e918fc8fSSheldon HearnThe
49e918fc8fSSheldon Hearn.Nm
50e918fc8fSSheldon Hearnutility is the standard command interpreter for the system.
51ab72124fSSteve PriceThe current version of
52ab72124fSSteve Price.Nm
53ab72124fSSteve Priceis in the process of being changed to
54ab72124fSSteve Priceconform with the
55ab72124fSSteve Price.St -p1003.2
56eccea571SRuslan Ermilovspecification for the shell.
57eccea571SRuslan ErmilovThis version has many features which make
58ab72124fSSteve Priceit appear
594b88c807SRodney W. Grimessimilar in some respects to the Korn shell, but it is not a Korn
60fbc8f8a2SJens Schweikhardtshell clone like pdksh.
6149e11e3aSSheldon HearnOnly features
624b88c807SRodney W. Grimesdesignated by POSIX, plus a few Berkeley extensions, are being
63ab72124fSSteve Priceincorporated into this shell.
6449e11e3aSSheldon HearnThis man page is not intended to be a tutorial nor a complete
654b88c807SRodney W. Grimesspecification of the shell.
66ab72124fSSteve Price.Ss Overview
674b88c807SRodney W. GrimesThe shell is a command that reads lines from
684b88c807SRodney W. Grimeseither a file or the terminal, interprets them, and
69e6d3cf26SSheldon Hearngenerally executes other commands.
7049e11e3aSSheldon HearnIt is the program that is started when a user logs into the system,
7149e11e3aSSheldon Hearnalthough a user can select a different shell with the
72c644db6aSSheldon Hearn.Xr chsh 1
7349e11e3aSSheldon Hearncommand.
744b88c807SRodney W. GrimesThe shell
754b88c807SRodney W. Grimesimplements a language that has flow control constructs,
764b88c807SRodney W. Grimesa macro facility that provides a variety of features in
778eed22b1SJens Schweikhardtaddition to data storage, along with built-in history and line
78eccea571SRuslan Ermilovediting capabilities.
79eccea571SRuslan ErmilovIt incorporates many features to
804b88c807SRodney W. Grimesaid interactive use and has the advantage that the interpretative
814b88c807SRodney W. Grimeslanguage is common to both interactive and non-interactive
82eccea571SRuslan Ermilovuse (shell scripts).
83eccea571SRuslan ErmilovThat is, commands can be typed directly
8449e11e3aSSheldon Hearnto the running shell or can be put into a file,
8549e11e3aSSheldon Hearnwhich can be executed directly by the shell.
86ab72124fSSteve Price.Ss Invocation
8749e11e3aSSheldon Hearn.\"
8849e11e3aSSheldon Hearn.\" XXX This next sentence is incredibly confusing.
8949e11e3aSSheldon Hearn.\"
9049e11e3aSSheldon HearnIf no arguments are present and if the standard input of the shell
9149e11e3aSSheldon Hearnis connected to a terminal
9249e11e3aSSheldon Hearn(or if the
9349e11e3aSSheldon Hearn.Fl i
9449e11e3aSSheldon Hearnoption is set),
95eccea571SRuslan Ermilovthe shell is considered an interactive shell.
96eccea571SRuslan ErmilovAn interactive shell
974b88c807SRodney W. Grimesgenerally prompts before each command and handles programming
984b88c807SRodney W. Grimesand command errors differently (as described below).
994b88c807SRodney W. GrimesWhen first starting, the shell inspects argument 0, and
10049e11e3aSSheldon Hearnif it begins with a dash
101a762afe5SGiorgos Keramidas.Pq Ql - ,
10249e11e3aSSheldon Hearnthe shell is also considered a login shell.
10349e11e3aSSheldon HearnThis is normally done automatically by the system
104eccea571SRuslan Ermilovwhen the user first logs in.
105eccea571SRuslan ErmilovA login shell first reads commands
106ab72124fSSteve Pricefrom the files
107ab72124fSSteve Price.Pa /etc/profile
10849e11e3aSSheldon Hearnand then
109ab72124fSSteve Price.Pa .profile
110eccea571SRuslan Ermilovif they exist.
111eccea571SRuslan ErmilovIf the environment variable
112ab72124fSSteve Price.Ev ENV
113ab72124fSSteve Priceis set on entry to a shell, or is set in the
114ab72124fSSteve Price.Pa .profile
11549e11e3aSSheldon Hearnof a login shell, the shell then reads commands from the file named in
116ab72124fSSteve Price.Ev ENV .
117ab72124fSSteve PriceTherefore, a user should place commands that are to be executed only
118ab72124fSSteve Priceat login time in the
119ab72124fSSteve Price.Pa .profile
120ab72124fSSteve Pricefile, and commands that are executed for every shell inside the
121ab72124fSSteve Price.Ev ENV
122e6d3cf26SSheldon Hearnfile.
12349e11e3aSSheldon HearnThe user can set the
124ab72124fSSteve Price.Ev ENV
12549e11e3aSSheldon Hearnvariable to some file by placing the following line in the file
126ab72124fSSteve Price.Pa .profile
12749e11e3aSSheldon Hearnin the home directory,
128ab72124fSSteve Pricesubstituting for
129ab72124fSSteve Price.Pa .shinit
13049e11e3aSSheldon Hearnthe filename desired:
13149e11e3aSSheldon Hearn.Pp
13249e11e3aSSheldon Hearn.Dl ENV=$HOME/.shinit; export ENV
13349e11e3aSSheldon Hearn.Pp
13449e11e3aSSheldon HearnThe first non-option argument specified on the command line
13549e11e3aSSheldon Hearnwill be treated as the
1364b88c807SRodney W. Grimesname of a file from which to read commands (a shell script), and
1374b88c807SRodney W. Grimesthe remaining arguments are set as the positional parameters
138eccea571SRuslan Ermilovof the shell ($1, $2, etc).
139eccea571SRuslan ErmilovOtherwise, the shell reads commands
1404b88c807SRodney W. Grimesfrom its standard input.
141ea76be72SSteve Price.Pp
142ea76be72SSteve PriceUnlike older versions of
143ea76be72SSteve Price.Nm
144ea76be72SSteve Pricethe
145ea76be72SSteve Price.Ev ENV
146eccea571SRuslan Ermilovscript is only sourced on invocation of interactive shells.
147eccea571SRuslan ErmilovThis
148ea76be72SSteve Pricecloses a well-known, and sometimes easily exploitable security
149ea76be72SSteve Pricehole related to poorly thought out
150ea76be72SSteve Price.Ev ENV
151ea76be72SSteve Pricescripts.
152ab72124fSSteve Price.Ss Argument List Processing
153ab72124fSSteve PriceAll of the single letter options to
154ab72124fSSteve Price.Nm
15549e11e3aSSheldon Hearnhave a corresponding long name,
15649e11e3aSSheldon Hearnwith the exception of
15749e11e3aSSheldon Hearn.Fl c
15849e11e3aSSheldon Hearnand
15949e11e3aSSheldon Hearn.Fl /+o .
16049e11e3aSSheldon HearnThese long names are provided next to the single letter options
16149e11e3aSSheldon Hearnin the descriptions below.
16249e11e3aSSheldon HearnThe long name for an option may be specified as an argument to the
16349e11e3aSSheldon Hearn.Fl /+o
16449e11e3aSSheldon Hearnoption of
165facc6767SRuslan Ermilov.Nm .
16649e11e3aSSheldon HearnOnce the shell is running,
16749e11e3aSSheldon Hearnthe long name for an option may be specified as an argument to the
16849e11e3aSSheldon Hearn.Fl /+o
16949e11e3aSSheldon Hearnoption of the
170c644db6aSSheldon Hearn.Ic set
1718eed22b1SJens Schweikhardtbuilt-in command
17249e11e3aSSheldon Hearn(described later in the section called
1738eed22b1SJens Schweikhardt.Sx Built-in Commands ) .
17449e11e3aSSheldon HearnIntroducing an option with a dash
175a762afe5SGiorgos Keramidas.Pq Ql -
17649e11e3aSSheldon Hearnenables the option,
17749e11e3aSSheldon Hearnwhile using a plus
178a762afe5SGiorgos Keramidas.Pq Ql +
17949e11e3aSSheldon Hearndisables the option.
18049e11e3aSSheldon HearnA
18149e11e3aSSheldon Hearn.Dq Li --
182fab26805SJoseph Koshyor plain
183a762afe5SGiorgos Keramidas.Dq Ql -
184fab26805SJoseph Koshywill stop option processing and will force the remaining
185fab26805SJoseph Koshywords on the command line to be treated as arguments.
18649e11e3aSSheldon HearnThe
18749e11e3aSSheldon Hearn.Fl /+o
18849e11e3aSSheldon Hearnand
18949e11e3aSSheldon Hearn.Fl c
19049e11e3aSSheldon Hearnoptions do not have long names.
19149e11e3aSSheldon HearnThey take arguments and are described after the single letter options.
19281e9cda2SRuslan Ermilov.Bl -tag -width indent
193ab72124fSSteve Price.It Fl a Li allexport
19449e11e3aSSheldon HearnFlag variables for export when assignments are made to them.
195ab72124fSSteve Price.It Fl b Li notify
196ab72124fSSteve PriceEnable asynchronous notification of background job
197ab72124fSSteve Pricecompletion.
198c4d9468eSRuslan Ermilov(UNIMPLEMENTED)
199ab72124fSSteve Price.It Fl C Li noclobber
200c644db6aSSheldon HearnDo not overwrite existing files with
20149e11e3aSSheldon Hearn.Dq Li > .
202ab72124fSSteve Price.It Fl E Li emacs
2038eed22b1SJens SchweikhardtEnable the built-in
204ab72124fSSteve Price.Xr emacs 1
20549e11e3aSSheldon Hearncommand line editor (disables the
206ab72124fSSteve Price.Fl V
20749e11e3aSSheldon Hearnoption if it has been set).
208ab72124fSSteve Price.It Fl e Li errexit
20949e11e3aSSheldon HearnExit immediately if any untested command fails in non-interactive mode.
2104b88c807SRodney W. GrimesThe exit status of a command is considered to be
2114b88c807SRodney W. Grimesexplicitly tested if the command is used to control
2124b88c807SRodney W. Grimesan if, elif, while, or until; or if the command is the left
213ab72124fSSteve Pricehand operand of an
21449e11e3aSSheldon Hearn.Dq Li &&
215ab72124fSSteve Priceor
21649e11e3aSSheldon Hearn.Dq Li ||
217ab72124fSSteve Priceoperator.
218ab72124fSSteve Price.It Fl f Li noglob
2194b88c807SRodney W. GrimesDisable pathname expansion.
220ab72124fSSteve Price.It Fl I Li ignoreeof
22149e11e3aSSheldon HearnIgnore
22249e11e3aSSheldon Hearn.Dv EOF Ns ' Ns s
22349e11e3aSSheldon Hearnfrom input when in interactive mode.
224ab72124fSSteve Price.It Fl i Li interactive
225ab72124fSSteve PriceForce the shell to behave interactively.
226ab72124fSSteve Price.It Fl m Li monitor
227ab72124fSSteve PriceTurn on job control (set automatically when interactive).
228ab72124fSSteve Price.It Fl n Li noexec
2294b88c807SRodney W. GrimesIf not interactive, read commands but do not
230eccea571SRuslan Ermilovexecute them.
231eccea571SRuslan ErmilovThis is useful for checking the
2324b88c807SRodney W. Grimessyntax of shell scripts.
2337e1975c2STim J. Robbins.It Fl P Li physical
2347e1975c2STim J. RobbinsChange the default for the
2357e1975c2STim J. Robbins.Ic cd
2367e1975c2STim J. Robbinsand
2377e1975c2STim J. Robbins.Ic pwd
2387e1975c2STim J. Robbinscommands from
2397e1975c2STim J. Robbins.Fl L
2407e1975c2STim J. Robbins(logical directory layout)
2417e1975c2STim J. Robbinsto
2427e1975c2STim J. Robbins.Fl P
2437e1975c2STim J. Robbins(physical directory layout).
244ab72124fSSteve Price.It Fl p Li privileged
245eccea571SRuslan ErmilovTurn on privileged mode.
246eccea571SRuslan ErmilovThis mode is enabled on startup
247621a31c6SSteve Priceif either the effective user or group id is not equal to the
248eccea571SRuslan Ermilovreal user or group id.
249eccea571SRuslan ErmilovTurning this mode off sets the
250621a31c6SSteve Priceeffective user and group ids to the real user and group ids.
25149e11e3aSSheldon HearnWhen this mode is enabled for interactive shells, the file
252ab72124fSSteve Price.Pa /etc/suid_profile
25349e11e3aSSheldon Hearnis sourced instead of
25449e11e3aSSheldon Hearn.Pa ~/.profile
255ab72124fSSteve Priceafter
256ab72124fSSteve Price.Pa /etc/profile
25749e11e3aSSheldon Hearnis sourced, and the contents of the
258ab72124fSSteve Price.Ev ENV
25949e11e3aSSheldon Hearnvariable are ignored.
260ab72124fSSteve Price.It Fl s Li stdin
2614b88c807SRodney W. GrimesRead commands from standard input (set automatically
262eccea571SRuslan Ermilovif no file arguments are present).
263eccea571SRuslan ErmilovThis option has
2644b88c807SRodney W. Grimesno effect when set after the shell has already started
265eccea571SRuslan Ermilovrunning (i.e., when set with the
266c644db6aSSheldon Hearn.Ic set
2676b15476eSSheldon Hearncommand).
268304199ceSTom Rhodes.It Fl T Li trapsasync
269e6d3cf26SSheldon HearnWhen waiting for a child, execute traps immediately.
270e6d3cf26SSheldon HearnIf this option is not set,
271e6d3cf26SSheldon Hearntraps are executed after the child exits,
272e6d3cf26SSheldon Hearnas specified in
273af5eb6fcSMaxim Konovalov.St -p1003.2 .
2746b15476eSSheldon HearnThis nonstandard option is useful for putting guarding shells around
275eccea571SRuslan Ermilovchildren that block signals.
276eccea571SRuslan ErmilovThe surrounding shell may kill the child
2776b15476eSSheldon Hearnor it may just return control to the tty and leave the child alone,
2786b15476eSSheldon Hearnlike this:
279c1c72a3cSMartin Cracauer.Bd -literal -offset indent
280c1c72a3cSMartin Cracauersh -T -c "trap 'exit 1' 2 ; some-blocking-program"
281c1c72a3cSMartin Cracauer.Ed
282c1c72a3cSMartin Cracauer.Pp
283ab72124fSSteve Price.It Fl u Li nounset
284ab72124fSSteve PriceWrite a message to standard error when attempting
285ab72124fSSteve Priceto expand a variable that is not set, and if the
286ab72124fSSteve Priceshell is not interactive, exit immediately.
287ab72124fSSteve Price.It Fl V Li vi
2888eed22b1SJens SchweikhardtEnable the built-in
289ab72124fSSteve Price.Xr vi 1
290ab72124fSSteve Pricecommand line editor (disables
291ab72124fSSteve Price.Fl E
292ab72124fSSteve Priceif it has been set).
293ab72124fSSteve Price.It Fl v Li verbose
294ab72124fSSteve PriceThe shell writes its input to standard error
295eccea571SRuslan Ermilovas it is read.
296eccea571SRuslan ErmilovUseful for debugging.
297ab72124fSSteve Price.It Fl x Li xtrace
29849e11e3aSSheldon HearnWrite each command
29949e11e3aSSheldon Hearn(preceded by
3006fa13ec0SRuslan Ermilov.Dq Li "+ " )
30149e11e3aSSheldon Hearnto standard error before it is executed.
30249e11e3aSSheldon HearnUseful for debugging.
30349e11e3aSSheldon Hearn.El
30449e11e3aSSheldon Hearn.Pp
30549e11e3aSSheldon HearnThe
306fd50df30SRuslan Ermilov.Fl c
307fd50df30SRuslan Ermilovoption causes the commands to be read from the
308fd50df30SRuslan Ermilov.Ar string
309fd50df30SRuslan Ermilovoperand instead of from the standard input.
310fd50df30SRuslan ErmilovKeep in mind that this option only accepts a single string as its
311fd50df30SRuslan Ermilovargument, hence multi-word strings must be quoted.
312fd50df30SRuslan Ermilov.Pp
313fd50df30SRuslan ErmilovThe
31449e11e3aSSheldon Hearn.Fl /+o
31549e11e3aSSheldon Hearnoption takes as its only argument the long name of an option
31649e11e3aSSheldon Hearnto be enabled or disabled.
31749e11e3aSSheldon HearnFor example, the following two invocations of
31849e11e3aSSheldon Hearn.Nm
3198eed22b1SJens Schweikhardtboth enable the built-in
32049e11e3aSSheldon Hearn.Xr emacs 1
32149e11e3aSSheldon Hearncommand line editor:
32249e11e3aSSheldon Hearn.Bd -literal -offset indent
32349e11e3aSSheldon Hearnset -E
32449e11e3aSSheldon Hearnset -o emacs
32549e11e3aSSheldon Hearn.Ed
326d513af6aSTim J. Robbins.Pp
327d513af6aSTim J. RobbinsIf used without an argument, the
328d513af6aSTim J. Robbins.Fl o
329d513af6aSTim J. Robbinsoption displays the current option settings in a human-readable format.
330d513af6aSTim J. RobbinsIf
331d513af6aSTim J. Robbins.Cm +o
332d513af6aSTim J. Robbinsis used without an argument, the current option settings are output
333d513af6aSTim J. Robbinsin a format suitable for re-input into the shell.
334ab72124fSSteve Price.Ss Lexical Structure
3354b88c807SRodney W. GrimesThe shell reads input in terms of lines from a file and breaks
3364b88c807SRodney W. Grimesit up into words at whitespace (blanks and tabs), and at
3374b88c807SRodney W. Grimescertain sequences of
3386b15476eSSheldon Hearncharacters called
3396b15476eSSheldon Hearn.Dq operators ,
3406b15476eSSheldon Hearnwhich are special to the shell.
3414b88c807SRodney W. GrimesThere are two types of operators: control operators and
3424b88c807SRodney W. Grimesredirection operators (their meaning is discussed later).
343ab72124fSSteve PriceThe following is a list of valid operators:
34481e9cda2SRuslan Ermilov.Bl -tag -width indent
34549e11e3aSSheldon Hearn.It Control operators:
34649e11e3aSSheldon Hearn.Bl -column "XXX" "XXX" "XXX" "XXX" "XXX" -offset center -compact
34781e9cda2SRuslan Ermilov.It Li & Ta Li && Ta Li ( Ta Li ) Ta Li \en
34881e9cda2SRuslan Ermilov.It Li ;; Ta Li ; Ta Li | Ta Li ||
34949e11e3aSSheldon Hearn.El
35049e11e3aSSheldon Hearn.It Redirection operators:
3514682f420SBrian Somers.Bl -column "XXX" "XXX" "XXX" "XXX" "XXX" -offset center -compact
35281e9cda2SRuslan Ermilov.It Li < Ta Li > Ta Li << Ta Li >> Ta Li <>
35381e9cda2SRuslan Ermilov.It Li <& Ta Li >& Ta Li <<- Ta Li >|
35449e11e3aSSheldon Hearn.El
355ab72124fSSteve Price.El
356ab72124fSSteve Price.Ss Quoting
3574b88c807SRodney W. GrimesQuoting is used to remove the special meaning of certain characters
3584b88c807SRodney W. Grimesor words to the shell, such as operators, whitespace, or
359eccea571SRuslan Ermilovkeywords.
360eccea571SRuslan ErmilovThere are three types of quoting: matched single quotes,
3614b88c807SRodney W. Grimesmatched double quotes, and backslash.
36281e9cda2SRuslan Ermilov.Bl -tag -width indent
363ab72124fSSteve Price.It Single Quotes
3644b88c807SRodney W. GrimesEnclosing characters in single quotes preserves the literal
365ab0a2172SSteve Pricemeaning of all the characters (except single quotes, making
366ab0a2172SSteve Priceit impossible to put single-quotes in a single-quoted string).
367ab72124fSSteve Price.It Double Quotes
3684b88c807SRodney W. GrimesEnclosing characters within double quotes preserves the literal
36949e11e3aSSheldon Hearnmeaning of all characters except dollarsign
370a762afe5SGiorgos Keramidas.Pq Ql $ ,
37149e11e3aSSheldon Hearnbackquote
372a762afe5SGiorgos Keramidas.Pq Ql ` ,
37349e11e3aSSheldon Hearnand backslash
374a762afe5SGiorgos Keramidas.Pq Ql \e .
37549e11e3aSSheldon HearnThe backslash inside double quotes is historically weird.
37649e11e3aSSheldon HearnIt remains literal unless it precedes the following characters,
37749e11e3aSSheldon Hearnwhich it serves to quote:
37849e11e3aSSheldon Hearn.Bl -column "XXX" "XXX" "XXX" "XXX" "XXX" -offset center -compact
37981e9cda2SRuslan Ermilov.It Li $ Ta Li ` Ta Li \&" Ta Li \e\  Ta Li \en
38049e11e3aSSheldon Hearn.El
381ab72124fSSteve Price.It Backslash
382ab72124fSSteve PriceA backslash preserves the literal meaning of the following
38349e11e3aSSheldon Hearncharacter, with the exception of the newline character
384a762afe5SGiorgos Keramidas.Pq Ql \en .
38549e11e3aSSheldon HearnA backslash preceding a newline is treated as a line continuation.
386ab72124fSSteve Price.El
387ab72124fSSteve Price.Ss Reserved Words
3884b88c807SRodney W. GrimesReserved words are words that have special meaning to the
3894b88c807SRodney W. Grimesshell and are recognized at the beginning of a line and
390eccea571SRuslan Ermilovafter a control operator.
391eccea571SRuslan ErmilovThe following are reserved words:
39249e11e3aSSheldon Hearn.Bl -column "doneXX" "elifXX" "elseXX" "untilXX" "whileX" -offset center
39381e9cda2SRuslan Ermilov.It Li \&! Ta { Ta } Ta Ic case Ta Ic do
39481e9cda2SRuslan Ermilov.It Ic done Ta Ic elif Ta Ic else Ta Ic esac Ta Ic fi
39581e9cda2SRuslan Ermilov.It Ic for Ta Ic if Ta Ic then Ta Ic until Ta Ic while
39649e11e3aSSheldon Hearn.El
397ab72124fSSteve Price.Ss Aliases
398ab72124fSSteve PriceAn alias is a name and corresponding value set using the
399c644db6aSSheldon Hearn.Ic alias
400eccea571SRuslan Ermilovbuilt-in command.
401eccea571SRuslan ErmilovWhenever a reserved word may occur (see above),
4024b88c807SRodney W. Grimesand after checking for reserved words, the shell
403e6d3cf26SSheldon Hearnchecks the word to see if it matches an alias.
404e6d3cf26SSheldon HearnIf it does, it replaces it in the input stream with its value.
405e6d3cf26SSheldon HearnFor example, if there is an alias called
40649e11e3aSSheldon Hearn.Dq Li lf
4076b15476eSSheldon Hearnwith the value
40849e11e3aSSheldon Hearn.Dq Li ls -F ,
4094b88c807SRodney W. Grimesthen the input
410ab72124fSSteve Price.Bd -literal -offset indent
41149e11e3aSSheldon Hearnlf foobar
412ab72124fSSteve Price.Ed
413ab72124fSSteve Price.Pp
4144b88c807SRodney W. Grimeswould become
415ab72124fSSteve Price.Bd -literal -offset indent
41649e11e3aSSheldon Hearnls -F foobar
417ab72124fSSteve Price.Ed
418ab72124fSSteve Price.Pp
4194b88c807SRodney W. GrimesAliases provide a convenient way for naive users to
4204b88c807SRodney W. Grimescreate shorthands for commands without having to learn how
421eccea571SRuslan Ermilovto create functions with arguments.
422eccea571SRuslan ErmilovThey can also be
423eccea571SRuslan Ermilovused to create lexically obscure code.
424eccea571SRuslan ErmilovThis use is discouraged.
425ab72124fSSteve Price.Ss Commands
4264b88c807SRodney W. GrimesThe shell interprets the words it reads according to a
4274b88c807SRodney W. Grimeslanguage, the specification of which is outside the scope
428ab72124fSSteve Priceof this man page (refer to the BNF in the
429ab72124fSSteve Price.St -p1003.2
430eccea571SRuslan Ermilovdocument).
431eccea571SRuslan ErmilovEssentially though, a line is read and if
4324b88c807SRodney W. Grimesthe first word of the line (or after a control operator)
4334b88c807SRodney W. Grimesis not a reserved word, then the shell has recognized a
434eccea571SRuslan Ermilovsimple command.
435eccea571SRuslan ErmilovOtherwise, a complex command or some
4364b88c807SRodney W. Grimesother special construct may have been recognized.
437ab72124fSSteve Price.Ss Simple Commands
4384b88c807SRodney W. GrimesIf a simple command has been recognized, the shell performs
4394b88c807SRodney W. Grimesthe following actions:
440ab72124fSSteve Price.Bl -enum
441ab72124fSSteve Price.It
4426b15476eSSheldon HearnLeading words of the form
44349e11e3aSSheldon Hearn.Dq Li name=value
4446b15476eSSheldon Hearnare stripped off and assigned to the environment of
445eccea571SRuslan Ermilovthe simple command.
446eccea571SRuslan ErmilovRedirection operators and
4474b88c807SRodney W. Grimestheir arguments (as described below) are stripped
4484b88c807SRodney W. Grimesoff and saved for processing.
449ab72124fSSteve Price.It
450ab72124fSSteve PriceThe remaining words are expanded as described in
4516b15476eSSheldon Hearnthe section called
4526b15476eSSheldon Hearn.Sx Word Expansions ,
4536b15476eSSheldon Hearnand the first remaining word is considered the command
454eccea571SRuslan Ermilovname and the command is located.
455eccea571SRuslan ErmilovThe remaining
4564b88c807SRodney W. Grimeswords are considered the arguments of the command.
4576b15476eSSheldon HearnIf no command name resulted, then the
45849e11e3aSSheldon Hearn.Dq Li name=value
4594b88c807SRodney W. Grimesvariable assignments recognized in 1) affect the
4604b88c807SRodney W. Grimescurrent shell.
461ab72124fSSteve Price.It
462ab72124fSSteve PriceRedirections are performed as described in
4634b88c807SRodney W. Grimesthe next section.
464ab72124fSSteve Price.El
465ab72124fSSteve Price.Ss Redirections
4664b88c807SRodney W. GrimesRedirections are used to change where a command reads its input
467eccea571SRuslan Ermilovor sends its output.
468eccea571SRuslan ErmilovIn general, redirections open, close, or
469eccea571SRuslan Ermilovduplicate an existing reference to a file.
470eccea571SRuslan ErmilovThe overall format
4714b88c807SRodney W. Grimesused for redirection is:
47249e11e3aSSheldon Hearn.Pp
473ab72124fSSteve Price.Dl [n] redir-op file
47449e11e3aSSheldon Hearn.Pp
47549e11e3aSSheldon HearnThe
47649e11e3aSSheldon Hearn.Ql redir-op
47749e11e3aSSheldon Hearnis one of the redirection operators mentioned
478eccea571SRuslan Ermilovpreviously.
479eccea571SRuslan ErmilovThe following gives some examples of how these
48049e11e3aSSheldon Hearnoperators can be used.
48149e11e3aSSheldon HearnNote that stdin and stdout are commonly used abbreviations
48249e11e3aSSheldon Hearnfor standard input and standard output respectively.
48349e11e3aSSheldon Hearn.Bl -tag -width "1234567890XX" -offset indent
48449e11e3aSSheldon Hearn.It Li [n]> file
48549e11e3aSSheldon Hearnredirect stdout (or file descriptor n) to file
48649e11e3aSSheldon Hearn.It Li [n]>| file
48749e11e3aSSheldon Hearnsame as above, but override the
48849e11e3aSSheldon Hearn.Fl C
48949e11e3aSSheldon Hearnoption
49049e11e3aSSheldon Hearn.It Li [n]>> file
49149e11e3aSSheldon Hearnappend stdout (or file descriptor n) to file
49249e11e3aSSheldon Hearn.It Li [n]< file
49349e11e3aSSheldon Hearnredirect stdin (or file descriptor n) from file
4944682f420SBrian Somers.It Li [n]<> file
4954682f420SBrian Somersredirect stdin (or file descriptor n) to and from file
49649e11e3aSSheldon Hearn.It Li [n1]<&n2
49749e11e3aSSheldon Hearnduplicate stdin (or file descriptor n1) from file descriptor n2
49849e11e3aSSheldon Hearn.It Li [n]<&-
49949e11e3aSSheldon Hearnclose stdin (or file descriptor n)
50049e11e3aSSheldon Hearn.It Li [n1]>&n2
50149e11e3aSSheldon Hearnduplicate stdout (or file descriptor n1) to file descriptor n2
50249e11e3aSSheldon Hearn.It Li [n]>&-
50349e11e3aSSheldon Hearnclose stdout (or file descriptor n)
504ab72124fSSteve Price.El
505ab72124fSSteve Price.Pp
5066b15476eSSheldon HearnThe following redirection is often called a
5076b15476eSSheldon Hearn.Dq here-document .
508ab72124fSSteve Price.Bd -literal -offset indent
5094b88c807SRodney W. Grimes[n]<< delimiter
51049e11e3aSSheldon Hearn	here-doc-text
51149e11e3aSSheldon Hearn	...
5124b88c807SRodney W. Grimesdelimiter
513ab72124fSSteve Price.Ed
514ab72124fSSteve Price.Pp
5154b88c807SRodney W. GrimesAll the text on successive lines up to the delimiter is
5164b88c807SRodney W. Grimessaved away and made available to the command on standard
517eccea571SRuslan Ermilovinput, or file descriptor n if it is specified.
518eccea571SRuslan ErmilovIf the delimiter
5194b88c807SRodney W. Grimesas specified on the initial line is quoted, then the here-doc-text
5204b88c807SRodney W. Grimesis treated literally, otherwise the text is subjected to
5214b88c807SRodney W. Grimesparameter expansion, command substitution, and arithmetic
5226b15476eSSheldon Hearnexpansion (as described in the section on
5236b15476eSSheldon Hearn.Sx Word Expansions ) .
5246b15476eSSheldon HearnIf the operator is
52549e11e3aSSheldon Hearn.Dq Li <<-
5266b15476eSSheldon Hearninstead of
52749e11e3aSSheldon Hearn.Dq Li << ,
5286b15476eSSheldon Hearnthen leading tabs
5294b88c807SRodney W. Grimesin the here-doc-text are stripped.
530ab72124fSSteve Price.Ss Search and Execution
531ab0a2172SSteve PriceThere are three types of commands: shell functions,
5328eed22b1SJens Schweikhardtbuilt-in commands, and normal programs.
53349e11e3aSSheldon HearnThe command is searched for (by name) in that order.
53449e11e3aSSheldon HearnThe three types of commands are all executed in a different way.
535ab72124fSSteve Price.Pp
536ab0a2172SSteve PriceWhen a shell function is executed, all of the shell positional
537ab0a2172SSteve Priceparameters (except $0, which remains unchanged) are
5384b88c807SRodney W. Grimesset to the arguments of the shell function.
5394b88c807SRodney W. GrimesThe variables which are explicitly placed in the environment of
5404b88c807SRodney W. Grimesthe command (by placing assignments to them before the
5414b88c807SRodney W. Grimesfunction name) are made local to the function and are set
542e6d3cf26SSheldon Hearnto the values given.
543e6d3cf26SSheldon HearnThen the command given in the function definition is executed.
544e6d3cf26SSheldon HearnThe positional parameters are restored to their original values
545e6d3cf26SSheldon Hearnwhen the command completes.
546ab0a2172SSteve PriceThis all occurs within the current shell.
547ab72124fSSteve Price.Pp
5488eed22b1SJens SchweikhardtShell built-in commands are executed internally to the shell, without
549ab0a2172SSteve Pricespawning a new process.
550ab72124fSSteve Price.Pp
551c644db6aSSheldon HearnOtherwise, if the command name does not match a function
5528eed22b1SJens Schweikhardtor built-in command, the command is searched for as a normal
5534b88c807SRodney W. Grimesprogram in the file system (as described in the next section).
5544b88c807SRodney W. GrimesWhen a normal program is executed, the shell runs the program,
555e6d3cf26SSheldon Hearnpassing the arguments and the environment to the program.
556e6d3cf26SSheldon HearnIf the program is not a normal executable file
557eccea571SRuslan Ermilov(i.e., if it does not begin with the
5586b15476eSSheldon Hearn.Qq magic number
5596b15476eSSheldon Hearnwhose
560ab72124fSSteve Price.Tn ASCII
5616b15476eSSheldon Hearnrepresentation is
5626b15476eSSheldon Hearn.Qq #! ,
56349e11e3aSSheldon Hearnresulting in an
564b4f0f4aaSRuslan Ermilov.Er ENOEXEC
56549e11e3aSSheldon Hearnreturn value from
56649e11e3aSSheldon Hearn.Xr execve 2 )
567e6d3cf26SSheldon Hearnthe shell will interpret the program in a subshell.
568e6d3cf26SSheldon HearnThe child shell will reinitialize itself in this case,
569e6d3cf26SSheldon Hearnso that the effect will be
570e6d3cf26SSheldon Hearnas if a new shell had been invoked to handle the ad-hoc shell script,
571e6d3cf26SSheldon Hearnexcept that the location of hashed commands located in
5724b88c807SRodney W. Grimesthe parent shell will be remembered by the child.
573ab72124fSSteve Price.Pp
574ab0a2172SSteve PriceNote that previous versions of this document
575ab0a2172SSteve Priceand the source code itself misleadingly and sporadically
576ab0a2172SSteve Pricerefer to a shell script without a magic number
5776b15476eSSheldon Hearnas a
5786b15476eSSheldon Hearn.Qq shell procedure .
579ab72124fSSteve Price.Ss Path Search
5804b88c807SRodney W. GrimesWhen locating a command, the shell first looks to see if
581eccea571SRuslan Ermilovit has a shell function by that name.
582eccea571SRuslan ErmilovThen it looks for a
583eccea571SRuslan Ermilovbuilt-in command by that name.
584eccea571SRuslan ErmilovIf a built-in command is not found,
585ab0a2172SSteve Priceone of two things happen:
586ab72124fSSteve Price.Bl -enum
587ab72124fSSteve Price.It
588ab72124fSSteve PriceCommand names containing a slash are simply executed without
589ab0a2172SSteve Priceperforming any searches.
590ab72124fSSteve Price.It
591ab72124fSSteve PriceThe shell searches each entry in
592ab72124fSSteve Price.Ev PATH
593eccea571SRuslan Ermilovin turn for the command.
594eccea571SRuslan ErmilovThe value of the
595ab72124fSSteve Price.Ev PATH
596ab72124fSSteve Pricevariable should be a series of
597eccea571SRuslan Ermiloventries separated by colons.
598eccea571SRuslan ErmilovEach entry consists of a
5994b88c807SRodney W. Grimesdirectory name.
6004b88c807SRodney W. GrimesThe current directory
601ab0a2172SSteve Pricemay be indicated implicitly by an empty directory name,
602ab0a2172SSteve Priceor explicitly by a single period.
603ab72124fSSteve Price.El
604ab72124fSSteve Price.Ss Command Exit Status
6054b88c807SRodney W. GrimesEach command has an exit status that can influence the behavior
606eccea571SRuslan Ermilovof other shell commands.
607eccea571SRuslan ErmilovThe paradigm is that a command exits
6084b88c807SRodney W. Grimeswith zero for normal or success, and non-zero for failure,
609eccea571SRuslan Ermiloverror, or a false indication.
610eccea571SRuslan ErmilovThe man page for each command
6114b88c807SRodney W. Grimesshould indicate the various exit codes and what they mean.
6128eed22b1SJens SchweikhardtAdditionally, the built-in commands return exit codes, as does
613ab0a2172SSteve Pricean executed shell function.
614c351e089SJohn Polstra.Pp
615c351e089SJohn PolstraIf a command is terminated by a signal, its exit status is 128 plus
616eccea571SRuslan Ermilovthe signal number.
617eccea571SRuslan ErmilovSignal numbers are defined in the header file
618fe08efe6SRuslan Ermilov.In sys/signal.h .
619ab72124fSSteve Price.Ss Complex Commands
6204b88c807SRodney W. GrimesComplex commands are combinations of simple commands
6214b88c807SRodney W. Grimeswith control operators or reserved words, together creating a larger complex
622eccea571SRuslan Ermilovcommand.
623eccea571SRuslan ErmilovMore generally, a command is one of the following:
624ab72124fSSteve Price.Bl -item -offset indent
625ab72124fSSteve Price.It
626ab72124fSSteve Pricesimple command
627ab72124fSSteve Price.It
628ab72124fSSteve Pricepipeline
629ab72124fSSteve Price.It
630ab72124fSSteve Pricelist or compound-list
631ab72124fSSteve Price.It
632ab72124fSSteve Pricecompound command
633ab72124fSSteve Price.It
634ab72124fSSteve Pricefunction definition
635ab72124fSSteve Price.El
636ab72124fSSteve Price.Pp
6374b88c807SRodney W. GrimesUnless otherwise stated, the exit status of a command is
6384b88c807SRodney W. Grimesthat of the last simple command executed by the command.
639ab72124fSSteve Price.Ss Pipelines
6404b88c807SRodney W. GrimesA pipeline is a sequence of one or more commands separated
641eccea571SRuslan Ermilovby the control operator |.
642eccea571SRuslan ErmilovThe standard output of all but
6434b88c807SRodney W. Grimesthe last command is connected to the standard input
644eccea571SRuslan Ermilovof the next command.
645eccea571SRuslan ErmilovThe standard output of the last
646ab0a2172SSteve Pricecommand is inherited from the shell, as usual.
647ab72124fSSteve Price.Pp
6484b88c807SRodney W. GrimesThe format for a pipeline is:
64949e11e3aSSheldon Hearn.Pp
65049e11e3aSSheldon Hearn.Dl [!] command1 [ | command2 ...]
651ab72124fSSteve Price.Pp
6524b88c807SRodney W. GrimesThe standard output of command1 is connected to the standard
653eccea571SRuslan Ermilovinput of command2.
654eccea571SRuslan ErmilovThe standard input, standard output, or
6554b88c807SRodney W. Grimesboth of a command is considered to be assigned by the
6564b88c807SRodney W. Grimespipeline before any redirection specified by redirection
6574b88c807SRodney W. Grimesoperators that are part of the command.
658ab72124fSSteve Price.Pp
6594b88c807SRodney W. GrimesIf the pipeline is not in the background (discussed later),
6604b88c807SRodney W. Grimesthe shell waits for all commands to complete.
661ab72124fSSteve Price.Pp
662eccea571SRuslan ErmilovIf the reserved word
663eccea571SRuslan Ermilov.Ic !\&
664eccea571SRuslan Ermilovdoes not precede the pipeline, the
6654b88c807SRodney W. Grimesexit status is the exit status of the last command specified
666eccea571SRuslan Ermilovin the pipeline.
667eccea571SRuslan ErmilovOtherwise, the exit status is the logical
668eccea571SRuslan ErmilovNOT of the exit status of the last command.
669eccea571SRuslan ErmilovThat is, if
6704b88c807SRodney W. Grimesthe last command returns zero, the exit status is 1; if
6714b88c807SRodney W. Grimesthe last command returns greater than zero, the exit status
6724b88c807SRodney W. Grimesis zero.
673ab72124fSSteve Price.Pp
6744b88c807SRodney W. GrimesBecause pipeline assignment of standard input or standard
6754b88c807SRodney W. Grimesoutput or both takes place before redirection, it can be
676eccea571SRuslan Ermilovmodified by redirection.
677eccea571SRuslan ErmilovFor example:
678ab72124fSSteve Price.Pp
67949e11e3aSSheldon Hearn.Dl $ command1 2>&1 | command2
680ab72124fSSteve Price.Pp
68149e11e3aSSheldon Hearnsends both the standard output and standard error of
68249e11e3aSSheldon Hearn.Ql command1
68349e11e3aSSheldon Hearnto the standard input of
68449e11e3aSSheldon Hearn.Ql command2 .
68549e11e3aSSheldon Hearn.Pp
68649e11e3aSSheldon HearnA
68712e720d7SRuslan Ermilov.Dq Li \&;
68849e11e3aSSheldon Hearnor newline terminator causes the preceding
689e918fc8fSSheldon HearnAND-OR-list
690e918fc8fSSheldon Hearn(described below in the section called
691e918fc8fSSheldon Hearn.Sx Short-Circuit List Operators )
692e918fc8fSSheldon Hearnto be executed sequentially;
693e918fc8fSSheldon Hearnan
694e918fc8fSSheldon Hearn.Dq Li &
695e918fc8fSSheldon Hearncauses asynchronous execution of the preceding AND-OR-list.
696ab72124fSSteve Price.Pp
69749e11e3aSSheldon HearnNote that unlike some other shells,
69849e11e3aSSheldon Hearn.Nm
69949e11e3aSSheldon Hearnexecutes each process in the pipeline as a child of the
70049e11e3aSSheldon Hearn.Nm
70149e11e3aSSheldon Hearnprocess.
7028eed22b1SJens SchweikhardtShell built-in commands are the exception to this rule.
70349e11e3aSSheldon HearnThey are executed in the current shell, although they do not affect its
70449e11e3aSSheldon Hearnenvironment when used in pipelines.
70549e11e3aSSheldon Hearn.Ss Background Commands (&)
7064b88c807SRodney W. GrimesIf a command is terminated by the control operator ampersand
707a762afe5SGiorgos Keramidas.Pq Ql & ,
70849e11e3aSSheldon Hearnthe shell executes the command asynchronously;
70949e11e3aSSheldon Hearnthe shell does not wait for the command to finish
71049e11e3aSSheldon Hearnbefore executing the next command.
711ab72124fSSteve Price.Pp
7124b88c807SRodney W. GrimesThe format for running a command in background is:
713ab72124fSSteve Price.Bd -literal -offset indent
7144b88c807SRodney W. Grimescommand1 & [command2 & ...]
715ab72124fSSteve Price.Ed
716ab72124fSSteve Price.Pp
7174b88c807SRodney W. GrimesIf the shell is not interactive, the standard input of an
7184b88c807SRodney W. Grimesasynchronous command is set to /dev/null.
71949e11e3aSSheldon Hearn.Ss Lists (Generally Speaking)
7204b88c807SRodney W. GrimesA list is a sequence of zero or more commands separated by
7214b88c807SRodney W. Grimesnewlines, semicolons, or ampersands,
7224b88c807SRodney W. Grimesand optionally terminated by one of these three characters.
7234b88c807SRodney W. GrimesThe commands in a
7244b88c807SRodney W. Grimeslist are executed in the order they are written.
7254b88c807SRodney W. GrimesIf command is followed by an ampersand, the shell starts the
7268eed22b1SJens Schweikhardtcommand and immediately proceeds onto the next command;
7274b88c807SRodney W. Grimesotherwise it waits for the command to terminate before
7284b88c807SRodney W. Grimesproceeding to the next one.
729ab72124fSSteve Price.Ss Short-Circuit List Operators
73049e11e3aSSheldon Hearn.Dq Li &&
7316b15476eSSheldon Hearnand
73249e11e3aSSheldon Hearn.Dq Li ||
7336b15476eSSheldon Hearnare AND-OR list operators.
73449e11e3aSSheldon Hearn.Dq Li &&
7356b15476eSSheldon Hearnexecutes the first command, and then executes the second command
7366b15476eSSheldon Hearnif the exit status of the first command is zero.
73749e11e3aSSheldon Hearn.Dq Li ||
738120ac26dSMasafumi Max NAKANEis similar, but executes the second command if the exit
7396b15476eSSheldon Hearnstatus of the first command is nonzero.
74049e11e3aSSheldon Hearn.Dq Li &&
7416b15476eSSheldon Hearnand
74249e11e3aSSheldon Hearn.Dq Li ||
7434b88c807SRodney W. Grimesboth have the same priority.
74449e11e3aSSheldon Hearn.Ss Flow-Control Constructs (if, while, for, case)
74549e11e3aSSheldon HearnThe syntax of the
74649e11e3aSSheldon Hearn.Ic if
74749e11e3aSSheldon Hearncommand is:
74849e11e3aSSheldon Hearn.\"
74949e11e3aSSheldon Hearn.\" XXX Use .Dl to work around broken handling of .Ic inside .Bd and .Ed .
75049e11e3aSSheldon Hearn.\"
75149e11e3aSSheldon Hearn.Dl Ic if Ar list
75249e11e3aSSheldon Hearn.Dl Ic then Ar list
75349e11e3aSSheldon Hearn.Dl [ Ic elif Ar list
75449e11e3aSSheldon Hearn.Dl Ic then Ar list ] ...
75549e11e3aSSheldon Hearn.Dl [ Ic else Ar list ]
75649e11e3aSSheldon Hearn.Dl Ic fi
757ab72124fSSteve Price.Pp
75849e11e3aSSheldon HearnThe syntax of the
75949e11e3aSSheldon Hearn.Ic while
76049e11e3aSSheldon Hearncommand is:
76149e11e3aSSheldon Hearn.Dl Ic while Ar list
76249e11e3aSSheldon Hearn.Dl Ic do Ar list
76349e11e3aSSheldon Hearn.Dl Ic done
764ab72124fSSteve Price.Pp
765ab0a2172SSteve PriceThe two lists are executed repeatedly while the exit status of the
76649e11e3aSSheldon Hearnfirst list is zero.
76749e11e3aSSheldon HearnThe
76849e11e3aSSheldon Hearn.Ic until
76949e11e3aSSheldon Hearncommand is similar, but has the word
77049e11e3aSSheldon Hearn.Ic until
77149e11e3aSSheldon Hearnin place of
77249e11e3aSSheldon Hearn.Ic while ,
77349e11e3aSSheldon Hearnwhich causes it to
7744b88c807SRodney W. Grimesrepeat until the exit status of the first list is zero.
775ab72124fSSteve Price.Pp
77649e11e3aSSheldon HearnThe syntax of the
77749e11e3aSSheldon Hearn.Ic for
77849e11e3aSSheldon Hearncommand is:
77949e11e3aSSheldon Hearn.Dl Ic for Ar variable Ic in Ar word ...
78049e11e3aSSheldon Hearn.Dl Ic do Ar list
78149e11e3aSSheldon Hearn.Dl Ic done
782ab72124fSSteve Price.Pp
7834b88c807SRodney W. GrimesThe words are expanded, and then the list is executed
78449e11e3aSSheldon Hearnrepeatedly with the variable set to each word in turn.
78549e11e3aSSheldon HearnThe
78649e11e3aSSheldon Hearn.Ic do
7876b15476eSSheldon Hearnand
78849e11e3aSSheldon Hearn.Ic done
78949e11e3aSSheldon Hearncommands may be replaced with
79049e11e3aSSheldon Hearn.Dq Li {
79149e11e3aSSheldon Hearnand
79249e11e3aSSheldon Hearn.Dq Li } .
793ab72124fSSteve Price.Pp
79449e11e3aSSheldon HearnThe syntax of the
79549e11e3aSSheldon Hearn.Ic break
79649e11e3aSSheldon Hearnand
79749e11e3aSSheldon Hearn.Ic continue
79849e11e3aSSheldon Hearncommands is:
79949e11e3aSSheldon Hearn.Dl Ic break Op Ar num
80049e11e3aSSheldon Hearn.Dl Ic continue Op Ar num
801ab72124fSSteve Price.Pp
80249e11e3aSSheldon HearnThe
80349e11e3aSSheldon Hearn.Ic break
80449e11e3aSSheldon Hearncommand terminates the
80549e11e3aSSheldon Hearn.Ar num
80649e11e3aSSheldon Hearninnermost
80749e11e3aSSheldon Hearn.Ic for
80849e11e3aSSheldon Hearnor
80949e11e3aSSheldon Hearn.Ic while
81049e11e3aSSheldon Hearnloops.
81149e11e3aSSheldon HearnThe
81249e11e3aSSheldon Hearn.Ic continue
81349e11e3aSSheldon Hearncommand continues with the next iteration of the innermost loop.
8148eed22b1SJens SchweikhardtThese are implemented as built-in commands.
815ab72124fSSteve Price.Pp
81649e11e3aSSheldon HearnThe syntax of the
81749e11e3aSSheldon Hearn.Ic case
81849e11e3aSSheldon Hearncommand is
81949e11e3aSSheldon Hearn.Dl Ic case Ar word Ic in
82049e11e3aSSheldon Hearn.Dl pattern) list ;;
82149e11e3aSSheldon Hearn.Dl ...
82249e11e3aSSheldon Hearn.Dl Ic esac
823ab72124fSSteve Price.Pp
82449e11e3aSSheldon HearnThe pattern can actually be one or more patterns
82549e11e3aSSheldon Hearn(see
82649e11e3aSSheldon Hearn.Sx Shell Patterns
82749e11e3aSSheldon Hearndescribed later),
82849e11e3aSSheldon Hearnseparated by
82967135607SMartin Cracauer.Dq Li \&|
8306b15476eSSheldon Hearncharacters.
831ab72124fSSteve Price.Ss Grouping Commands Together
8324b88c807SRodney W. GrimesCommands may be grouped by writing either
833ab72124fSSteve Price.Bd -literal -offset indent
8344b88c807SRodney W. Grimes(list)
835ab72124fSSteve Price.Ed
836ab72124fSSteve Price.Pp
8374b88c807SRodney W. Grimesor
838ab72124fSSteve Price.Bd -literal -offset indent
8394b88c807SRodney W. Grimes{ list; }
840ab72124fSSteve Price.Ed
841ab72124fSSteve Price.Pp
84249e11e3aSSheldon HearnThe first form executes the commands in a subshell.
8438eed22b1SJens SchweikhardtNote that built-in commands thus executed do not affect the current shell.
84449e11e3aSSheldon HearnThe second form does not fork another shell,
84549e11e3aSSheldon Hearnso it is slightly more efficient.
84649e11e3aSSheldon HearnGrouping commands together this way allows the user to
847ab0a2172SSteve Priceredirect their output as though they were one program:
848ab72124fSSteve Price.Bd -literal -offset indent
849ee7dc416SSteve Price{ echo -n "hello"; echo " world"; } > greeting
850ab72124fSSteve Price.Ed
851ab72124fSSteve Price.Ss Functions
8524b88c807SRodney W. GrimesThe syntax of a function definition is
853ab72124fSSteve Price.Bd -literal -offset indent
8544b88c807SRodney W. Grimesname ( ) command
855ab72124fSSteve Price.Ed
856ab72124fSSteve Price.Pp
8574b88c807SRodney W. GrimesA function definition is an executable statement; when
8584b88c807SRodney W. Grimesexecuted it installs a function named name and returns an
859eccea571SRuslan Ermilovexit status of zero.
860eccea571SRuslan ErmilovThe command is normally a list
8616b15476eSSheldon Hearnenclosed between
86249e11e3aSSheldon Hearn.Dq Li {
8636b15476eSSheldon Hearnand
86449e11e3aSSheldon Hearn.Dq Li } .
865ab72124fSSteve Price.Pp
8664b88c807SRodney W. GrimesVariables may be declared to be local to a function by
86749e11e3aSSheldon Hearnusing the
86849e11e3aSSheldon Hearn.Ic local
86949e11e3aSSheldon Hearncommand.
87049e11e3aSSheldon HearnThis should appear as the first statement of a function,
87149e11e3aSSheldon Hearnand the syntax is:
87249e11e3aSSheldon Hearn.Bd -ragged -offset indent
87349e11e3aSSheldon Hearn.Ic local
87481e9cda2SRuslan Ermilov.Op Ar variable ...
87549e11e3aSSheldon Hearn.Op Ar -
876ab72124fSSteve Price.Ed
877ab72124fSSteve Price.Pp
87849e11e3aSSheldon HearnThe
87949e11e3aSSheldon Hearn.Ic local
8808eed22b1SJens Schweikhardtcommand is implemented as a built-in command.
881ab72124fSSteve Price.Pp
8824b88c807SRodney W. GrimesWhen a variable is made local, it inherits the initial
8834b88c807SRodney W. Grimesvalue and exported and readonly flags from the variable
8844b88c807SRodney W. Grimeswith the same name in the surrounding scope, if there is
885eccea571SRuslan Ermilovone.
886eccea571SRuslan ErmilovOtherwise, the variable is initially unset.
887eccea571SRuslan ErmilovThe shell
888e918fc8fSSheldon Hearnuses dynamic scoping, so that if the variable
889e918fc8fSSheldon Hearn.Em x
890e918fc8fSSheldon Hearnis made local to function
891e918fc8fSSheldon Hearn.Em f ,
892e918fc8fSSheldon Hearnwhich then calls function
893e918fc8fSSheldon Hearn.Em g ,
894e918fc8fSSheldon Hearnreferences to the variable
895e918fc8fSSheldon Hearn.Em x
896e918fc8fSSheldon Hearnmade inside
897e918fc8fSSheldon Hearn.Em g
898e918fc8fSSheldon Hearnwill refer to the variable
899e918fc8fSSheldon Hearn.Em x
900e918fc8fSSheldon Hearndeclared inside
901e918fc8fSSheldon Hearn.Em f ,
902e918fc8fSSheldon Hearnnot to the global variable named
903e918fc8fSSheldon Hearn.Em x .
904ab72124fSSteve Price.Pp
9056b4bbd8aSCeri DaviesThe only special parameter that can be made local is
90649e11e3aSSheldon Hearn.Dq Li - .
9076b15476eSSheldon HearnMaking
90849e11e3aSSheldon Hearn.Dq Li -
9096b15476eSSheldon Hearnlocal causes any shell options that are
9104b88c807SRodney W. Grimeschanged via the set command inside the function to be
9114b88c807SRodney W. Grimesrestored to their original values when the function
9124b88c807SRodney W. Grimesreturns.
913ab72124fSSteve Price.Pp
91449e11e3aSSheldon HearnThe syntax of the
91549e11e3aSSheldon Hearn.Ic return
91649e11e3aSSheldon Hearncommand is
91749e11e3aSSheldon Hearn.Bd -ragged -offset indent
91849e11e3aSSheldon Hearn.Ic return
91949e11e3aSSheldon Hearn.Op Ar exitstatus
920ab72124fSSteve Price.Ed
921ab72124fSSteve Price.Pp
9224ad8968aSBrian FeldmanIt terminates the current executional scope, returning from the previous
9234ad8968aSBrian Feldmannested function, sourced script, or shell instance, in that order.
92449e11e3aSSheldon HearnThe
92549e11e3aSSheldon Hearn.Ic return
9268eed22b1SJens Schweikhardtcommand is implemented as a built-in command.
927ab72124fSSteve Price.Ss Variables and Parameters
928eccea571SRuslan ErmilovThe shell maintains a set of parameters.
929eccea571SRuslan ErmilovA parameter
930eccea571SRuslan Ermilovdenoted by a name is called a variable.
931eccea571SRuslan ErmilovWhen starting up,
9324b88c807SRodney W. Grimesthe shell turns all the environment variables into shell
933eccea571SRuslan Ermilovvariables.
934eccea571SRuslan ErmilovNew variables can be set using the form
935ab72124fSSteve Price.Bd -literal -offset indent
9364b88c807SRodney W. Grimesname=value
937ab72124fSSteve Price.Ed
938ab72124fSSteve Price.Pp
9394b88c807SRodney W. GrimesVariables set by the user must have a name consisting solely
94049e11e3aSSheldon Hearnof alphabetics, numerics, and underscores.
94149e11e3aSSheldon HearnThe first letter of a variable name must not be numeric.
94249e11e3aSSheldon HearnA parameter can also be denoted by a number
9434b88c807SRodney W. Grimesor a special character as explained below.
944ab72124fSSteve Price.Ss Positional Parameters
94549e11e3aSSheldon HearnA positional parameter is a parameter denoted by a number greater than zero.
946ab72124fSSteve PriceThe shell sets these initially to the values of its command line
947eccea571SRuslan Ermilovarguments that follow the name of the shell script.
948eccea571SRuslan ErmilovThe
949c644db6aSSheldon Hearn.Ic set
9508eed22b1SJens Schweikhardtbuilt-in command can also be used to set or reset them.
951ab72124fSSteve Price.Ss Special Parameters
95243d6677bSAlfred PerlsteinA special parameter is a parameter denoted by a special one-character
95343d6677bSAlfred Perlsteinname.
95443d6677bSAlfred PerlsteinThe special parameters recognized by the
95543d6677bSAlfred Perlstein.Nm
95643d6677bSAlfred Perlsteinshell of
95743d6677bSAlfred Perlstein.Fx
95843d6677bSAlfred Perlsteinare shown in the following list, exactly as they would appear in input
95943d6677bSAlfred Perlsteintyped by the user or in the source of a shell script.
960ab72124fSSteve Price.Bl -hang
96143d6677bSAlfred Perlstein.It Li $*
962eccea571SRuslan ErmilovExpands to the positional parameters, starting from one.
963eccea571SRuslan ErmilovWhen
9644b88c807SRodney W. Grimesthe expansion occurs within a double-quoted string
9654b88c807SRodney W. Grimesit expands to a single field with the value of each parameter
96649e11e3aSSheldon Hearnseparated by the first character of the
96749e11e3aSSheldon Hearn.Ev IFS
96849e11e3aSSheldon Hearnvariable,
96949e11e3aSSheldon Hearnor by a
97049e11e3aSSheldon Hearn.Aq space
97149e11e3aSSheldon Hearnif
97249e11e3aSSheldon Hearn.Ev IFS
97349e11e3aSSheldon Hearnis unset.
97443d6677bSAlfred Perlstein.It Li $@
975eccea571SRuslan ErmilovExpands to the positional parameters, starting from one.
976eccea571SRuslan ErmilovWhen
9774b88c807SRodney W. Grimesthe expansion occurs within double-quotes, each positional
9784b88c807SRodney W. Grimesparameter expands as a separate argument.
9794b88c807SRodney W. GrimesIf there are no positional parameters, the
980e918fc8fSSheldon Hearnexpansion of
981e918fc8fSSheldon Hearn.Li @
982e918fc8fSSheldon Hearngenerates zero arguments, even when
983e918fc8fSSheldon Hearn.Li @
984eccea571SRuslan Ermilovis double-quoted.
985eccea571SRuslan ErmilovWhat this basically means, for example, is
9866b15476eSSheldon Hearnif $1 is
9876b15476eSSheldon Hearn.Dq abc
9886b15476eSSheldon Hearnand $2 is
9896b15476eSSheldon Hearn.Dq def ghi ,
9906b15476eSSheldon Hearnthen
991e918fc8fSSheldon Hearn.Qq Li $@
9926b15476eSSheldon Hearnexpands to
9934b88c807SRodney W. Grimesthe two arguments:
994ab72124fSSteve Price.Bd -literal -offset indent
9954b88c807SRodney W. Grimes"abc"   "def ghi"
996ab72124fSSteve Price.Ed
99743d6677bSAlfred Perlstein.It Li $#
9984b88c807SRodney W. GrimesExpands to the number of positional parameters.
99943d6677bSAlfred Perlstein.It Li $\&?
10004b88c807SRodney W. GrimesExpands to the exit status of the most recent pipeline.
100143d6677bSAlfred Perlstein.It Li $-
1002ab72124fSSteve Price(hyphen) Expands to the current option flags (the single-letter
10034b88c807SRodney W. Grimesoption names concatenated into a string) as specified on
10048eed22b1SJens Schweikhardtinvocation, by the set built-in command, or implicitly
10054b88c807SRodney W. Grimesby the shell.
100643d6677bSAlfred Perlstein.It Li $$
1007eccea571SRuslan ErmilovExpands to the process ID of the invoked shell.
1008eccea571SRuslan ErmilovA subshell
10094b88c807SRodney W. Grimesretains the same value of $ as its parent.
101043d6677bSAlfred Perlstein.It Li $\&!
10114b88c807SRodney W. GrimesExpands to the process ID of the most recent background
1012eccea571SRuslan Ermilovcommand executed from the current shell.
1013eccea571SRuslan ErmilovFor a
10144b88c807SRodney W. Grimespipeline, the process ID is that of the last command in the
10154b88c807SRodney W. Grimespipeline.
101643d6677bSAlfred Perlstein.It Li $0
1017ab72124fSSteve Price(zero) Expands to the name of the shell or shell script.
1018ab72124fSSteve Price.El
1019ab72124fSSteve Price.Ss Word Expansions
10204b88c807SRodney W. GrimesThis clause describes the various expansions that are
1021eccea571SRuslan Ermilovperformed on words.
1022eccea571SRuslan ErmilovNot all expansions are performed on
10234b88c807SRodney W. Grimesevery word, as explained later.
1024ab72124fSSteve Price.Pp
10254b88c807SRodney W. GrimesTilde expansions, parameter expansions, command substitutions,
10264b88c807SRodney W. Grimesarithmetic expansions, and quote removals that occur within
1027eccea571SRuslan Ermilova single word expand to a single field.
1028eccea571SRuslan ErmilovIt is only field
10294b88c807SRodney W. Grimessplitting or pathname expansion that can create multiple
1030e6d3cf26SSheldon Hearnfields from a single word.
1031e6d3cf26SSheldon HearnThe single exception to this rule is
1032e918fc8fSSheldon Hearnthe expansion of the special parameter
1033e918fc8fSSheldon Hearn.Li @
1034e918fc8fSSheldon Hearnwithin double-quotes,
1035e6d3cf26SSheldon Hearnas was described above.
1036ab72124fSSteve Price.Pp
10374b88c807SRodney W. GrimesThe order of word expansion is:
1038ab72124fSSteve Price.Bl -enum
1039ab72124fSSteve Price.It
1040ab72124fSSteve PriceTilde Expansion, Parameter Expansion, Command Substitution,
10414b88c807SRodney W. GrimesArithmetic Expansion (these all occur at the same time).
1042ab72124fSSteve Price.It
104349e11e3aSSheldon HearnField Splitting is performed on fields generated by step (1)
104449e11e3aSSheldon Hearnunless the
104549e11e3aSSheldon Hearn.Ev IFS
104649e11e3aSSheldon Hearnvariable is null.
1047ab72124fSSteve Price.It
104849e11e3aSSheldon HearnPathname Expansion (unless the
104949e11e3aSSheldon Hearn.Fl f
105049e11e3aSSheldon Hearnoption is in effect).
1051ab72124fSSteve Price.It
1052ab72124fSSteve PriceQuote Removal.
1053ab72124fSSteve Price.El
1054ab72124fSSteve Price.Pp
105549e11e3aSSheldon HearnThe
105649e11e3aSSheldon Hearn.Dq Li $
105749e11e3aSSheldon Hearncharacter is used to introduce parameter expansion, command
10584b88c807SRodney W. Grimessubstitution, or arithmetic evaluation.
1059ab72124fSSteve Price.Ss Tilde Expansion (substituting a user's home directory)
106049e11e3aSSheldon HearnA word beginning with an unquoted tilde character
1061a762afe5SGiorgos Keramidas.Pq Ql ~
106249e11e3aSSheldon Hearnis
106349e11e3aSSheldon Hearnsubjected to tilde expansion.
106449e11e3aSSheldon HearnAll the characters up to a slash
1065a762afe5SGiorgos Keramidas.Pq Ql /
106649e11e3aSSheldon Hearnor the end of the word are treated as a username
1067eccea571SRuslan Ermilovand are replaced with the user's home directory.
1068eccea571SRuslan ErmilovIf the
10694b88c807SRodney W. Grimesusername is missing (as in ~/foobar), the tilde is replaced
10704b88c807SRodney W. Grimeswith the value of the HOME variable (the current user's
10714b88c807SRodney W. Grimeshome directory).
1072ab72124fSSteve Price.Ss Parameter Expansion
10734b88c807SRodney W. GrimesThe format for parameter expansion is as follows:
1074ab72124fSSteve Price.Bd -literal -offset indent
10754b88c807SRodney W. Grimes${expression}
1076ab72124fSSteve Price.Ed
1077ab72124fSSteve Price.Pp
107849e11e3aSSheldon Hearnwhere expression consists of all characters until the matching
107949e11e3aSSheldon Hearn.Dq Li } .
108049e11e3aSSheldon HearnAny
108149e11e3aSSheldon Hearn.Dq Li }
10824b88c807SRodney W. Grimesescaped by a backslash or within a quoted string, and characters in
10834b88c807SRodney W. Grimesembedded arithmetic expansions, command substitutions, and variable
108449e11e3aSSheldon Hearnexpansions, are not examined in determining the matching
108549e11e3aSSheldon Hearn.Dq Li } .
1086ab72124fSSteve Price.Pp
10874b88c807SRodney W. GrimesThe simplest form for parameter expansion is:
1088ab72124fSSteve Price.Bd -literal -offset indent
10894b88c807SRodney W. Grimes${parameter}
1090ab72124fSSteve Price.Ed
1091ab72124fSSteve Price.Pp
10924b88c807SRodney W. GrimesThe value, if any, of parameter is substituted.
1093ab72124fSSteve Price.Pp
10944b88c807SRodney W. GrimesThe parameter name or symbol can be enclosed in braces, which are
10954b88c807SRodney W. Grimesoptional except for positional parameters with more than one digit or
10964b88c807SRodney W. Grimeswhen parameter is followed by a character that could be interpreted as
10974b88c807SRodney W. Grimespart of the name.
1098ab72124fSSteve PriceIf a parameter expansion occurs inside double-quotes:
1099ab72124fSSteve Price.Bl -enum
1100ab72124fSSteve Price.It
1101ab72124fSSteve PricePathname expansion is not performed on the results of the
11024b88c807SRodney W. Grimesexpansion.
1103ab72124fSSteve Price.It
1104ab72124fSSteve PriceField splitting is not performed on the results of the
1105e918fc8fSSheldon Hearnexpansion, with the exception of the special parameter
1106e918fc8fSSheldon Hearn.Li @ .
1107ab72124fSSteve Price.El
1108ab72124fSSteve Price.Pp
11094b88c807SRodney W. GrimesIn addition, a parameter expansion can be modified by using one of the
11104b88c807SRodney W. Grimesfollowing formats.
111181e9cda2SRuslan Ermilov.Bl -tag -width indent
1112ab72124fSSteve Price.It Li ${parameter:-word}
1113eccea571SRuslan ErmilovUse Default Values.
1114eccea571SRuslan ErmilovIf parameter is unset or
11154b88c807SRodney W. Grimesnull, the expansion of word is
11164b88c807SRodney W. Grimessubstituted; otherwise, the value of
11174b88c807SRodney W. Grimesparameter is substituted.
1118ab72124fSSteve Price.It Li ${parameter:=word}
1119eccea571SRuslan ErmilovAssign Default Values.
1120eccea571SRuslan ErmilovIf parameter is unset
11214b88c807SRodney W. Grimesor null, the expansion of word is
1122eccea571SRuslan Ermilovassigned to parameter.
1123eccea571SRuslan ErmilovIn all cases, the
11244b88c807SRodney W. Grimesfinal value of parameter is
1125eccea571SRuslan Ermilovsubstituted.
1126eccea571SRuslan ErmilovOnly variables, not positional
11274b88c807SRodney W. Grimesparameters or special parameters, can be
11284b88c807SRodney W. Grimesassigned in this way.
1129ab72124fSSteve Price.It Li ${parameter:?[word]}
1130eccea571SRuslan ErmilovIndicate Error if Null or Unset.
1131eccea571SRuslan ErmilovIf
11324b88c807SRodney W. Grimesparameter is unset or null, the expansion of
11334b88c807SRodney W. Grimesword (or a message indicating it is unset if
11344b88c807SRodney W. Grimesword is omitted) is written to standard
11354b88c807SRodney W. Grimeserror and the shell exits with a nonzero
1136e6d3cf26SSheldon Hearnexit status.
1137e6d3cf26SSheldon HearnOtherwise, the value of
1138eccea571SRuslan Ermilovparameter is substituted.
1139eccea571SRuslan ErmilovAn
11404b88c807SRodney W. Grimesinteractive shell need not exit.
1141ab72124fSSteve Price.It Li ${parameter:+word}
1142eccea571SRuslan ErmilovUse Alternate Value.
1143eccea571SRuslan ErmilovIf parameter is unset
11444b88c807SRodney W. Grimesor null, null is substituted;
11454b88c807SRodney W. Grimesotherwise, the expansion of word is
11464b88c807SRodney W. Grimessubstituted.
11471413f7deSTony Finch.El
1148ab72124fSSteve Price.Pp
11494b88c807SRodney W. GrimesIn the parameter expansions shown previously, use of the colon in the
11504b88c807SRodney W. Grimesformat results in a test for a parameter that is unset or null; omission
11514b88c807SRodney W. Grimesof the colon results in a test for a parameter that is only unset.
11521413f7deSTony Finch.Bl -tag -width indent
1153ab72124fSSteve Price.It Li ${#parameter}
1154eccea571SRuslan ErmilovString Length.
1155eccea571SRuslan ErmilovThe length in characters of
11564b88c807SRodney W. Grimesthe value of parameter.
115771337c33SSheldon Hearn.El
1158ab72124fSSteve Price.Pp
11594b88c807SRodney W. GrimesThe following four varieties of parameter expansion provide for substring
116049e11e3aSSheldon Hearnprocessing.
116149e11e3aSSheldon HearnIn each case, pattern matching notation
116249e11e3aSSheldon Hearn(see
116349e11e3aSSheldon Hearn.Sx Shell Patterns ) ,
116449e11e3aSSheldon Hearnrather than regular expression notation,
116549e11e3aSSheldon Hearnis used to evaluate the patterns.
1166e918fc8fSSheldon HearnIf parameter is one of the special parameters
1167e918fc8fSSheldon Hearn.Li *
116849e11e3aSSheldon Hearnor
1169e918fc8fSSheldon Hearn.Li @ ,
117049e11e3aSSheldon Hearnthe result of the expansion is unspecified.
11714b88c807SRodney W. GrimesEnclosing the full parameter expansion string in double-quotes does not
11724b88c807SRodney W. Grimescause the following four varieties of pattern characters to be quoted,
11734b88c807SRodney W. Grimeswhereas quoting characters within the braces has this effect.
117481e9cda2SRuslan Ermilov.Bl -tag -width indent
1175ab72124fSSteve Price.It Li ${parameter%word}
1176eccea571SRuslan ErmilovRemove Smallest Suffix Pattern.
1177eccea571SRuslan ErmilovThe word
1178eccea571SRuslan Ermilovis expanded to produce a pattern.
1179eccea571SRuslan ErmilovThe
11804b88c807SRodney W. Grimesparameter expansion then results in
11814b88c807SRodney W. Grimesparameter, with the smallest portion of the
11824b88c807SRodney W. Grimessuffix matched by the pattern deleted.
1183ab72124fSSteve Price.It Li ${parameter%%word}
1184eccea571SRuslan ErmilovRemove Largest Suffix Pattern.
1185eccea571SRuslan ErmilovThe word
1186eccea571SRuslan Ermilovis expanded to produce a pattern.
1187eccea571SRuslan ErmilovThe
11884b88c807SRodney W. Grimesparameter expansion then results in
11894b88c807SRodney W. Grimesparameter, with the largest portion of the
11904b88c807SRodney W. Grimessuffix matched by the pattern deleted.
1191ab72124fSSteve Price.It Li ${parameter#word}
1192eccea571SRuslan ErmilovRemove Smallest Prefix Pattern.
1193eccea571SRuslan ErmilovThe word
1194eccea571SRuslan Ermilovis expanded to produce a pattern.
1195eccea571SRuslan ErmilovThe
11964b88c807SRodney W. Grimesparameter expansion then results in
11974b88c807SRodney W. Grimesparameter, with the smallest portion of the
11984b88c807SRodney W. Grimesprefix matched by the pattern deleted.
1199ab72124fSSteve Price.It Li ${parameter##word}
1200eccea571SRuslan ErmilovRemove Largest Prefix Pattern.
1201eccea571SRuslan ErmilovThe word
1202eccea571SRuslan Ermilovis expanded to produce a pattern.
1203eccea571SRuslan ErmilovThe
12044b88c807SRodney W. Grimesparameter expansion then results in
12054b88c807SRodney W. Grimesparameter, with the largest portion of the
12064b88c807SRodney W. Grimesprefix matched by the pattern deleted.
1207ab72124fSSteve Price.El
1208ab72124fSSteve Price.Ss Command Substitution
12094b88c807SRodney W. GrimesCommand substitution allows the output of a command to be substituted in
1210eccea571SRuslan Ermilovplace of the command name itself.
1211eccea571SRuslan ErmilovCommand substitution occurs when
12124b88c807SRodney W. Grimesthe command is enclosed as follows:
1213ab72124fSSteve Price.Bd -literal -offset indent
12144b88c807SRodney W. Grimes$(command)
1215ab72124fSSteve Price.Ed
1216ab72124fSSteve Price.Pp
121749e11e3aSSheldon Hearnor the backquoted version:
1218ab72124fSSteve Price.Bd -literal -offset indent
12194b88c807SRodney W. Grimes`command`
1220ab72124fSSteve Price.Ed
1221ab72124fSSteve Price.Pp
12224b88c807SRodney W. GrimesThe shell expands the command substitution by executing command in a
12234b88c807SRodney W. Grimessubshell environment and replacing the command substitution
122449e11e3aSSheldon Hearnwith the standard output of the command,
122549e11e3aSSheldon Hearnremoving sequences of one or more newlines at the end of the substitution.
122649e11e3aSSheldon HearnEmbedded newlines before the end of the output are not removed;
122749e11e3aSSheldon Hearnhowever, during field splitting, they may be translated into spaces
122849e11e3aSSheldon Hearndepending on the value of
122949e11e3aSSheldon Hearn.Ev IFS
123049e11e3aSSheldon Hearnand the quoting that is in effect.
1231ab72124fSSteve Price.Ss Arithmetic Expansion
12324b88c807SRodney W. GrimesArithmetic expansion provides a mechanism for evaluating an arithmetic
1233e6d3cf26SSheldon Hearnexpression and substituting its value.
1234e6d3cf26SSheldon HearnThe format for arithmetic expansion is as follows:
1235ab72124fSSteve Price.Bd -literal -offset indent
12364b88c807SRodney W. Grimes$((expression))
1237ab72124fSSteve Price.Ed
1238ab72124fSSteve Price.Pp
12394b88c807SRodney W. GrimesThe expression is treated as if it were in double-quotes, except
1240eccea571SRuslan Ermilovthat a double-quote inside the expression is not treated specially.
1241eccea571SRuslan ErmilovThe
12424b88c807SRodney W. Grimesshell expands all tokens in the expression for parameter expansion,
12434b88c807SRodney W. Grimescommand substitution, and quote removal.
1244ab72124fSSteve Price.Pp
12454b88c807SRodney W. GrimesNext, the shell treats this as an arithmetic expression and
12464b88c807SRodney W. Grimessubstitutes the value of the expression.
1247ab72124fSSteve Price.Ss White Space Splitting (Field Splitting)
12484b88c807SRodney W. GrimesAfter parameter expansion, command substitution, and
12494b88c807SRodney W. Grimesarithmetic expansion the shell scans the results of
12504b88c807SRodney W. Grimesexpansions and substitutions that did not occur in double-quotes for
12514b88c807SRodney W. Grimesfield splitting and multiple fields can result.
1252ab72124fSSteve Price.Pp
125349e11e3aSSheldon HearnThe shell treats each character of the
125449e11e3aSSheldon Hearn.Ev IFS
125549e11e3aSSheldon Hearnas a delimiter and uses
12564b88c807SRodney W. Grimesthe delimiters to split the results of parameter expansion and command
12574b88c807SRodney W. Grimessubstitution into fields.
1258ab72124fSSteve Price.Ss Pathname Expansion (File Name Generation)
125949e11e3aSSheldon HearnUnless the
126049e11e3aSSheldon Hearn.Fl f
126149e11e3aSSheldon Hearnoption is set,
126249e11e3aSSheldon Hearnfile name generation is performed
1263eccea571SRuslan Ermilovafter word splitting is complete.
1264eccea571SRuslan ErmilovEach word is
1265eccea571SRuslan Ermilovviewed as a series of patterns, separated by slashes.
1266eccea571SRuslan ErmilovThe
12674b88c807SRodney W. Grimesprocess of expansion replaces the word with the names of
12684b88c807SRodney W. Grimesall existing files whose names can be formed by replacing
12694b88c807SRodney W. Grimeseach pattern with a string that matches the specified pattern.
1270ab0a2172SSteve PriceThere are two restrictions on this: first, a pattern cannot match
1271ab0a2172SSteve Pricea string containing a slash, and second,
12724b88c807SRodney W. Grimesa pattern cannot match a string starting with a period
12734b88c807SRodney W. Grimesunless the first character of the pattern is a period.
12744b88c807SRodney W. GrimesThe next section describes the patterns used for both
1275ab72124fSSteve PricePathname Expansion and the
1276c644db6aSSheldon Hearn.Ic case
1277ab72124fSSteve Pricecommand.
1278ab72124fSSteve Price.Ss Shell Patterns
1279f434d1dfSAdam DavidA pattern consists of normal characters, which match themselves,
128049e11e3aSSheldon Hearnand meta-characters.
128149e11e3aSSheldon HearnThe meta-characters are
12821586940eSRuslan Ermilov.Dq Li \&! ,
128349e11e3aSSheldon Hearn.Dq Li * ,
12841586940eSRuslan Ermilov.Dq Li \&? ,
12856b15476eSSheldon Hearnand
128649e11e3aSSheldon Hearn.Dq Li [ .
12876b15476eSSheldon HearnThese characters lose their special meanings if they are quoted.
12886b15476eSSheldon HearnWhen command or variable substitution is performed and the dollar sign
12896b15476eSSheldon Hearnor back quotes are not double-quoted, the value of the
12904b88c807SRodney W. Grimesvariable or the output of the command is scanned for these
12914b88c807SRodney W. Grimescharacters and they are turned into meta-characters.
1292ab72124fSSteve Price.Pp
12936b15476eSSheldon HearnAn asterisk
1294a762afe5SGiorgos Keramidas.Pq Ql *
1295e918fc8fSSheldon Hearnmatches any string of characters.
1296e918fc8fSSheldon HearnA question mark
1297a762afe5SGiorgos Keramidas.Pq Ql \&?
1298e918fc8fSSheldon Hearnmatches any single character.
1299e6d3cf26SSheldon HearnA left bracket
1300a762afe5SGiorgos Keramidas.Pq Ql [
1301e6d3cf26SSheldon Hearnintroduces a character class.
1302e6d3cf26SSheldon HearnThe end of the character class is indicated by a
130349e11e3aSSheldon Hearn.Dq Li \&] ;
13046b15476eSSheldon Hearnif the
130549e11e3aSSheldon Hearn.Dq Li \&]
13066b15476eSSheldon Hearnis missing then the
130749e11e3aSSheldon Hearn.Dq Li [
13086b15476eSSheldon Hearnmatches a
130949e11e3aSSheldon Hearn.Dq Li [
1310e6d3cf26SSheldon Hearnrather than introducing a character class.
1311e6d3cf26SSheldon HearnA character class matches any of the characters between the square brackets.
1312e6d3cf26SSheldon HearnA range of characters may be specified using a minus sign.
1313e918fc8fSSheldon HearnThe character class may be complemented by making an exclamation point
1314a762afe5SGiorgos Keramidas.Pq Ql !\&
1315e918fc8fSSheldon Hearnthe first character of the character class.
1316ab72124fSSteve Price.Pp
13176b15476eSSheldon HearnTo include a
131812e720d7SRuslan Ermilov.Dq Li \&]
1319e6d3cf26SSheldon Hearnin a character class, make it the first character listed
1320e6d3cf26SSheldon Hearn(after the
13211586940eSRuslan Ermilov.Dq Li \&! ,
1322e6d3cf26SSheldon Hearnif any).
1323e918fc8fSSheldon HearnTo include a
1324e918fc8fSSheldon Hearn.Dq Li - ,
1325e918fc8fSSheldon Hearnmake it the first or last character listed.
13268eed22b1SJens Schweikhardt.Ss Built-in Commands
1327c644db6aSSheldon HearnThis section lists the commands which
13288eed22b1SJens Schweikhardtare built-in because they need to perform some operation
1329eccea571SRuslan Ermilovthat cannot be performed by a separate process.
1330eccea571SRuslan ErmilovIn addition to
13318eed22b1SJens Schweikhardtthese, a built-in version of the
1332d90c5c4aSAkinori MUSHA.Xr test 1
1333018d9f62SAkinori MUSHAcommand is provided for efficiency.
133481e9cda2SRuslan Ermilov.Bl -tag -width indent
1335d0353b83SRuslan Ermilov.It Ic \&:
1336aa9caaf6SPeter WemmA null command that returns a 0 (true) exit value.
1337d0353b83SRuslan Ermilov.It Ic \&. Ar file
1338aa9caaf6SPeter WemmThe commands in the specified file are read and executed by the shell.
13394ad8968aSBrian FeldmanThe
13404ad8968aSBrian Feldman.Ic return
13414ad8968aSBrian Feldmancommand may be used to return to the
13424ad8968aSBrian Feldman.Ic \&.
13434ad8968aSBrian Feldmancommand's caller.
13446466945aSJohn PolstraIf
13456466945aSJohn Polstra.Ar file
13466466945aSJohn Polstracontains any
134749e11e3aSSheldon Hearn.Dq /
1348eccea571SRuslan Ermilovcharacters, it is used as is.
1349eccea571SRuslan ErmilovOtherwise, the shell searches the
13506466945aSJohn Polstra.Ev PATH
1351eccea571SRuslan Ermilovfor the file.
1352eccea571SRuslan ErmilovIf it is not found in the
13536466945aSJohn Polstra.Ev PATH ,
13546466945aSJohn Polstrait is sought in the current working directory.
135549e11e3aSSheldon Hearn.It Ic alias Op Ar name ...
135681e9cda2SRuslan Ermilov.It Ic alias Op Ar name Ns = Ns Ar string ...
135749e11e3aSSheldon HearnIf
1358d0353b83SRuslan Ermilov.Ar name Ns = Ns Ar string
135949e11e3aSSheldon Hearnis specified, the shell defines the alias
136049e11e3aSSheldon Hearn.Ar name
13616b15476eSSheldon Hearnwith value
136249e11e3aSSheldon Hearn.Ar string .
13636b15476eSSheldon HearnIf just
136449e11e3aSSheldon Hearn.Ar name
13656b15476eSSheldon Hearnis specified, the value of the alias
136649e11e3aSSheldon Hearn.Ar name
13676b15476eSSheldon Hearnis printed.
136849e11e3aSSheldon HearnWith no arguments, the
136949e11e3aSSheldon Hearn.Ic alias
13708eed22b1SJens Schweikhardtbuilt-in command prints the names and values of all defined aliases
137149e11e3aSSheldon Hearn(see
137249e11e3aSSheldon Hearn.Ic unalias ) .
1373e5341cbbSTim J. RobbinsAlias values are written with appropriate quoting so that they are
13749ba31ca0SRuslan Ermilovsuitable for re-input to the shell.
137549e11e3aSSheldon Hearn.It Ic bg Op Ar job ...
137649e11e3aSSheldon HearnContinue the specified jobs
137749e11e3aSSheldon Hearn(or the current job if no jobs are given)
137849e11e3aSSheldon Hearnin the background.
1379df9e587bSTim J. Robbins.It Ic builtin Ar cmd Op Ar arg ...
13808eed22b1SJens SchweikhardtExecute the specified built-in command,
138149e11e3aSSheldon Hearn.Ar cmd .
138249e11e3aSSheldon HearnThis is useful when the user wishes to override a shell function
13838eed22b1SJens Schweikhardtwith the same name as a built-in command.
1384088acf90STim J. Robbins.It Ic bind Oo Fl aeklrsv Oc Oo Ar key Oo Ar command Oc Oc
1385088acf90STim J. RobbinsList or alter key bindings for the line editor.
1386088acf90STim J. RobbinsThis command is documented in
1387088acf90STim J. Robbins.Xr editrc 5 .
1388d74e011fSRuslan Ermilov.It Ic cd Oo Fl L | P Oc Op Ar directory
138949e11e3aSSheldon HearnSwitch to the specified
139049e11e3aSSheldon Hearn.Ar directory ,
139149e11e3aSSheldon Hearnor to the directory specified in the
139249e11e3aSSheldon Hearn.Ev HOME
139349e11e3aSSheldon Hearnenvironment variable if no
139449e11e3aSSheldon Hearn.Ar directory
139549e11e3aSSheldon Hearnis specified.
139649e11e3aSSheldon HearnIf
139749e11e3aSSheldon Hearn.Ar directory
1398029c8ee4STim J. Robbinsdoes not begin with
13999ba31ca0SRuslan Ermilov.Pa / , \&. ,
140049e11e3aSSheldon Hearnor
1401029c8ee4STim J. Robbins.Pa .. ,
140249e11e3aSSheldon Hearnthen the directories listed in the
140349e11e3aSSheldon Hearn.Ev CDPATH
140449e11e3aSSheldon Hearnvariable will be
140549e11e3aSSheldon Hearnsearched for the specified
140649e11e3aSSheldon Hearn.Ar directory .
1407029c8ee4STim J. RobbinsIf
1408029c8ee4STim J. Robbins.Ev CDPATH
1409029c8ee4STim J. Robbinsis unset, the current directory is searched.
141049e11e3aSSheldon HearnThe format of
141149e11e3aSSheldon Hearn.Ar CDPATH
141249e11e3aSSheldon Hearnis the same as that of
141349e11e3aSSheldon Hearn.Ev PATH .
1414e6d3cf26SSheldon HearnIn an interactive shell,
141549e11e3aSSheldon Hearnthe
141649e11e3aSSheldon Hearn.Ic cd
141749e11e3aSSheldon Hearncommand will print out the name of the directory
1418e6d3cf26SSheldon Hearnthat it actually switched to
1419e6d3cf26SSheldon Hearnif this is different from the name that the user gave.
142049e11e3aSSheldon HearnThese may be different either because the
142149e11e3aSSheldon Hearn.Ev CDPATH
142249e11e3aSSheldon Hearnmechanism was used or because a symbolic link was crossed.
1423178897f1STim J. Robbins.Pp
1424178897f1STim J. RobbinsIf the
1425178897f1STim J. Robbins.Fl P
1426178897f1STim J. Robbinsoption is specified,
142781e9cda2SRuslan Ermilov.Pa ..
1428178897f1STim J. Robbinsis handled physically and symbolic links are resolved before
142981e9cda2SRuslan Ermilov.Pa ..
1430178897f1STim J. Robbinscomponents are processed.
1431178897f1STim J. RobbinsIf the
1432178897f1STim J. Robbins.Fl L
1433178897f1STim J. Robbinsoption is specified,
143481e9cda2SRuslan Ermilov.Pa ..
1435178897f1STim J. Robbinsis handled logically.
1436178897f1STim J. RobbinsThis is the default.
14379434a1c7SDima Dorfman.It Ic chdir
14389434a1c7SDima DorfmanA synonym for the
14399434a1c7SDima Dorfman.Ic cd
14408eed22b1SJens Schweikhardtbuilt-in command.
14419ba31ca0SRuslan Ermilov.It Ic command Oo Fl p Oc Op Ar utility Op Ar argument ...
14422babaf74STim J. RobbinsExecute the specified
14432babaf74STim J. Robbins.Ar utility
14442babaf74STim J. Robbinsas a simple command (see the
14452babaf74STim J. Robbins.Sx Simple Commands
14462babaf74STim J. Robbinssection).
14472babaf74STim J. Robbins.Pp
14482babaf74STim J. RobbinsIf the
14492babaf74STim J. Robbins.Fl p
14502babaf74STim J. Robbinsoption is specified, the command search is performed using a
14512babaf74STim J. Robbinsdefault value of
14522babaf74STim J. Robbins.Ev PATH
14532babaf74STim J. Robbinsthat is guaranteed to find all of the standard utilities.
14549ba31ca0SRuslan Ermilov.It Ic echo Oo Fl e | n Oc Op Ar string
1455501e74b7SMark OvensPrint
1456501e74b7SMark Ovens.Ar string
1457501e74b7SMark Ovensto the standard output with a newline appended.
145881e9cda2SRuslan Ermilov.Bl -tag -width indent
1459501e74b7SMark Ovens.It Fl n
1460501e74b7SMark OvensSuppress the output of the trailing newline.
1461501e74b7SMark Ovens.It Fl e
1462501e74b7SMark OvensProcess C-style backslash escape sequences.
1463501e74b7SMark Ovens.Ic echo
1464501e74b7SMark Ovensunderstands the following character escapes:
146581e9cda2SRuslan Ermilov.Bl -tag -width indent
1466501e74b7SMark Ovens.It \ea
1467501e74b7SMark OvensAlert (ring the terminal bell)
1468501e74b7SMark Ovens.It \eb
1469501e74b7SMark OvensBackspace
1470501e74b7SMark Ovens.It \ec
1471501e74b7SMark OvensSuppress the trailing newline (this has the side-effect of truncating the
1472501e74b7SMark Ovensline if it is not the last character)
1473501e74b7SMark Ovens.It \ee
1474501e74b7SMark OvensThe ESC character (ASCII 0x1b)
1475501e74b7SMark Ovens.It \ef
1476501e74b7SMark OvensFormfeed
1477501e74b7SMark Ovens.It \en
1478501e74b7SMark OvensNewline
1479501e74b7SMark Ovens.It \er
1480501e74b7SMark OvensCarriage return
1481501e74b7SMark Ovens.It \et
1482501e74b7SMark OvensHorizontal tab
1483501e74b7SMark Ovens.It \ev
1484501e74b7SMark OvensVertical tab
1485501e74b7SMark Ovens.It \e\e
1486501e74b7SMark OvensLiteral backslash
1487501e74b7SMark Ovens.It \e0nnn
1488501e74b7SMark Ovens(Zero) The character whose octal value is nnn
1489501e74b7SMark Ovens.El
1490501e74b7SMark Ovens.Pp
1491501e74b7SMark OvensIf
1492501e74b7SMark Ovens.Ar string
1493501e74b7SMark Ovensis not enclosed in quotes then the backslash itself must be escaped
1494eccea571SRuslan Ermilovwith a backslash to protect it from the shell.
1495eccea571SRuslan ErmilovFor example
1496501e74b7SMark Ovens.Bd -literal -offset indent
1497501e74b7SMark Ovens$ echo -e "a\evb"
1498501e74b7SMark Ovensa
1499501e74b7SMark Ovens b
1500501e74b7SMark Ovens$ echo -e a\e\evb
1501501e74b7SMark Ovensa
1502501e74b7SMark Ovens b
1503501e74b7SMark Ovens$ echo -e "a\e\eb"
1504501e74b7SMark Ovensa\eb
1505501e74b7SMark Ovens$ echo -e a\e\e\e\eb
1506501e74b7SMark Ovensa\eb
1507501e74b7SMark Ovens.Ed
1508501e74b7SMark Ovens.El
1509558175caSTim J. Robbins.Pp
1510558175caSTim J. RobbinsOnly one of the
1511558175caSTim J. Robbins.Fl e
1512558175caSTim J. Robbinsand
1513558175caSTim J. Robbins.Fl n
1514558175caSTim J. Robbinsoptions may be specified.
151549e11e3aSSheldon Hearn.It Ic eval Ar string ...
1516e6d3cf26SSheldon HearnConcatenate all the arguments with spaces.
1517e6d3cf26SSheldon HearnThen re-parse and execute the command.
151849e11e3aSSheldon Hearn.It Ic exec Op Ar command Op arg ...
151949e11e3aSSheldon HearnUnless
152049e11e3aSSheldon Hearn.Ar command
152149e11e3aSSheldon Hearnis omitted,
152249e11e3aSSheldon Hearnthe shell process is replaced with the specified program
15238eed22b1SJens Schweikhardt(which must be a real program, not a shell built-in command or function).
152449e11e3aSSheldon HearnAny redirections on the
152549e11e3aSSheldon Hearn.Ic exec
152649e11e3aSSheldon Hearncommand are marked as permanent,
152749e11e3aSSheldon Hearnso that they are not undone when the
152849e11e3aSSheldon Hearn.Ic exec
152949e11e3aSSheldon Hearncommand finishes.
153049e11e3aSSheldon Hearn.It Ic exit Op Ar exitstatus
153149e11e3aSSheldon HearnTerminate the shell process.
153249e11e3aSSheldon HearnIf
153349e11e3aSSheldon Hearn.Ar exitstatus
153449e11e3aSSheldon Hearnis given
153549e11e3aSSheldon Hearnit is used as the exit status of the shell;
153649e11e3aSSheldon Hearnotherwise the exit status of the preceding command is used.
15379ba31ca0SRuslan Ermilov.It Ic export Oo Fl p Oc Op Ar name ...
15384b88c807SRodney W. GrimesThe specified names are exported so that they will
15394b88c807SRodney W. Grimesappear in the environment of subsequent commands.
154049e11e3aSSheldon HearnThe only way to un-export a variable is to
154149e11e3aSSheldon Hearn.Ic unset
154249e11e3aSSheldon Hearnit.
154349e11e3aSSheldon HearnThe shell allows the value of a variable to be set
154449e11e3aSSheldon Hearnat the same time as it is exported by writing
1545ab72124fSSteve Price.Bd -literal -offset indent
15464b88c807SRodney W. Grimesexport name=value
1547ab72124fSSteve Price.Ed
1548ab72124fSSteve Price.Pp
15494b88c807SRodney W. GrimesWith no arguments the export command lists the names
15504b88c807SRodney W. Grimesof all exported variables.
155145086f8cSTim J. RobbinsIf the
155245086f8cSTim J. Robbins.Fl p
155345086f8cSTim J. Robbinsoption is specified, the exported variables are printed as
155445086f8cSTim J. Robbins.Dq Ic export Ar name Ns = Ns Ar value
155545086f8cSTim J. Robbinslines, suitable for re-input to the shell.
155681e9cda2SRuslan Ermilov.It Ic fc Oo Fl e Ar editor Oc Op Ar first Op Ar last
155781e9cda2SRuslan Ermilov.It Ic fc Fl l Oo Fl nr Oc Op Ar first Op Ar last
155881e9cda2SRuslan Ermilov.It Ic fc Fl s Oo Ar old Ns = Ns Ar new Oc Op Ar first
155949e11e3aSSheldon HearnThe
156049e11e3aSSheldon Hearn.Ic fc
15618eed22b1SJens Schweikhardtbuilt-in command lists, or edits and re-executes,
156249e11e3aSSheldon Hearncommands previously entered to an interactive shell.
156381e9cda2SRuslan Ermilov.Bl -tag -width indent
156449e11e3aSSheldon Hearn.It Fl e Ar editor
156549e11e3aSSheldon HearnUse the editor named by
156649e11e3aSSheldon Hearn.Ar editor
156749e11e3aSSheldon Hearnto edit the commands.
156849e11e3aSSheldon HearnThe editor string is a command name,
156949e11e3aSSheldon Hearnsubject to search via the
157049e11e3aSSheldon Hearn.Ev PATH
157149e11e3aSSheldon Hearnvariable.
157249e11e3aSSheldon HearnThe value in the
157349e11e3aSSheldon Hearn.Ev FCEDIT
157449e11e3aSSheldon Hearnvariable is used as a default when
157549e11e3aSSheldon Hearn.Fl e
157649e11e3aSSheldon Hearnis not specified.
157749e11e3aSSheldon HearnIf
157849e11e3aSSheldon Hearn.Ev FCEDIT
157949e11e3aSSheldon Hearnis null or unset, the value of the
158049e11e3aSSheldon Hearn.Ev EDITOR
158149e11e3aSSheldon Hearnvariable is used.
158249e11e3aSSheldon HearnIf
158349e11e3aSSheldon Hearn.Ev EDITOR
158449e11e3aSSheldon Hearnis null or unset,
1585ab72124fSSteve Price.Xr ed 1
1586ab72124fSSteve Priceis used as the editor.
158749e11e3aSSheldon Hearn.It Fl l No (ell)
15884b88c807SRodney W. GrimesList the commands rather than invoking
1589eccea571SRuslan Ermilovan editor on them.
1590eccea571SRuslan ErmilovThe commands are written in the
15914b88c807SRodney W. Grimessequence indicated by the first and last operands, as
159249e11e3aSSheldon Hearnaffected by
159349e11e3aSSheldon Hearn.Fl r ,
159449e11e3aSSheldon Hearnwith each command preceded by the command number.
159549e11e3aSSheldon Hearn.It Fl n
159649e11e3aSSheldon HearnSuppress command numbers when listing with
159749e11e3aSSheldon Hearn.Fl l .
159849e11e3aSSheldon Hearn.It Fl r
159949e11e3aSSheldon HearnReverse the order of the commands listed
160049e11e3aSSheldon Hearn(with
160149e11e3aSSheldon Hearn.Fl l )
160249e11e3aSSheldon Hearnor edited
160349e11e3aSSheldon Hearn(with neither
160449e11e3aSSheldon Hearn.Fl l
160549e11e3aSSheldon Hearnnor
160649e11e3aSSheldon Hearn.Fl s ) .
160749e11e3aSSheldon Hearn.It Fl s
16084b88c807SRodney W. GrimesRe-execute the command without invoking an editor.
160949e11e3aSSheldon Hearn.It Ar first
161049e11e3aSSheldon Hearn.It Ar last
161149e11e3aSSheldon HearnSelect the commands to list or edit.
161249e11e3aSSheldon HearnThe number of previous commands that can be accessed
161349e11e3aSSheldon Hearnare determined by the value of the
1614d0353b83SRuslan Ermilov.Ev HISTSIZE
1615d0353b83SRuslan Ermilovvariable.
161649e11e3aSSheldon HearnThe value of
161749e11e3aSSheldon Hearn.Ar first
161849e11e3aSSheldon Hearnor
161949e11e3aSSheldon Hearn.Ar last
162049e11e3aSSheldon Hearnor both are one of the following:
162181e9cda2SRuslan Ermilov.Bl -tag -width indent
162249e11e3aSSheldon Hearn.It Ar [+]num
162349e11e3aSSheldon HearnA positive number representing a command number;
162449e11e3aSSheldon Hearncommand numbers can be displayed with the
162549e11e3aSSheldon Hearn.Fl l
162649e11e3aSSheldon Hearnoption.
162749e11e3aSSheldon Hearn.It Ar -num
162849e11e3aSSheldon HearnA negative decimal number representing the
162949e11e3aSSheldon Hearncommand that was executed
163049e11e3aSSheldon Hearn.Ar num
163149e11e3aSSheldon Hearnof
163249e11e3aSSheldon Hearncommands previously.
163349e11e3aSSheldon HearnFor example, -1 is the immediately previous command.
163449e11e3aSSheldon Hearn.It Ar string
163549e11e3aSSheldon HearnA string indicating the most recently entered command
163649e11e3aSSheldon Hearnthat begins with that string.
163749e11e3aSSheldon HearnIf the
163849e11e3aSSheldon Hearn.Ar old=new
163949e11e3aSSheldon Hearnoperand is not also specified with
164049e11e3aSSheldon Hearn.Fl s ,
164149e11e3aSSheldon Hearnthe string form of the first operand cannot contain an embedded equal sign.
164249e11e3aSSheldon Hearn.El
164349e11e3aSSheldon Hearn.El
164449e11e3aSSheldon Hearn.Pp
164549e11e3aSSheldon HearnThe following environment variables affect the execution of
164649e11e3aSSheldon Hearn.Ic fc :
164738afdcbcSGiorgos Keramidas.Bl -tag -width ".Ev HISTSIZE"
164849e11e3aSSheldon Hearn.It Ev FCEDIT
164938afdcbcSGiorgos KeramidasName of the editor to use for history editing.
165049e11e3aSSheldon Hearn.It Ev HISTSIZE
16513d7b5b93SPhilippe CharnierThe number of previous commands that are accessible.
1652ab72124fSSteve Price.El
165349e11e3aSSheldon Hearn.It Ic fg Op Ar job
165449e11e3aSSheldon HearnMove the specified
165549e11e3aSSheldon Hearn.Ar job
165649e11e3aSSheldon Hearnor the current job to the foreground.
165749e11e3aSSheldon Hearn.It Ic getopts Ar optstring Ar var
165849e11e3aSSheldon HearnThe POSIX
165949e11e3aSSheldon Hearn.Ic getopts
166049e11e3aSSheldon Hearncommand.
166149e11e3aSSheldon HearnThe
166249e11e3aSSheldon Hearn.Ic getopts
166349e11e3aSSheldon Hearncommand deprecates the older
166449e11e3aSSheldon Hearn.Xr getopt 1
166549e11e3aSSheldon Hearncommand.
1666ab0a2172SSteve PriceThe first argument should be a series of letters, each possibly
1667ab0a2172SSteve Pricefollowed by a colon which indicates that the option takes an argument.
1668eccea571SRuslan ErmilovThe specified variable is set to the parsed option.
1669eccea571SRuslan ErmilovThe index of
167049e11e3aSSheldon Hearnthe next argument is placed into the shell variable
167149e11e3aSSheldon Hearn.Ev OPTIND .
1672ab0a2172SSteve PriceIf an option takes an argument, it is placed into the shell variable
167349e11e3aSSheldon Hearn.Ev OPTARG .
167449e11e3aSSheldon HearnIf an invalid option is encountered,
167549e11e3aSSheldon Hearn.Ev var
167649e11e3aSSheldon Hearnis set to
16771586940eSRuslan Ermilov.Dq Li \&? .
1678ab0a2172SSteve PriceIt returns a false value (1) when it encounters the end of the options.
167981e9cda2SRuslan Ermilov.It Ic hash Oo Fl rv Oc Op Ar command ...
168049e11e3aSSheldon HearnThe shell maintains a hash table which remembers the locations of commands.
168149e11e3aSSheldon HearnWith no arguments whatsoever, the
168249e11e3aSSheldon Hearn.Ic hash
168349e11e3aSSheldon Hearncommand prints out the contents of this table.
168449e11e3aSSheldon HearnEntries which have not been looked at since the last
168549e11e3aSSheldon Hearn.Ic cd
168649e11e3aSSheldon Hearncommand are marked with an asterisk;
168749e11e3aSSheldon Hearnit is possible for these entries to be invalid.
1688ab72124fSSteve Price.Pp
168949e11e3aSSheldon HearnWith arguments, the
169049e11e3aSSheldon Hearn.Ic hash
169149e11e3aSSheldon Hearncommand removes each specified
169249e11e3aSSheldon Hearn.Ar command
169349e11e3aSSheldon Hearnfrom the hash table (unless they are functions) and then locates it.
169449e11e3aSSheldon HearnWith the
169549e11e3aSSheldon Hearn.Fl v
169649e11e3aSSheldon Hearnoption,
169749e11e3aSSheldon Hearn.Ic hash
169849e11e3aSSheldon Hearnprints the locations of the commands as it finds them.
169949e11e3aSSheldon HearnThe
170049e11e3aSSheldon Hearn.Fl r
170149e11e3aSSheldon Hearnoption causes the
170249e11e3aSSheldon Hearn.Ic hash
170349e11e3aSSheldon Hearncommand to delete all the entries in the hash table except for functions.
170449e11e3aSSheldon Hearn.It Ic jobid Op Ar job
170549e11e3aSSheldon HearnPrint the process id's of the processes in the specified
170649e11e3aSSheldon Hearn.Ar job .
170749e11e3aSSheldon HearnIf the
170849e11e3aSSheldon Hearn.Ar job
170949e11e3aSSheldon Hearnargument is omitted, use the current job.
17109ba31ca0SRuslan Ermilov.It Ic jobs Oo Fl ls Oc Op Ar job ...
1711ad8a0759STim J. RobbinsPrint information about the specified jobs, or all jobs if no
1712ad8a0759STim J. Robbins.Ar job
1713ad8a0759STim J. Robbinsargument is given.
1714ad8a0759STim J. RobbinsThe information printed includes job ID, status and command name.
1715ad8a0759STim J. Robbins.Pp
1716ad8a0759STim J. RobbinsIf the
1717ad8a0759STim J. Robbins.Fl l
1718ad8a0759STim J. Robbinsoption is specified, the PID of each job is also printed.
1719ad8a0759STim J. RobbinsIf the
1720ad8a0759STim J. Robbins.Fl s
17219ba31ca0SRuslan Ermilovoption is specified, only the PIDs of the jobs are printed, one per line.
1722d74e011fSRuslan Ermilov.It Ic pwd Op Fl L | P
1723eccea571SRuslan ErmilovPrint the path of the current directory.
1724eccea571SRuslan ErmilovThe built-in command may
17254b88c807SRodney W. Grimesdiffer from the program of the same name because the
17268eed22b1SJens Schweikhardtbuilt-in command remembers what the current directory
1727eccea571SRuslan Ermilovis rather than recomputing it each time.
1728eccea571SRuslan ErmilovThis makes
1729eccea571SRuslan Ermilovit faster.
1730eccea571SRuslan ErmilovHowever, if the current directory is
173149e11e3aSSheldon Hearnrenamed,
17328eed22b1SJens Schweikhardtthe built-in version of
173349e11e3aSSheldon Hearn.Xr pwd 1
173449e11e3aSSheldon Hearnwill continue to print the old name for the directory.
1735178897f1STim J. Robbins.Pp
1736178897f1STim J. RobbinsIf the
1737178897f1STim J. Robbins.Fl P
1738178897f1STim J. Robbinsoption is specified, symbolic links are resolved.
1739178897f1STim J. RobbinsIf the
1740178897f1STim J. Robbins.Fl L
1741178897f1STim J. Robbinsoption is specified, the shell's notion of the current directory
1742178897f1STim J. Robbinsis printed (symbolic links are not resolved).
1743178897f1STim J. RobbinsThis is the default.
174481e9cda2SRuslan Ermilov.It Ic read Oo Fl p Ar prompt Oc Oo Fl t Ar timeout Oc Oo Fl er Oc Ar variable ...
174549e11e3aSSheldon HearnThe
174649e11e3aSSheldon Hearn.Ar prompt
174749e11e3aSSheldon Hearnis printed if the
174849e11e3aSSheldon Hearn.Fl p
174949e11e3aSSheldon Hearnoption is specified
1750eccea571SRuslan Ermilovand the standard input is a terminal.
1751eccea571SRuslan ErmilovThen a line is
1752eccea571SRuslan Ermilovread from the standard input.
1753eccea571SRuslan ErmilovThe trailing newline
17544b88c807SRodney W. Grimesis deleted from the line and the line is split as
175549e11e3aSSheldon Hearndescribed in the section on
175649e11e3aSSheldon Hearn.Sx White Space Splitting (Field Splitting)
175749e11e3aSSheldon Hearnabove, and
17584b88c807SRodney W. Grimesthe pieces are assigned to the variables in order.
1759f434d1dfSAdam DavidIf there are more pieces than variables, the remaining
176049e11e3aSSheldon Hearnpieces (along with the characters in
176149e11e3aSSheldon Hearn.Ev IFS
176249e11e3aSSheldon Hearnthat separated them)
176349e11e3aSSheldon Hearnare assigned to the last variable.
1764f434d1dfSAdam DavidIf there are more variables than pieces, the remaining
1765f434d1dfSAdam Davidvariables are assigned the null string.
1766ab72124fSSteve Price.Pp
176749e11e3aSSheldon HearnBackslashes are treated specially, unless the
176849e11e3aSSheldon Hearn.Fl r
176949e11e3aSSheldon Hearnoption is
1770eccea571SRuslan Ermilovspecified.
1771eccea571SRuslan ErmilovIf a backslash is followed by
17728f0561ccSThomas Gellekuma newline, the backslash and the newline will be
1773eccea571SRuslan Ermilovdeleted.
1774eccea571SRuslan ErmilovIf a backslash is followed by any other
17758f0561ccSThomas Gellekumcharacter, the backslash will be deleted and the following
177649e11e3aSSheldon Hearncharacter will be treated as though it were not in
177749e11e3aSSheldon Hearn.Ev IFS ,
177849e11e3aSSheldon Hearneven if it is.
17798f0561ccSThomas Gellekum.Pp
178049e11e3aSSheldon HearnIf the
178149e11e3aSSheldon Hearn.Fl t
178249e11e3aSSheldon Hearnoption is specified and the
178349e11e3aSSheldon Hearn.Ar timeout
178449e11e3aSSheldon Hearnelapses before any input is supplied,
178549e11e3aSSheldon Hearnthe
178649e11e3aSSheldon Hearn.Ic read
178749e11e3aSSheldon Hearncommand will return without assigning any values.
178849e11e3aSSheldon HearnThe
178949e11e3aSSheldon Hearn.Ar timeout
179049e11e3aSSheldon Hearnvalue may optionally be followed by one of
179149e11e3aSSheldon Hearn.Dq s ,
179249e11e3aSSheldon Hearn.Dq m
179349e11e3aSSheldon Hearnor
179449e11e3aSSheldon Hearn.Dq h
1795a910f192SDima Dorfmanto explicitly specify seconds, minutes or hours.
179649e11e3aSSheldon HearnIf none is supplied,
179749e11e3aSSheldon Hearn.Dq s
179849e11e3aSSheldon Hearnis assumed.
1799afa53c8dSMike Smith.Pp
180049e11e3aSSheldon HearnThe
180149e11e3aSSheldon Hearn.Fl e
180249e11e3aSSheldon Hearnoption exists only for backward compatibility with older scripts.
18039ba31ca0SRuslan Ermilov.It Ic readonly Oo Fl p Oc Op Ar name ...
180449e11e3aSSheldon HearnEach specified
180549e11e3aSSheldon Hearn.Ar name
180649e11e3aSSheldon Hearnis marked as read only,
180749e11e3aSSheldon Hearnso that it cannot be subsequently modified or unset.
180849e11e3aSSheldon HearnThe shell allows the value of a variable to be set
180949e11e3aSSheldon Hearnat the same time as it is marked read only
181049e11e3aSSheldon Hearnby using the following form:
1811ab72124fSSteve Price.Bd -literal -offset indent
18124b88c807SRodney W. Grimesreadonly name=value
1813ab72124fSSteve Price.Ed
1814ab72124fSSteve Price.Pp
181549e11e3aSSheldon HearnWith no arguments the
181649e11e3aSSheldon Hearn.Ic readonly
181749e11e3aSSheldon Hearncommand lists the names of all read only variables.
181845086f8cSTim J. RobbinsIf the
181945086f8cSTim J. Robbins.Fl p
182045086f8cSTim J. Robbinsoption is specified, the read-only variables are printed as
182145086f8cSTim J. Robbins.Dq Ic readonly Ar name Ns = Ns Ar value
182245086f8cSTim J. Robbinslines, suitable for re-input to the shell.
182381e9cda2SRuslan Ermilov.It Ic set Oo Fl /+abCEefIimnpTuVvx Oc Oo Fl /+o Ar longname Oc Oo
182481e9cda2SRuslan Ermilov.Fl c Ar string Oc Op Fl - Ar arg ...
1825e918fc8fSSheldon HearnThe
1826e918fc8fSSheldon Hearn.Ic set
1827e918fc8fSSheldon Hearncommand performs three different functions:
1828ab72124fSSteve Price.Bl -item
1829ab72124fSSteve Price.It
183049e11e3aSSheldon HearnWith no arguments, it lists the values of all shell variables.
1831ab72124fSSteve Price.It
183249e11e3aSSheldon HearnIf options are given,
183349e11e3aSSheldon Hearneither in short form or using the long
183449e11e3aSSheldon Hearn.Dq Fl /+o Ar longname
183549e11e3aSSheldon Hearnform,
183649e11e3aSSheldon Hearnit sets or clears the specified options as described in the section called
18376b15476eSSheldon Hearn.Sx Argument List Processing .
1838ab72124fSSteve Price.It
183949e11e3aSSheldon HearnIf the
184049e11e3aSSheldon Hearn.Dq Fl -
184149e11e3aSSheldon Hearnoption is specified,
184249e11e3aSSheldon Hearn.Ic set
184349e11e3aSSheldon Hearnwill replace the shell's positional parameters with the subsequent
184449e11e3aSSheldon Hearnarguments.
184549e11e3aSSheldon HearnIf no arguments follow the
184649e11e3aSSheldon Hearn.Dq Fl -
184749e11e3aSSheldon Hearnoption,
184849e11e3aSSheldon Hearnall the positional parameters will be cleared,
184949e11e3aSSheldon Hearnwhich is equivalent to executing the command
185049e11e3aSSheldon Hearn.Dq Li shift $# .
185149e11e3aSSheldon HearnThe
185249e11e3aSSheldon Hearn.Dq Fl -
18538eed22b1SJens Schweikhardtflag may be omitted when specifying arguments to be used
185449e11e3aSSheldon Hearnas positional replacement parameters.
185549e11e3aSSheldon HearnThis is not recommended,
185649e11e3aSSheldon Hearnbecause the first argument may begin with a dash
1857a762afe5SGiorgos Keramidas.Pq Ql -
185849e11e3aSSheldon Hearnor a plus
1859a762afe5SGiorgos Keramidas.Pq Ql + ,
186049e11e3aSSheldon Hearnwhich the
186149e11e3aSSheldon Hearn.Ic set
186249e11e3aSSheldon Hearncommand will interpret as a request to enable or disable options.
1863ab72124fSSteve Price.El
186449e11e3aSSheldon Hearn.It Ic setvar Ar variable Ar value
186549e11e3aSSheldon HearnAssigns the specified
186649e11e3aSSheldon Hearn.Ar value
186749e11e3aSSheldon Hearnto the specified
186849e11e3aSSheldon Hearn.Ar variable .
186949e11e3aSSheldon Hearn.Ic Setvar
187049e11e3aSSheldon Hearnis intended to be used in functions that
1871e6d3cf26SSheldon Hearnassign values to variables whose names are passed as parameters.
187249e11e3aSSheldon HearnIn general it is better to write
187349e11e3aSSheldon Hearn.Bd -literal -offset indent
187449e11e3aSSheldon Hearnvariable=value
187549e11e3aSSheldon Hearn.Ed
187649e11e3aSSheldon Hearnrather than using
187749e11e3aSSheldon Hearn.Ic setvar .
187849e11e3aSSheldon Hearn.It Ic shift Op Ar n
187949e11e3aSSheldon HearnShift the positional parameters
188049e11e3aSSheldon Hearn.Ar n
1881e918fc8fSSheldon Hearntimes, or once if
188249e11e3aSSheldon Hearn.Ar n
188349e11e3aSSheldon Hearnis not specified.
188449e11e3aSSheldon HearnA shift sets the value of $1 to the value of $2,
188549e11e3aSSheldon Hearnthe value of $2 to the value of $3, and so on,
188649e11e3aSSheldon Hearndecreasing the value of $# by one.
188749e11e3aSSheldon HearnIf there are zero positional parameters, shifting does not do anything.
188881e9cda2SRuslan Ermilov.It Ic trap Oo Ar action Oc Ar signal ...
188949e11e3aSSheldon HearnCause the shell to parse and execute
189049e11e3aSSheldon Hearn.Ar action
189149e11e3aSSheldon Hearnwhen any specified
189249e11e3aSSheldon Hearn.Ar signal
189349e11e3aSSheldon Hearnis received.
1894162ae3aeSTony FinchThe signals are specified by name or number.
1895162ae3aeSTony FinchIn addition, the pseudo-signal
1896f5d1157fSRuslan Ermilov.Cm EXIT
1897162ae3aeSTony Finchmay be used to specify an action that is performed when the shell terminates.
189849e11e3aSSheldon HearnThe
189949e11e3aSSheldon Hearn.Ar action
190049e11e3aSSheldon Hearnmay be null or omitted;
190149e11e3aSSheldon Hearnthe former causes the specified signal to be ignored
190249e11e3aSSheldon Hearnand the latter causes the default action to be taken.
190349e11e3aSSheldon HearnWhen the shell forks off a subshell,
190449e11e3aSSheldon Hearnit resets trapped (but not ignored) signals to the default action.
190549e11e3aSSheldon HearnThe
190649e11e3aSSheldon Hearn.Ic trap
190749e11e3aSSheldon Hearncommand has no effect on signals that were ignored on entry to the shell.
190849e11e3aSSheldon Hearn.It Ic type Op Ar name ...
190949e11e3aSSheldon HearnInterpret each
191049e11e3aSSheldon Hearn.Ar name
191149e11e3aSSheldon Hearnas a command and print the resolution of the command search.
1912e6d3cf26SSheldon HearnPossible resolutions are:
19138eed22b1SJens Schweikhardtshell keyword, alias, shell built-in command, command, tracked alias
191449e11e3aSSheldon Hearnand not found.
191549e11e3aSSheldon HearnFor aliases the alias expansion is printed;
191649e11e3aSSheldon Hearnfor commands and tracked aliases
191749e11e3aSSheldon Hearnthe complete pathname of the command is printed.
191862df9b62SSheldon Hearn.It Ic ulimit Oo Fl HSabcdflmnstuv Oc Op Ar limit
1919ab72124fSSteve PriceSet or display resource limits (see
1920ab72124fSSteve Price.Xr getrlimit 2 ) .
19216b15476eSSheldon HearnIf
192249e11e3aSSheldon Hearn.Ar limit
19236b15476eSSheldon Hearnis specified, the named resource will be set;
19247a2afe64SJoerg Wunschotherwise the current resource value will be displayed.
1925ab72124fSSteve Price.Pp
19266b15476eSSheldon HearnIf
192749e11e3aSSheldon Hearn.Fl H
192849e11e3aSSheldon Hearnis specified, the hard limits will be set or displayed.
192949e11e3aSSheldon HearnWhile everybody is allowed to reduce a hard limit,
193049e11e3aSSheldon Hearnonly the superuser can increase it.
193149e11e3aSSheldon HearnThe
193249e11e3aSSheldon Hearn.Fl S
193349e11e3aSSheldon Hearnoption
1934eccea571SRuslan Ermilovspecifies the soft limits instead.
1935eccea571SRuslan ErmilovWhen displaying limits,
19366b15476eSSheldon Hearnonly one of
193749e11e3aSSheldon Hearn.Fl S
19386b15476eSSheldon Hearnor
193949e11e3aSSheldon Hearn.Fl H
194049e11e3aSSheldon Hearncan be given.
194149e11e3aSSheldon HearnThe default is to display the soft limits,
194249e11e3aSSheldon Hearnand to set both the hard and the soft limits.
1943ab72124fSSteve Price.Pp
19446b15476eSSheldon HearnOption
194549e11e3aSSheldon Hearn.Fl a
194649e11e3aSSheldon Hearncauses the
194749e11e3aSSheldon Hearn.Ic ulimit
194849e11e3aSSheldon Hearncommand to display all resources.
194949e11e3aSSheldon HearnThe parameter
195049e11e3aSSheldon Hearn.Ar limit
19516b15476eSSheldon Hearnis not acceptable in this mode.
1952ab72124fSSteve Price.Pp
19537a2afe64SJoerg WunschThe remaining options specify which resource value is to be
195449e11e3aSSheldon Hearndisplayed or modified.
195549e11e3aSSheldon HearnThey are mutually exclusive.
195681e9cda2SRuslan Ermilov.Bl -tag -width indent
19573652a236SMartin Cracauer.It Fl b Ar sbsize
19583652a236SMartin CracauerThe maximum size of socket buffer usage, in bytes.
195949e11e3aSSheldon Hearn.It Fl c Ar coredumpsize
19607a2afe64SJoerg WunschThe maximal size of core dump files, in 512-byte blocks.
196149e11e3aSSheldon Hearn.It Fl d Ar datasize
19627a2afe64SJoerg WunschThe maximal size of the data segment of a process, in kilobytes.
196349e11e3aSSheldon Hearn.It Fl f Ar filesize
196449e11e3aSSheldon HearnThe maximal size of a file, in 512-byte blocks.
196549e11e3aSSheldon Hearn.It Fl l Ar lockedmem
19667a2afe64SJoerg WunschThe maximal size of memory that can be locked by a process, in
19677a2afe64SJoerg Wunschkilobytes.
196849e11e3aSSheldon Hearn.It Fl m Ar memoryuse
19697a2afe64SJoerg WunschThe maximal resident set size of a process, in kilobytes.
197049e11e3aSSheldon Hearn.It Fl n Ar nofiles
19717a2afe64SJoerg WunschThe maximal number of descriptors that could be opened by a process.
197249e11e3aSSheldon Hearn.It Fl s Ar stacksize
19737a2afe64SJoerg WunschThe maximal size of the stack segment, in kilobytes.
197449e11e3aSSheldon Hearn.It Fl t Ar time
19757a2afe64SJoerg WunschThe maximal amount of CPU time to be used by each process, in seconds.
197649e11e3aSSheldon Hearn.It Fl u Ar userproc
1977ab72124fSSteve PriceThe maximal number of simultaneous processes for this user ID.
197862df9b62SSheldon Hearn.It Fl v Ar virtualmem
19792d41ef4bSMatthew DillonThe maximal virtual size of a process, in kilobytes.
1980ab72124fSSteve Price.El
198149e11e3aSSheldon Hearn.It Ic umask Op Ar mask
198249e11e3aSSheldon HearnSet the file creation mask (see
1983ab72124fSSteve Price.Xr umask 2 )
198449e11e3aSSheldon Hearnto the octal value specified by
19855d3b843bSSheldon Hearn.Ar mask .
198649e11e3aSSheldon HearnIf the argument is omitted, the current mask value is printed.
198781e9cda2SRuslan Ermilov.It Ic unalias Oo Fl a Oc Op Ar name
19886b15476eSSheldon HearnIf
198949e11e3aSSheldon Hearn.Ar name
19906b15476eSSheldon Hearnis specified, the shell removes that alias.
19916b15476eSSheldon HearnIf
19921b9735e6SSheldon Hearn.Fl a
19936b15476eSSheldon Hearnis specified, all aliases are removed.
19949ba31ca0SRuslan Ermilov.It Ic unset Oo Fl fv Oc Ar name ...
19958b34ad92STim J. RobbinsThe specified variables or functions are unset and unexported.
19968b34ad92STim J. RobbinsIf the
19978b34ad92STim J. Robbins.Fl v
19988b34ad92STim J. Robbinsoption is specified or no options are given, the
199949e11e3aSSheldon Hearn.Ar name
20008b34ad92STim J. Robbinsarguments are treated as variable names.
20018b34ad92STim J. RobbinsIf the
20028b34ad92STim J. Robbins.Fl f
20038b34ad92STim J. Robbinsoption is specified, the
20048b34ad92STim J. Robbins.Ar name
20058b34ad92STim J. Robbinsarguments are treated as function names.
200649e11e3aSSheldon Hearn.It Ic wait Op Ar job
200749e11e3aSSheldon HearnWait for the specified
200849e11e3aSSheldon Hearn.Ar job
200949e11e3aSSheldon Hearnto complete and return the exit status of the last process in the
201049e11e3aSSheldon Hearn.Ar job .
2011e6d3cf26SSheldon HearnIf the argument is omitted, wait for all jobs to complete
2012e6d3cf26SSheldon Hearnand return an exit status of zero.
2013ab72124fSSteve Price.El
2014ab72124fSSteve Price.Ss Commandline Editing
2015ab72124fSSteve PriceWhen
2016ab72124fSSteve Price.Nm
2017ab72124fSSteve Priceis being used interactively from a terminal, the current command
201849e11e3aSSheldon Hearnand the command history
201949e11e3aSSheldon Hearn(see
202049e11e3aSSheldon Hearn.Ic fc
202149e11e3aSSheldon Hearnin
20228eed22b1SJens Schweikhardt.Sx Built-in Commands )
202349e11e3aSSheldon Hearncan be edited using vi-mode command line editing.
202449e11e3aSSheldon HearnThis mode uses commands similar
20254b88c807SRodney W. Grimesto a subset of those described in the vi man page.
202649e11e3aSSheldon HearnThe command
202749e11e3aSSheldon Hearn.Dq Li set -o vi
202849e11e3aSSheldon Hearn(or
2029e918fc8fSSheldon Hearn.Dq Li set -V )
203049e11e3aSSheldon Hearnenables vi-mode editing and places
2031ab72124fSSteve Price.Nm
2032eccea571SRuslan Ermilovinto vi insert mode.
2033eccea571SRuslan ErmilovWith vi-mode enabled,
2034ab72124fSSteve Price.Nm
203549e11e3aSSheldon Hearncan be switched between insert mode and command mode by typing
203649e11e3aSSheldon Hearn.Aq ESC .
203749e11e3aSSheldon HearnHitting
203849e11e3aSSheldon Hearn.Aq return
203949e11e3aSSheldon Hearnwhile in command mode will pass the line to the shell.
2040ab72124fSSteve Price.Pp
204149e11e3aSSheldon HearnSimilarly, the
204249e11e3aSSheldon Hearn.Dq Li set -o emacs
204349e11e3aSSheldon Hearn(or
2044e918fc8fSSheldon Hearn.Dq Li set -E )
204549e11e3aSSheldon Hearncommand can be used to enable a subset of
2046ab72124fSSteve Priceemacs-style command line editing features.
204738afdcbcSGiorgos Keramidas.Sh ENVIRONMENT
204838afdcbcSGiorgos KeramidasThe following environment variables affect the execution of
204938afdcbcSGiorgos Keramidas.Nm :
205038afdcbcSGiorgos Keramidas.Bl -tag -width ".Ev HISTSIZE"
205138afdcbcSGiorgos Keramidas.It Ev CDPATH
205238afdcbcSGiorgos KeramidasThe search path used with the
205338afdcbcSGiorgos Keramidas.Ic cd
205438afdcbcSGiorgos Keramidasbuilt-in.
205538afdcbcSGiorgos Keramidas.It Ev EDITOR
205638afdcbcSGiorgos KeramidasThe fallback editor used with the
205738afdcbcSGiorgos Keramidas.Ic fc
205838afdcbcSGiorgos Keramidasbuilt-in.
205938afdcbcSGiorgos KeramidasIf not set, the default editor is
206038afdcbcSGiorgos Keramidas.Xr ed 1 .
206138afdcbcSGiorgos Keramidas.It Ev FCEDIT
206238afdcbcSGiorgos KeramidasThe default editor used with the
206338afdcbcSGiorgos Keramidas.Ic fc
206438afdcbcSGiorgos Keramidasbuilt-in.
206538afdcbcSGiorgos Keramidas.It Ev HISTSIZE
206638afdcbcSGiorgos KeramidasThe number of previous commands that are accessible.
206738afdcbcSGiorgos Keramidas.It Ev HOME
206838afdcbcSGiorgos KeramidasThe starting directory of
206938afdcbcSGiorgos Keramidas.Nm .
207038afdcbcSGiorgos Keramidas.It Ev IFS
207138afdcbcSGiorgos KeramidasInput Field Separators.
207238afdcbcSGiorgos KeramidasThis is normally set to
207338afdcbcSGiorgos Keramidas.Aq space ,
207438afdcbcSGiorgos Keramidas.Aq tab ,
207538afdcbcSGiorgos Keramidasand
207638afdcbcSGiorgos Keramidas.Aq newline .
207738afdcbcSGiorgos KeramidasSee the
207838afdcbcSGiorgos Keramidas.Sx White Space Splitting
207938afdcbcSGiorgos Keramidassection for more details.
208038afdcbcSGiorgos Keramidas.It Ev MAIL
208138afdcbcSGiorgos KeramidasThe name of a mail file, that will be checked for the arrival of new
208238afdcbcSGiorgos Keramidasmail.
208338afdcbcSGiorgos KeramidasOverridden by
208438afdcbcSGiorgos Keramidas.Ev MAILPATH .
208538afdcbcSGiorgos Keramidas.It Ev MAILPATH
208638afdcbcSGiorgos KeramidasA colon
208738afdcbcSGiorgos Keramidas.Pq Ql \&:
208838afdcbcSGiorgos Keramidasseparated list of file names, for the shell to check for incoming
208938afdcbcSGiorgos Keramidasmail.
209038afdcbcSGiorgos KeramidasThis environment setting overrides the
209138afdcbcSGiorgos Keramidas.Ev MAIL
209238afdcbcSGiorgos Keramidassetting.
209338afdcbcSGiorgos KeramidasThere is a maximum of 10 mailboxes that can be monitored at once.
209438afdcbcSGiorgos Keramidas.It Ev PATH
209538afdcbcSGiorgos KeramidasThe default search path for executables.
209638afdcbcSGiorgos KeramidasSee the
209738afdcbcSGiorgos Keramidas.Sx Path Search
209838afdcbcSGiorgos Keramidassection for details.
209938afdcbcSGiorgos Keramidas.It Ev PS1
210038afdcbcSGiorgos KeramidasThe primary prompt string, which defaults to
2101fb039b55SRuslan Ermilov.Dq Li "$ " ,
210238afdcbcSGiorgos Keramidasunless you are the superuser, in which case it defaults to
2103fb039b55SRuslan Ermilov.Dq Li "# " .
210438afdcbcSGiorgos Keramidas.It Ev PS2
210538afdcbcSGiorgos KeramidasThe secondary prompt string, which defaults to
2106fb039b55SRuslan Ermilov.Dq Li "> " .
210738afdcbcSGiorgos Keramidas.It Ev TERM
210838afdcbcSGiorgos KeramidasThe default terminal setting for the shell.
210938afdcbcSGiorgos KeramidasThis is inherited by children of the shell, and is used in the history
211038afdcbcSGiorgos Keramidasediting modes.
211138afdcbcSGiorgos Keramidas.El
2112fb039b55SRuslan Ermilov.Sh EXIT STATUS
2113fb039b55SRuslan ErmilovErrors that are detected by the shell, such as a syntax error, will
2114fb039b55SRuslan Ermilovcause the shell to exit with a non-zero exit status.
2115fb039b55SRuslan ErmilovIf the shell is not an interactive shell, the execution of the shell
2116fb039b55SRuslan Ermilovfile will be aborted.
2117fb039b55SRuslan ErmilovOtherwise the shell will return the exit status of the last command
2118fb039b55SRuslan Ermilovexecuted, or if the exit builtin is used with a numeric argument, it
2119fb039b55SRuslan Ermilovwill return the argument.
2120c83e7c50SJoseph Koshy.Sh SEE ALSO
2121c644db6aSSheldon Hearn.Xr builtin 1 ,
212238afdcbcSGiorgos Keramidas.Xr chsh 1 ,
2123c644db6aSSheldon Hearn.Xr echo 1 ,
212438afdcbcSGiorgos Keramidas.Xr ed 1 ,
212538afdcbcSGiorgos Keramidas.Xr emacs 1 ,
2126c83e7c50SJoseph Koshy.Xr expr 1 ,
212738afdcbcSGiorgos Keramidas.Xr getopt 1 ,
21285521ff5aSRuslan Ermilov.Xr pwd 1 ,
212938afdcbcSGiorgos Keramidas.Xr test 1 ,
213038afdcbcSGiorgos Keramidas.Xr vi 1 ,
213138afdcbcSGiorgos Keramidas.Xr execve 2 ,
213238afdcbcSGiorgos Keramidas.Xr getrlimit 2 ,
2133fd50df30SRuslan Ermilov.Xr umask 2 ,
213438afdcbcSGiorgos Keramidas.Xr editrc 5
2135ab72124fSSteve Price.Sh HISTORY
2136b8923d4cSWolfram SchneiderA
2137ab72124fSSteve Price.Nm
2138b8923d4cSWolfram Schneidercommand appeared in
2139fc482908STim J. Robbins.At v1 .
2140128dc4a2STim J. Robbins.Sh BUGS
2141128dc4a2STim J. RobbinsThe
2142128dc4a2STim J. Robbins.Nm
2143128dc4a2STim J. Robbinsutility does not recognize multibyte characters.
2144