Move primary cache code to libminixfs.
[minix.git] / man / man1 / ash.1
blob2f237ace80a3e7c46d1f06cf105f059a5a9171b9
1 .\" Copyright (c) 1991 The Regents of the University of California.
2 .\" All rights reserved.
3 .\"
4 .\" This code is derived from software contributed to Berkeley by
5 .\" Kenneth Almquist.
6 .\"
7 .\" Redistribution and use in source and binary forms, with or without
8 .\" modification, are permitted provided that the following conditions
9 .\" are met:
10 .\" 1. Redistributions of source code must retain the above copyright
11 .\"    notice, this list of conditions and the following disclaimer.
12 .\" 2. Redistributions in binary form must reproduce the above copyright
13 .\"    notice, this list of conditions and the following disclaimer in the
14 .\"    documentation and/or other materials provided with the distribution.
15 .\" 3. All advertising materials mentioning features or use of this software
16 .\"    must display the following acknowledgement:
17 .\"     This product includes software developed by the University of
18 .\"     California, Berkeley and its contributors.
19 .\" 4. Neither the name of the University nor the names of its contributors
20 .\"    may be used to endorse or promote products derived from this software
21 .\"    without specific prior written permission.
22 .\"
23 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 .\" SUCH DAMAGE.
34 .\"
35 .\"     @(#)sh.1        5.1 (Berkeley) 3/7/91
36 .\"
37 .TH SH 1 "March 7, 1991"
38 .UC 7
39 .de h \" subheading
40 .sp
41 .ti -0.3i
42 .B "\\$1"
43 .PP
45 .de d \" begin display
46 .sp
47 .in +4
48 .nf
50 .de e \" end display
51 .in -4
52 .fi
53 .sp
55 .de c \" command, etc.
56 .br
57 .HP 3
58 \fB\\$1\fR
59 .br
61 .de b \" begin builtin command
62 .HP 3
63 .B \\$1
65 .SH NAME
66 ash, sh, bigsh, ., break, case, cd, command, continue, eval, exec, exit, export, for, getopts, hash, if, jobs, local, read, readonly, return, set, setvar, shift, trap, umask, unset, wait, while \- a shell
67 .SH SYNOPSIS
68 .B ash
70 .B -efIijnsxz
71 ] [
72 .B +efIijnsxz
73 ] [
74 .B -c
75 .I command
76 ] [
77 .I arg
78 ] ...
79 .SH COPYRIGHT
80 Copyright 1989 by Kenneth Almquist.
81 .SH DESCRIPTION
82 .I Ash
83 is a version of
84 .I sh
85 with features similar to those of the System V shell.
86 This manual page lists all the features of
87 .I ash
88 but concentrates on the ones not in other shells.
89 .h "Invocation"
90 If the
91 .B -c
92 options is given, then the shell executes the specified shell command.
93 The
94 .B -s
95 flag cause the shell to read commands from the standard input (after
96 executing any command specified with the
97 .B -c
98 option.
99 If neither the
100 .B -s
102 .B -c
103 options are set, then the first
104 .I arg
105 is taken as the name of a file to read commands from.
106 If this is impossible because there are no arguments following
107 the options, then
108 .I ash
109 will set the
110 .B -s
111 flag and will read commands from the standard input.
113 The shell sets the initial value of the positional parameters from the
114 .IR arg s
115 remaining after any
116 .I arg
117 used as the name of a file of commands is deleted.
119 The flags (other than
120 .BR -c )
121 are set by preceding them with ``-'' and cleared by preceding them
122 with ``+''; see the
123 .I set
124 builtin command for a list of flags.
125 If no value is specified for the
126 .B -i
127 flag, the
128 .B -s
129 flag is set, and the standard input and output of the shell
130 are connected to terminals, then the
131 .B -i
132 flag will be set.
133 If no value is specified for the
134 .B -j
135 flag, then the
136 .B -j
137 flag will be set if the
138 .B -i
139 flag is set.
141 When the shell is invoked with the
142 .B -c
143 option, it is good practice to include the
144 .I -i
145 flag if the command was entered interactively by a user.
146 For compatibility with the System V shell, the
147 .I -i
148 option should come after the
149 .B -c
150 option.
152 If the first character of argument zero to the shell is ``-'',
153 the shell is assumed to be a login shell, and the files
154 .B /etc/profile
156 .B .profile
157 are read if they exist.
158 If the environment variable SHINIT is set on entry to the shell,
159 the commands in SHINIT are normally parsed and executed.  SHINIT is
160 not examined if the shell is a login shell, or if it the shell is running a
161 shell procedure.   (A shell is considered to be running a shell
162 procedure if neither the
163 .B -s
164 nor the
165 .B -c
166 options are set.)
168 In older versions of MINIX that did not have virtual memory, it was
169 important for executables to have enough memory assigned to them. The
170 .B bigsh
171 binary was provided for shells that need much memory. This command is
172 retained for backward compatibility and need not be used on MINIX 3.1.4
173 and later.
174 .h "Control Structures"
176 .I list
177 is a sequence of zero or more commands separated by newlines,
178 semicolons, or ampersands, and optionally terminated by one of these
179 three characters.  (This differs from the System V shell, which
180 requires a list to contain at least one command in most cases.)  The
181 commands in a list are executed in the order they are written.
182 If command is followed by an ampersand, the shell starts the command
183 and immediately proceed onto the next command; otherwise it waits
184 for the command to terminate before proceeding to the next one.
186 ``&&'' and ``||'' are binary operators.
187 ``&&'' executes the first command, and then executes the second command
188 iff the exit status of the first command is zero.  ``||'' is similar,
189 but executes the second command iff the exit status of the first command
190 is nonzero.  ``&&'' and ``||'' both have the same priority.
192 The ``|'' operator is a binary operator which feeds the standard output
193 of the first command into the standard input of the second command.
194 The exit status of the ``|'' operator is the exit status of the second
195 command.  ``|'' has a higher priority than ``||'' or ``&&''.
198 .I if
199 command looks like
201 \fBif\fR list
202 \fBthen\fR      list
203 .ti -\w'[ 'u
204 [ \fBelif\fR list
205   \fBthen\fR    list ] ...
206 .ti -\w'[ 'u
207 [ \fBelse\fR    list ]
208 \fBfi\fR
212 .I while
213 command looks like
215 \fBwhile\fR list
216 \fBdo\fR        list
217 \fBdone\fR
219 The two lists are executed repeatedly while the exit status of the first
220 list is zero.  The
221 .I until
222 command is similar, but has the word
223 .B until
224 in place of
225 .B while
226  repeats until the exit status of the first list
227 is zero.
230 .I for
231 command looks like
233 \fBfor\fR variable \fBin\fR word...
234 \fBdo\fR        list
235 \fBdone\fR
237 The words are expanded, and then the list is executed repeatedly with
238 the variable set to each word in turn.
239 .B do
241 .B done
242 may be replaced with
243 ``{'' and ``}''.
246 .I break
248 .I continue
249 commands look like
251 \fBbreak\fR [ num ]
252 \fBcontinue\fR [ num ]
254 .I Break
255 terminates the
256 .I num
257 innermost
258 .I for
260 .I while
261 loops.
262 .I Continue
263 continues with the next iteration of the
264 .IR num'th
265 innermost loop.
266 These are implemented as builtin commands.
269 .I case
270 command looks like
272 \fBcase\fR word \fBin\fR
273 pattern\fB)\fR list \fB;;\fR
274 \&...
275 \fBesac\fR
277 The pattern can actually be one or more patterns (see
278 .I Patterns
279 below), separated by ``|'' characters.
281 Commands may be grouped by writing either
283 \fB(\fRlist\fB)\fR
287 \fB{\fR list; \fB}\fR
289 The first of these executes the commands in a subshell.
291 A function definition looks like
293 name \fB( )\fR command
295 A function definition is an executable statement; when executed it installs
296 a function named
297 .B name
298 and returns an exit status of zero.
299 The command is normally a list enclosed between ``{'' and ``}''.
301 Variables may be declared to be local to a function by using a
302 .I local
303 command.  This should appear as the first staement of a function,
304 and looks like
306 \fBlocal\fR [ variable | \fB-\fR ] ...
308 .I Local
309 is implemented as a builtin command.
311 When a variable is made local, it inherits the initial value and
312 exported and readonly flags from the variable with the same name in the
313 surrounding scope, if there is one.  Otherwise, the variable is
314 initially unset.
315 .I Ash
316 uses dynamic scoping, so that if you make the variable
317 .B x
318 local to function
319 .IR f ,
320 which then calls function
321 .IR g ,
322 references to the variable
323 .B x
324 made inside
325 .I g
326 will refer to the variable
327 .B x
328 declared inside
329 .IR f ,
330 not to the global variable named
331 .BR x .
333 The only special parameter that can be made local is ``\fB-\fR''.
334 Making ``\fB-\fR'' local any shell options that are changed via the
335 .I set
336 command inside the function to be restored to their original values
337 when the function returns.
340 .I return
341 command looks like
343 \fBreturn\fR [ exitstatus ]
345 It terminates the currently executing function.
346 .I Return
347 is implemented as a builtin command.
348 .h "Simple Commands"
349 A simple command is a sequence of words.  The execution of a simple
350 command proceeds as follows.  First, the leading words of the form
351 ``name=value'' are stripped off and assigned to the environment of
352 the command.  Second, the words are expanded.  Third, the first
353 remaining word is taken as the command name that command is located.
354 Fourth, any redirections are performed.  Fifth, the command is
355 executed.  We look at these operations in reverse order.
357 The execution of the command varies with the type of command.
358 There are three types of commands:  shell functions, builtin commands,
359 and normal programs.
361 When a shell function is executed, all of the shell positional parameters
362 (except $0, which remains unchanged) are set to the parameters to the shell
363 function.  The variables which are explicitly placed in the environment
364 of the command (by placing assignments to them before the function name)
365 are made local to the function and are set to values given.
366 Then the command given in the function definition is executed.
367 The positional parameters are restored to their original values when
368 the command completes.
370 Shell builtins are executed internally to the shell, without spawning
371 a new process.
373 When a normal program is executed, the shell runs the program, passing
374 the parameters and the environment to the program.  If the program is
375 a shell procedure, the shell will interpret the program in a subshell.
376 The shell will reinitialize itself in this case, so that the effect
377 will be as if a new shell had been invoked to handle the shell procedure,
378 except that the location of commands located in the parent shell will
379 be remembered by the child.  If the program is a file beginning with
380 ``#!'', the remainder of the first line specifies an interpreter for
381 the program.  The shell (or the operating system, under Berkeley UNIX)
382 will run the interpreter in this case.  The arguments to the interpreter
383 will consist of any arguments given on the first line of the program,
384 followed by the name of the program, followed by the arguments passed
385 to the program.
386 .h "Redirection"
387 Input/output redirections can be intermixed with the words in a simple
388 command and can be placed following any of the other commands.  When
389 redirection occurs, the shell saves the old values of the file descriptors
390 and restores them when the command completes.  The ``<'', ``>'', and ``>>''
391 redirections open a file for input, output, and appending, respectively.
392 The ``<&digit'' and ``>&digit'' makes the input or output a duplicate
393 of the file descriptor numbered by the digit.  If a minus sign is used
394 in place of a digit, the standard input or standard output are closed.
396 The ``<<\ word'' redirection
397 takes input from a
398 .I here
399 document.
400 As the shell encounters ``<<'' redirections, it collects them.  The
401 next time it encounters an unescaped newline, it reads the documents
402 in turn.  The word following the ``<<'' specifies the contents of the
403 line that terminates the document.  If none of the quoting methods
404 ('', "", or \e) are used to enter the word, then the document is treated
405 like a word inside double quotes:  ``$'' and backquote are expanded
406 and backslash can be used to escape these and to continue long lines.
407 The word cannot contain any variable or command substitutions, and
408 its length (after quoting) must be in the range of 1 to 79 characters.
409 If ``<<-'' is used in place of ``<<'', then leading tabs are deleted
410 from the lines of the document.  (This is to allow you do indent shell
411 procedures containing here documents in a natural fashion.)
413 Any of the preceding redirection operators may be preceded by a single
414 digit specifying the file descriptor to be redirected.  There cannot
415 be any white space between the digit and the redirection operator.
416 .h "Path Search"
417 When locating a command, the shell first looks to see if it has a
418 shell function by that name.  Then, if PATH does not contain an
419 entry for "%builtin", it looks for a builtin command by that name.
420 Finally, it searches each entry in PATH in turn for the command.
422 The value of the PATH variable should be a series of entries separated
423 by colons.
424 Each entry consists of a directory name, or a directory name followed
425 by a flag beginning with a percent sign.
426 The current directory should be indicated by an empty directory name.
428 If no percent sign is present, then the entry causes the shell to
429 search for the command in the specified directory.  If the flag is
430 ``%builtin'' then the list of shell builtin commands is searched.
431 If the flag is ``%func'' then the directory is searched for a file which
432 is read as input to the shell.  This file should define a function
433 whose name is the name of the command being searched for.
435 Command names containing a slash are simply executed without performing
436 any of the above searches.
437 .h "The Environment"
438 The environment of a command is a set of name/value pairs.  When the
439 shell is invoked, it reads these names and values, sets the shell
440 variables with these names to the corresponding values, and marks
441 the variables as exported.  The
442 .I export
443 command can be used to mark additional variables as exported.
445 The environment of a command is constructed by constructing name/value
446 pairs from all the exported shell variables, and then modifying this
447 set by the assignments which precede the command, if any.
448 .h "Expansion"
449 The process of evaluating words when a shell procedure is executed is
450 called
451 .IR expansion .
452 Expansion consists of four steps:  variable substitution, command
453 substitution, word splitting, and file name generation.  If a word
454 is the expression following the word
455 .B case
456 in a case statement, the file name
457 which follows a redirection symbol, or an assignment to the environment
458 of a command, then the word cannot be split into multiple words.  In
459 these cases, the last two steps of the expansion process are omitted.
460 .h "Variable Substitution"
461 To be written.
462 .h "Command Substitution"
463 .I Ash
464 accepts two syntaxes for command substitution:
466 `\fIlist\fR`
470 $(\fIlist\fR)
472 Either of these may be included in a word.
473 During the command substitution process, the command (syntactly a
474 .IR list )
475 will be executed and anything that the command writes to the standard
476 output will be captured by the shell.  The final newline (if any) of
477 the output will be deleted; the rest of the output will be substituted
478 for the command in the word.
479 .h "Word Splitting"
480 When the value of a variable or the output of a command is substituted,
481 the resulting text is subject to word splitting, unless the dollar sign
482 introducing the variable or backquotes containing the text were enclosed
483 in double quotes.  In addition, ``$@'' is subject to a special type of
484 splitting, even in the presence of double quotes.
486 Ash uses two different splitting algorithms.  The normal approach, which
487 is intended for splitting text separated by which space, is used if the
488 first character of the shell variable IFS is a space.  Otherwise an alternative
489 experimental algorithm, which is useful for splitting (possibly empty)
490 fields separated by a separator character, is used.
492 When performing splitting, the shell scans the replacement text looking
493 for a character (when IFS does not begin with a space) or a sequence of
494 characters (when IFS does begin with a space), deletes the character or
495 sequence of characters, and spits the word into two strings at that
496 point.  When IFS begins with a space, the shell deletes either of the
497 strings if they are null.  As a special case, if the word containing
498 the replacement text is the null string, the word is deleted.
500 The variable ``$@'' is special in two ways.  First, splitting takes
501 place between the positional parameters, even if the text is enclosed
502 in double quotes.  Second, if the word containing the replacement
503 text is the null string and there are no positional parameters, then
504 the word is deleted.  The result of these rules is that "$@" is
505 equivalent to "$1" "$2" ... "$\fIn\fR", where \fIn\fR is the number of
506 positional parameters.  (Note that this differs from the System V shell.
507 The System V documentation claims that "$@" behaves this way; in fact
508 on the System V shell "$@" is equivalent to "" when there are no
509 positional paramteters.)
510 .h "File Name Generation"
511 Unless the
512 .B -f
513 flag is set, file name generation is performed after word splitting is
514 complete.  Each word is viewed as a series of patterns, separated by
515 slashes.  The process of expansion replaces the word with the names of
516 all existing files whose names can be formed by replacing each pattern
517 with a string that matches the specified pattern.  There are two
518 restrictions on this:  first, a pattern cannot match a string containing
519 a slash, and second, a pattern cannot match a string starting with a
520 period unless the first character of the pattern is a period.
522 If a word fails to match any files and the
523 .B -z
524 flag is not set, then the word will be left unchanged (except that the
525 meta-characters will be converted to normal characters).  If the
526 .B -z
527 flag is set, then the word is only left unchanged if none
528 of the patterns contain a character that can match anything besides
529 itself.  Otherwise the
530 .B -z
531 flag forces the word to be replaced with the names of the files that it
532 matches, even if there are zero names.
533 .h "Patterns"
535 .I pattern
536 consists of normal characters, which match themselves, and meta-characters.
537 The meta-characters are ``!'', ``*'', ``?'', and ``[''.  These characters lose
538 there special meanings if they are quoted.  When command or variable
539 substitution is performed and the dollar sign or back quotes are not
540 double quoted, the value of the variable or the output of the command
541 is scanned for these characters and they are turned into meta-characters.
543 Two exclamation points at the beginning of a pattern function as a ``not''
544 operator, causing the pattern to match any string that the remainder of
545 the pattern does
546 .I not
547 match.  Other occurances of exclamation points in a pattern match
548 exclamation points.  Two exclamation points are required rather than one
549 to decrease the incompatibility with the System V shell (which does not
550 treat exclamation points specially).
552 An asterisk (``*'') matches any string of characters.
553 A question mark matches any single character.
554 A left bracket (``['') introduces a character class.  The end of the
555 character class is indicated by a ``]''; if the ``]'' is missing then
556 the ``['' matches a ``['' rather than introducing a character class.
557 A character class matches any of the characters between the square
558 brackets.  A range of characters may be specified using a minus sign.
559 The character class may be complemented by making an exclamation point
560 the first character of the character class.
562 To include a ``]'' in a character class, make it the first character listed
563 (after the ``!'', if any).
564 To include a minus sign, make it the first or last character listed.
565 .h "The /u Directory"
566 By convention, the name ``/u/user'' refers to the home directory of the
567 specified user.  There are good reasons why this feature should be supported
568 by the file system (using a feature such as symbolic links) rather than
569 by the shell, but
570 .I ash
571 is capable of performing this mapping if the file system doesn't.
572 If the mapping is done by
573 .IR ash ,
574 setting the
575 .B -f
576 flag will turn it off.
577 .h "Character Set"
578 .I Ash
579 silently discards nul characters.  Any other character will be handled
580 correctly by
581 .IR ash ,
582 including characters with the high order bit set.
583 .h "Job Names and Job Control"
584 The term
585 .I job
586 refers to a process created by a shell command, or in the case of a
587 pipeline, to the set of processes in the pipeline.  The ways to refer
588 to a job are:
590 %\fInumber\fR
591 %\fIstring\fR
593 \fIprocess_id\fR
595 The first form identifies a job by job number.
596 When a command is run,
597 .I ash
598 assigns it a job number
599 (the lowest unused number is assigned).
600 The second form identifies a job by giving a prefix of the command used
601 to create the job.  The prefix must be unique.  If there is only one job,
602 then the null prefix will identify the job, so you can refer to the job
603 by writing ``%''.  The third form refers to the \fIcurrent job\fR.  The
604 current job is the last job to be stopped while it was in the foreground.
605 (See the next paragraph.)  The last form identifies a job by giving the
606 process id of the last process in the job.
608 If the operating system that
609 .I ash
610 is running on supports job control,
611 .I ash
612 will allow you to use it.
613 In this case, typing the suspend character (typically ^Z) while running
614 a command will return you to
615 .I ash
616 and will make the suspended command the current job.  You can then continue
617 the job in the background by typing
618 .IR bg ,
619 or you can continue it in the foreground by typing
620 .IR fg .
621 .h "Atty"
622 If the shell variable ATTY is set, and the shell variable TERM is not
623 set to ``emacs'', then \fIash\fR generates appropriate escape sequences
624 to talk to
625 .IR atty (1).
626 .h "Exit Statuses"
627 By tradition, an exit status of zero means that a command has succeeded
628 and a nonzero exit status indicates that the command failed.  This is
629 better than no convention at all, but in practice it is extremely useful
630 to allow commands that succeed to use the exit status to return information
631 to the caller.  A variety of better conventions have been proposed, but
632 none of them has met with universal approval.  The convention used by
633 \fIash\fR and all the programs included in the \fIash\fR distribution is
634 as follows:
635 .ta 1i 2i
637         0       Success.
638         1       Alternate success.
639         2       Failure.
640         129-... Command terminated by a signal.
642 The \fIalternate success\fR return is used by commands to indicate various
643 conditions which are not errors but which can, with a little imagination,
644 be conceived of as less successful than plain success.  For example,
645 .I test
646 returns 1 when the tested condition is false and
647 .I getopts
648 returns 1 when there are no more options.
649 Because this convention is not used universally, the
650 .B -e
651 option of
652 .I ash
653 causes the shell to exit when a command returns 1 even though that
654 contradicts the convention described here.
656 When a command is terminated by a signal, the uses 128 plus the signal
657 number as the exit code for the command.
658 .h "Builtin Commands"
659 This concluding section lists the builtin commands which are builtin
660 because they need to perform some operation that can't be performed by a
661 separate process.  In addition to these, there are several other commands
662 .RI ( catf ,
663 .IR echo ,
664 .IR expr ,
665 .IR line ,
666 .IR nlecho ,
667 .IR test ,
668 .RI  `` : '',
670 .IR true )
671 which can optionally be compiled into the shell.  The builtin
672 commands described below that accept options use the System V Release 2
673 .IR getopt (3)
674 syntax.
676 .b bg
678 .I job
679 ] ...
681 Continue the specified jobs (or the current job if no jobs are given)
682 in the background.
683 This command is only available on systems with Bekeley job control.
684 .b command
685 .IR "command arg" ...
687 Execute the specified builtin command.  (This is useful when you have a
688 shell function with the same name as a builtin command.)
689 .b cd
691 .I directory
694 Switch to the specified directory (default $HOME).
695 If the an entry for CDPATH appears in the environment of the cd command
696 or the shell variable CDPATH is set and the directory name does not
697 begin with a slash, then the directories listed in CDPATH will be
698 searched for the specified directory.  The format of CDPATH is the
699 same as that of PATH.
700 In an interactive shell, the cd command will print out the name of the
701 directory that it actually switched to if this is different from the
702 name that the user gave.  These may be different either because
703 the CDPATH mechanism was used or because a symbolic link was crossed.
704 .\" .b ".\fI\h'0.1i'file"
705 .\" Cawf can't do \h'0.1i'
706 .b .
707 .I file
709 The commands in the specified file are read and executed by the shell.
710 A path search is not done to find the file because the directories in
711 PATH generally contain files that are intended to be executed, not read.
712 .b eval
713 .IR string ...
715 The strings are parsed as shell commands and executed.
716 (This differs from the System V shell, which concatenates the arguments
717 (separated by spaces) and parses the result as a single command.)
718 .b exec
720 .IR "command arg" ...
723 Unless
724 .I command
725 is omitted,
726 the shell process is replaced with the specified program (which must be a real
727 program, not a shell builtin or function).
728 Any redirections on the exec command are marked as permanent, so that they
729 are not undone when the exec command finishes.
730 If the command is not found, the exec command causes the shell to exit.
731 .b exit
733 .I exitstatus
736 Terminate the shell process.  If
737 .I exitstatus
738 is given it is used as the
739 exit status of the shell; otherwise the exit status of the preceding
740 command is used.
741 .b export
742 .IR name ...
744 The specified names are exported so that they will appear in the environment
745 of subsequent commands.  The only way to un-export a variable is to unset it.
746 .I Ash
747 allows the value of a variable to be set at the same time it is exported
748 by writing
750 \fBexport\fR name=value
752 With no arguments the export command lists the names of all exported variables.
753 .b fg
755 .I job
758 Move the specified job or the current job to the foreground.
759 This command is only available on systems with Bekeley job control.
760 .b getopts
761 .I optstring
762 .I var
764 The System V
765 .I getopts
766 command.
767 .b hash
768 .B -rv
769 .IR command ...
771 The shell maintains a hash table which remembers the locations of
772 commands.  With no arguments whatsoever, the hash command prints
773 out the contents of this table.  Entries which have not been looked
774 at since the last
775 .I cd
776 command are marked with an asterisk; it is possible for these entries
777 to be invalid.
779 With arguments, the hash command removes the specified commands from
780 the hash table (unless they are functions) and then locates them.
781 With the
782 .B -v
783 option,
784 .I hash
785 prints the locations of the commands as it finds them.
787 .B -r
788 option causes the
789 .I hash
790 command to delete all the entries in the hash table except for
791 functions.
792 .b jobid
794 .I job
797 Print the process id's of the processes in the job.  If the job argument
798 is omitted, use the current job.
799 .b jobs
801 This command lists out all the background processes which are children
802 of the current shell process.
803 .b pwd
805 Print the current directory.  The builtin command may differ from the
806 program of the same name because the builtin command remembers what
807 the current directory is rather than recomputing it each time.  This
808 makes it faster.  However, if the current directory is renamed, the
809 builtin version of pwd will continue to print the old name for the
810 directory.
811 .b read
813 .B -p
814 .I prompt
817 .B -e
819 .IR variable ...
821 The prompt is printed if the
822 .B -p
823 option is specified and the standard input is a terminal.  Then a
824 line is read from the standard input.  The trailing newline is deleted
825 from the line and the line is split as described
826 in the section on word splitting above, and the pieces are assigned to
827 the variables in order.  If there are more pieces than variables, the
828 remaining pieces (along with the characters in IFS that separated them)
829 are assigned to the last variable.  If there are more variables than
830 pieces, the remaining variables are assigned the null string.
833 .B -e
834 option causes any backslashes in the input to be treated specially.
835 If a backslash is followed by a newline, the backslash and the newline
836 will be deleted.  If a backslash is followed by any other character,
837 the backslash will be deleted and the following character will be treated
838 as though it were not in IFS, even if it is.
839 .b readonly
840 .IR name ...
842 The specified names are marked as read only, so that they cannot be
843 subsequently modified or unset.
844 .I Ash
845 allows the value of a variable to be set at the same time it is marked
846 read only by writing
848 \fBreadonly\fR name=value
850 With no arguments the readonly command lists the names of all
851 read only variables.
852 .b set
855 .BI - options
857 .BI + options
859 .B --
862 .IR arg ...
865 .I set
866 command performs three different functions.
868 With no arguments, it lists the values of all shell variables.
870 If options are given, it sets the specified option flags, or clears
871 them if the option flags are introduced with a
872 .B +
873 rather than a
874 .BR - .
875 Only the first argument to
876 .I set
877 can contain options.
878 The possible options are:
880 .ta 0.4i
881 .in +0.4i
882 .ti -0.4i
883 \fB-e\fR        Causes the shell to exit when a command terminates with
884 a nonzero exit status, except when the exit status of the command is
885 explicitly tested.  The exit status of a command is considered to be
886 explicitly tested if the command is used to control an
887 .IR if ,
888 .IR elif ,
889 .IR while ,
891 .IR until ;
892 or if the command is the left hand operand of an ``&&'' or ``||''
893 operator.
895 .ti -0.4i
896 \fB-f\fR        Turn off file name generation.
898 .ti -0.4i
899 \fB-I\fR        Cause the shell to ignore end of file conditions.
900 (This doesn't apply when the shell a script sourced using the ``.''
901 command.)  The shell will in fact exit if it gets 50 eof's in a
902 row.
904 .ti -0.4i
905 \fB-i\fR        Make the shell interactive.  This causes the shell to
906 prompt for input, to trap interrupts, to ignore quit and terminate signals,
907 and to return to the main command loop rather than exiting on error.
909 .ti -0.4i
910 \fB-j\fR        Turns on Berkeley job control, on systems that support it.
911 When the shell starts up, the
912 .B -j
913 is set by default if the
914 .B -i
915 flag is set.
917 .ti -0.4i
918 \fB-n\fR        Causes the shell to read commands but not execute them.
919 (This is marginally useful for checking the syntax of scripts.)
921 .ti -0.4i
922 \fB-s\fR        If this flag is set when the shell starts up, the shell
923 reads commands from its standard input.  The shell doesn't examine the
924 value of this flag any other time.
926 .ti -0.4i
927 \fB-x\fR        If this flag is set, the shell will print out each
928 command before executing it.
930 .ti -0.4i
931 \fB-z\fR        If this flag is set, the file name generation process
932 may generate zero files.  If it is not set, then a pattern which does
933 not match any files will be replaced by a quoted version of the pattern.
934 .in -0.4i
936 The third use of the set command is to set the values of the shell's
937 positional parameters to the specified
938 .IR args .
939 To change the positional parameters without changing any options,
940 use ``\fB--\fR'' as the first argument to
941 .IR set .
942 If no args are present, the set command will leave the value of the
943 positional parameters unchanged, so to set the positional parameters
944 to set of values that may be empty, execute the command
946 shift $#
948 first to clear out the old values of the positional parameters.
949 .b setvar
950 .I variable
951 .I value
953 Assigns
954 .I value
956 .IR variable .
957 (In general it is better to write
958 .I variable=value
959 rather than using
960 .IR setvar .
961 .I Setvar
962 is intended to be used in functions that assign values to variables whose
963 names are passed as parameters.)
964 .b shift
966 .I n
969 Shift the positional parameters
970 .I n
971 times.
972 A shift sets the value of $1 to the value of $2, the value of $2 to
973 the value of $3, and so on, decreasing the value of $# by one.
974 If there are zero positional parameters, shifting doesn't do anything.
975 .b trap
977 .I action
979 .IR signal ...
981 Cause the shell to parse and execute
982 .I action
983 when any of the specified signals are received.
984 The signals are specified by signal number.
985 .I Action
986 may be null or omitted;
987 the former causes the specified signal to be ignored and the latter
988 causes the default action to be taken.
989 When the shell forks off a subshell, it resets trapped (but not ignored)
990 signals to the default action.
991 The trap command has no effect on signals that were ignored on entry
992 to the shell.
993 .b umask
995 .I mask
998 Set the value of umask (see
999 .IR umask (2))
1000 to the specified octal value.  If the argument is omitted, the umask
1001 value is printed.
1002 .b unset
1003 .IR name ...
1005 The specified variables and functions are unset and unexported.
1006 If a given name corresponds to both a variable and a function, both the
1007 variable and the function are unset.
1008 .b wait
1010 .I job
1013 Wait for the specified job to complete and return the exit status of the
1014 last process in the job.  If the argument is omitted, wait for all jobs
1015 to complete and the return an exit status of zero.
1016 .SH EXAMPLES
1017 The following function redefines the \fIcd\fR command:
1019 cd() {
1020         if command cd "$@"
1021         then    if test -f .enter
1022                 then    . .enter
1023                 else    return 0
1024                 fi
1025         fi
1028 This function causes the file ``.enter'' to be read when you enter a
1029 directory, if it exists.  The \fIcommand\fR command is used to access the
1030 real \fIcd\fR command.  The ``return 0'' ensures that the function will
1031 return an exit status of zero if it successfully changes to a directory
1032 that does not contain a ``.enter'' file.  Redefining existing commands
1033 is not always a good idea, but this example shows that you can do it if
1034 you want to.
1036 The suspend function distributed with
1037 .I ash
1038 looks like
1040 # Copyright (C) 1989 by Kenneth Almquist.  All rights reserved.
1041 # This file is part of ash, which is distributed under the terms
1042 # specified by the Ash General Public License.
1044 suspend() {
1045         local -
1046         set +j
1047         kill -TSTP 0
1050 This turns off job control and then sends a stop signal to the current
1051 process group, which suspends the shell.  (When job control is turned
1052 on, the shell ignores the TSTP signal.)  Job control will be turned back
1053 on when the function returns because ``-'' is local to the function.
1054 As an example of what \fInot\fR to do, consider an earlier version of
1055 \fIsuspend\fR:
1057 suspend() {
1058         suspend_flag=$-
1059         set +j
1060         kill -TSTP 0
1061         set -$suspend_flag
1064 There are two problems with this.  First, \fBsuspend_flag\fR is a global
1065 variable rather than a local one, which will cause problems in the
1066 (unlikely) circumstance that the user is using that variable for some
1067 other purpose.  Second, consider what happens if shell received an interrupt
1068 signal after it executes the first \fIset\fR command but before it executes
1069 the second one.  The interrupt signal will abort the shell function, so
1070 that the second \fIset\fR command will never be executed and job control
1071 will be left off.  The first version of \fIsuspend\fR avoids this problem
1072 by turning job control off only in a local copy of the shell options.  The
1073 local copy of the shell options is discarded when the function is terminated,
1074 no matter how it is terminated.
1075 .SH HINTS
1076 Shell variables can be used to provide abbreviations for things which
1077 you type frequently.  For example, I set
1079 .\" \h'1i'export h=$HOME
1080 .\" Cawf can't do \h'1i'
1081 .in +1i
1082 export h=$HOME
1083 .in -1i
1085 in my .profile so that I can type the name of my home directory simply
1086 by typing ``$h''.
1088 When writing shell procedures, try not to make assumptions about what is
1089 imported from the environment.  Explicitly unset or initialize all variables,
1090 rather than assuming they will be unset.  If you use cd, it is a good idea
1091 to unset CDPATH.
1093 People sometimes use ``<&-'' or ``>&-'' to provide no input to a command
1094 or to discard the output of a command.  A better way to do this is
1095 to redirect the input or output of the command to
1096 .BR /dev/null .
1098 Word splitting and file name generation are performed by default,
1099 and you have to explicitly use double quotes to suppress it.  This is
1100 backwards, but you can learn to live with it.  Just get in the habit of
1101 writing double quotes around variable and command substitutions, and
1102 omit them only when you really want word splitting and file name generation.
1103 If you want word splitting but not file name generation, use the
1104 .B -f
1105 option.
1106 .SH AUTHORS
1107 Kenneth Almquist
1108 .SH "SEE ALSO"
1109 echo(1), expr(1), line(1), pwd(1), true(1).
1110 .SH BUGS
1111 When command substitution occurs inside a here document, the commands inside
1112 the here document are run with their standard input closed.  For example,
1113 the following will not work because the standard input of the
1114 .I line
1115 command will be closed when the command is run:
1117 cat <<-!
1118 Line 1: $(line)
1119 Line 2: $(line)
1123 Unsetting a function which is currently being executed may cause strange
1124 behavior.
1126 The shell syntax allows a here document to be terminated by an end of file
1127 as well as by a line containing the terminator word which follows the ``<<''.
1128 What this means is that if you mistype the terminator line, the shell
1129 will silently swallow up the rest of your shell script and stick it
1130 in the here document.
1131 .\" several minor typos corrected -- ASW 2005-01-15