home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume1 / bourne / part4 < prev    next >
Internet Message Format  |  1986-11-30  |  47KB

  1. Date: Fri, 7 Jun 85 14:03:22 edt
  2. From: Arnold Robbins <gatech!arnold>
  3. Subject: Bourne shell history + tilde + job control + more (Part 4 of 9)
  4. Newsgroups: mod.sources
  5.  
  6. This is part 4 of 9.  It contains the diffs for the BSD Bourne shell's
  7. man page, sh.1.
  8.  
  9. Arnold Robbins
  10. arnold@gatech.{UUCP, CSNET}
  11. ------------------- tear here --------------------
  12. *** ../orig.u/sh.1    Wed May 15 17:25:17 1985
  13. --- sh.1    Wed Jun  5 11:10:39 1985
  14. ***************
  15. *** 1,4
  16. ! .TH SH 1 "7 February 1983"
  17.   .SH NAME
  18.   sh, for, case, if, while, \fB:\fP, \fB.\fP, break, continue, cd, eval, exec, exit, export, login, read, readonly, set, shift, times, trap, umask, wait \- command language
  19.   .SH SYNOPSIS
  20.  
  21. --- 1,4 -----
  22. ! .TH SH 1 "BRL + GT Modifications"
  23.   .SH NAME
  24.   sh \- shell, the standard command programming language
  25.   .SH SYNOPSIS
  26. ***************
  27. *** 1,6
  28.   .TH SH 1 "7 February 1983"
  29.   .SH NAME
  30. ! sh, for, case, if, while, \fB:\fP, \fB.\fP, break, continue, cd, eval, exec, exit, export, login, read, readonly, set, shift, times, trap, umask, wait \- command language
  31.   .SH SYNOPSIS
  32.   .B sh
  33.   [
  34.  
  35. --- 1,6 -----
  36.   .TH SH 1 "BRL + GT Modifications"
  37.   .SH NAME
  38. ! sh \- shell, the standard command programming language
  39.   .SH SYNOPSIS
  40.   .B sh
  41.   [
  42. ***************
  43. *** 4,10
  44.   .SH SYNOPSIS
  45.   .B sh
  46.   [
  47. ! .B \-ceiknrstuvx
  48.   ] [ arg ] ...
  49.   .ds OK [\|
  50.   .ds CK \|]
  51.  
  52. --- 4,10 -----
  53.   .SH SYNOPSIS
  54.   .B sh
  55.   [
  56. ! .B \-ceiknrqstuvxEHIJ
  57.   ] [ arg ] ...
  58.   .ds OK [\|
  59.   .ds CK \|]
  60. ***************
  61. *** 16,22
  62.   .I Sh
  63.   is a command programming language that executes commands read from a terminal
  64.   or a file.  See
  65. ! .B invocation
  66.   for the meaning of arguments to the shell.
  67.   .PP
  68.   .B Commands.
  69.  
  70. --- 16,23 -----
  71.   .I Sh
  72.   is a command programming language that executes commands read from a terminal
  73.   or a file.  See
  74. ! .I Invocation
  75. ! below
  76.   for the meaning of arguments to the shell.
  77.   .SS Commands.
  78.   A
  79. ***************
  80. *** 18,26
  81.   or a file.  See
  82.   .B invocation
  83.   for the meaning of arguments to the shell.
  84. ! .PP
  85. ! .B Commands.
  86. ! .br
  87.   A
  88.   .I simple-command
  89.   is a sequence of non blank
  90.  
  91. --- 19,25 -----
  92.   .I Invocation
  93.   below
  94.   for the meaning of arguments to the shell.
  95. ! .SS Commands.
  96.   A
  97.   .I simple-command
  98.   is a sequence of non blank
  99. ***************
  100. *** 37,43
  101.   The
  102.   .I value
  103.   of a simple-command is its exit status
  104. ! if it terminates normally or 200+\fIstatus\fP if it terminates abnormally (see
  105.   .IR sigvec (2)
  106.   for a list of status values).
  107.   .LP
  108.  
  109. --- 36,42 -----
  110.   The
  111.   .I value
  112.   of a simple-command is its exit status
  113. ! if it terminates normally or (octal) 200+\fIstatus\fP if it terminates abnormally (see
  114.   .IR sigvec (2)
  115.   for a list of status values).
  116.   .PP
  117. ***************
  118. *** 40,46
  119.   if it terminates normally or 200+\fIstatus\fP if it terminates abnormally (see
  120.   .IR sigvec (2)
  121.   for a list of status values).
  122. ! .LP
  123.   A
  124.   .I pipeline
  125.   is a sequence of one or more
  126.  
  127. --- 39,45 -----
  128.   if it terminates normally or (octal) 200+\fIstatus\fP if it terminates abnormally (see
  129.   .IR sigvec (2)
  130.   for a list of status values).
  131. ! .PP
  132.   A
  133.   .I pipeline
  134.   is a sequence of one or more
  135. ***************
  136. *** 46,52
  137.   is a sequence of one or more
  138.   .I commands
  139.   separated by
  140. ! .B \(or.
  141.   The standard output of each command but the last is connected by a
  142.   .IR pipe (2)
  143.   to the standard input of the next command.
  144.  
  145. --- 45,52 -----
  146.   is a sequence of one or more
  147.   .I commands
  148.   separated by
  149. ! .B \(or
  150. ! (or, for historical compatibility, by \fB^\fP).
  151.   The standard output of each command but the last is connected by a
  152.   .IR pipe (2)
  153.   to the standard input of the next command.
  154. ***************
  155. *** 52,58
  156.   to the standard input of the next command.
  157.   Each command is run as a separate process;
  158.   the shell waits for the last command to terminate.
  159. ! .LP
  160.   A
  161.   .I list
  162.   is a sequence of one or more
  163.  
  164. --- 52,58 -----
  165.   to the standard input of the next command.
  166.   Each command is run as a separate process;
  167.   the shell waits for the last command to terminate.
  168. ! .PP
  169.   A
  170.   .I list
  171.   is a sequence of one or more
  172. ***************
  173. *** 60,66
  174.   separated by
  175.   .BR ; ,
  176.   .BR & ,
  177. ! .B &&
  178.   or
  179.   .B \(or\|\(or
  180.   and optionally terminated by
  181.  
  182. --- 60,66 -----
  183.   separated by
  184.   .BR ; ,
  185.   .BR & ,
  186. ! .B && ,
  187.   or
  188.   .B \(or\|\(or
  189.   and optionally terminated by
  190. ***************
  191. *** 67,72
  192.   .B ;
  193.   or
  194.   .BR & .
  195.   .B ;
  196.   and
  197.   .B &
  198.  
  199. --- 67,73 -----
  200.   .B ;
  201.   or
  202.   .BR & .
  203. + Of these four symbols,
  204.   .B ;
  205.   and
  206.   .B &
  207. ***************
  208. *** 90,96
  209.   returns a zero (non zero) value.  Newlines may appear in a
  210.   .I list,
  211.   instead of semicolons, to delimit commands.
  212. ! .LP
  213.   A
  214.   .I command
  215.   is either a simple-command or one of the following.
  216.  
  217. --- 91,97 -----
  218.   returns a zero (non zero) value.  Newlines may appear in a
  219.   .I list,
  220.   instead of semicolons, to delimit commands.
  221. ! .PP
  222.   A
  223.   .I command
  224.   is either a simple-command or one of the following.
  225. ***************
  226. *** 143,148
  227.   .B else
  228.   .I list
  229.   is executed.
  230.   .TP
  231.   \fBwhile \fIlist\fR \*(OK\fBdo \fIlist\fR\*(CK \fBdone\fR
  232.   A
  233.  
  234. --- 144,158 -----
  235.   .B else
  236.   .I list
  237.   is executed.
  238. + If no
  239. + .B else
  240. + .I list
  241. + or
  242. + .B then
  243. + .I list
  244. + is executed, then the
  245. + .B if
  246. + command returns a zero exit status.
  247.   .TP
  248.   \fBwhile \fIlist\fR \*(OK\fBdo \fIlist\fR\*(CK \fBdone\fR
  249.   A
  250. ***************
  251. *** 171,177
  252.   .BI { " list " }
  253.   .I list
  254.   is simply executed.
  255. ! .LP
  256.   The following words are only recognized as the first word of a command
  257.   and when not quoted.
  258.   .IP
  259.  
  260. --- 181,187 -----
  261.   .BI { " list " }
  262.   .I list
  263.   is simply executed.
  264. ! .PP
  265.   The following words are only recognized as the first word of a command
  266.   and when not quoted.
  267.   .IP
  268. ***************
  269. *** 177,185
  270.   .IP
  271.   .B
  272.   if then else elif fi case in esac for while until do done { }
  273. ! .PP
  274. ! .B Command substitution.
  275. ! .br
  276.   The standard output from a command enclosed in a pair of back quotes 
  277.   .RB ( \`\|\` )
  278.   may be used as part or all of a word; trailing newlines are removed.
  279.  
  280. --- 187,198 -----
  281.   .IP
  282.   .B
  283.   if then else elif fi case in esac for while until do done { }
  284. ! .SS Comments
  285. ! A word beginning with
  286. ! .B #
  287. ! causes that word and all the following characters up to a new-line
  288. ! to be ignored.
  289. ! .SS Command substitution.
  290.   The standard output from a command enclosed in a pair of back quotes 
  291.   .RB ( \`\|\` )
  292.   may be used as part or all of a word; trailing newlines are removed.
  293. ***************
  294. *** 183,191
  295.   The standard output from a command enclosed in a pair of back quotes 
  296.   .RB ( \`\|\` )
  297.   may be used as part or all of a word; trailing newlines are removed.
  298. ! .PP
  299. ! .B Parameter substitution.
  300. ! .br
  301.   The character
  302.   .B $
  303.   is used to introduce substitutable parameters.
  304.  
  305. --- 196,202 -----
  306.   The standard output from a command enclosed in a pair of back quotes 
  307.   .RB ( \`\|\` )
  308.   may be used as part or all of a word; trailing newlines are removed.
  309. ! .SS Parameter substitution.
  310.   The character
  311.   .B $
  312.   is used to introduce substitutable parameters.
  313. ***************
  314. *** 194,200
  315.   Variables may be set by writing
  316.   .IP
  317.   .IB name = value
  318. ! [
  319.   .IB name = value
  320.   ] ...
  321.   .TP
  322.  
  323. --- 205,211 -----
  324.   Variables may be set by writing
  325.   .IP
  326.   .IB name = value
  327. ! \*(OK
  328.   .IB name = value
  329.   \*(CK ...
  330.   .PP
  331. ***************
  332. *** 196,202
  333.   .IB name = value
  334.   [
  335.   .IB name = value
  336. ! ] ...
  337.   .TP
  338.   $\fB\|{\fIparameter\fB\|}\fR
  339.   A
  340.  
  341. --- 207,216 -----
  342.   .IB name = value
  343.   \*(OK
  344.   .IB name = value
  345. ! \*(CK ...
  346. ! .PP
  347. ! Pattern matching is not performed on
  348. ! .IR value .
  349.   .TP
  350.   $\fB\|{\fIparameter\fB\|}\fR
  351.   A
  352. ***************
  353. *** 205,211
  354.   .IR name ),
  355.   a digit, or any of the characters
  356.   .B
  357. ! * @ # ? \- $ !\|.
  358.   The value, if any, of the parameter is substituted.
  359.   The braces are required only when
  360.   .I parameter
  361.  
  362. --- 219,225 -----
  363.   .IR name ),
  364.   a digit, or any of the characters
  365.   .B
  366. ! * @ # ? \- $ + !\|.
  367.   The value, if any, of the parameter is substituted.
  368.   The braces are required only when
  369.   .I parameter
  370. ***************
  371. *** 210,216
  372.   The braces are required only when
  373.   .I parameter
  374.   is followed by a letter, digit, or underscore
  375. ! that is not to be interpreted as part of its name.  If
  376.   .I parameter
  377.   is a digit, it is a positional parameter.  If
  378.   .I parameter
  379.  
  380. --- 224,234 -----
  381.   The braces are required only when
  382.   .I parameter
  383.   is followed by a letter, digit, or underscore
  384. ! that is not to be interpreted as part of its name.
  385. ! A
  386. ! .I name
  387. ! must begin with a letter or underscore.
  388. ! If
  389.   .I parameter
  390.   is a digit, it is a positional parameter.  If
  391.   .I parameter
  392. ***************
  393. *** 253,259
  394.   is set, substitute
  395.   .I word;
  396.   otherwise substitute nothing.
  397. ! .LP
  398.   In the above
  399.   .I word
  400.   is not evaluated unless it is to be used as the substituted string.
  401.  
  402. --- 271,277 -----
  403.   is set, substitute
  404.   .I word;
  405.   otherwise substitute nothing.
  406. ! .PP
  407.   In the above
  408.   .I word
  409.   is not evaluated unless it is to be used as the substituted string.
  410. ***************
  411. *** 282,287
  412.   .B $
  413.   The process number of this shell.
  414.   .TP
  415.   .B !
  416.   The process number of the last background command invoked.
  417.   .PD
  418.  
  419. --- 300,317 -----
  420.   .B $
  421.   The process number of this shell.
  422.   .TP
  423. + .B +
  424. + The process number of the partent of this shell.  In particular,
  425. + the value of
  426. + .B $+
  427. + will track the value of the
  428. + .IR getppid (2)
  429. + system call.  I.e. if
  430. + .I init
  431. + should inherit this shell,
  432. + .B $+
  433. + will become 1.
  434. + .TP
  435.   .B !
  436.   The process number of the last background command invoked.
  437.   .PD
  438. ***************
  439. *** 286,292
  440.   The process number of the last background command invoked.
  441.   .PD
  442.   .RE
  443. ! .LP
  444.   The following
  445.   .I parameters
  446.   are used but not set by the shell.
  447.  
  448. --- 316,322 -----
  449.   The process number of the last background command invoked.
  450.   .PD
  451.   .RE
  452. ! .PP
  453.   The following
  454.   .I parameters
  455.   are used but not set by the shell.
  456. ***************
  457. *** 302,308
  458.   .B
  459.   .SM PATH
  460.   The search path for commands (see
  461. ! .BR execution ).
  462.   .TP
  463.   .B
  464.   .SM MAIL
  465.  
  466. --- 332,339 -----
  467.   .B
  468.   .SM PATH
  469.   The search path for commands (see
  470. ! .I Execution
  471. ! below).
  472.   .TP
  473.   .B
  474.   .SM MAIL
  475. ***************
  476. *** 325,330
  477.   .BR tab ,
  478.   and
  479.   .BR newline .
  480.   .PD
  481.   .RE
  482.   .PP
  483.  
  484. --- 356,366 -----
  485.   .BR tab ,
  486.   and
  487.   .BR newline .
  488. + .TP
  489. + .B HISTFILE
  490. + The file where command history is saved across login sessions.
  491. + The default value is
  492. + .BR $HOME/.history .
  493.   .PD
  494.   .RE
  495.   .SS Tilde Substitution
  496. ***************
  497. *** 327,332
  498.   .BR newline .
  499.   .PD
  500.   .RE
  501.   .PP
  502.   .B Blank interpretation.
  503.   .br
  504.  
  505. --- 363,375 -----
  506.   .BR $HOME/.history .
  507.   .PD
  508.   .RE
  509. + .SS Tilde Substitution
  510. + An unquoted tilde character
  511. + .RB ( ~ )
  512. + will cause the shell to attempt a tilde substituion.  Tilde substitutions
  513. + are used to automatically determine home directories.  Both the current
  514. + user's home directory, and the home directory of any other user on
  515. + the system may be found.
  516.   .PP
  517.   A
  518.   .B ~
  519. ***************
  520. *** 328,336
  521.   .PD
  522.   .RE
  523.   .PP
  524. ! .B Blank interpretation.
  525. ! .br
  526. ! After parameter and command substitution,
  527.   any results of substitution are scanned for internal field separator
  528.   characters (those found in
  529.   .SM
  530.  
  531. --- 371,588 -----
  532.   user's home directory, and the home directory of any other user on
  533.   the system may be found.
  534.   .PP
  535. ! A
  536. ! .B ~
  537. ! by itself is equivalent to using
  538. ! .BR \s-1$HOME\s+1 .
  539. ! E.g.
  540. ! .B ~/bin
  541. ! is the same as saying
  542. ! .BR \s-1$HOME\s+1/bin .
  543. ! The notation
  544. ! .B ~person
  545. ! will cause the shell to look up
  546. ! .BR person 's
  547. ! home directory in the
  548. ! .B /etc/passwd
  549. ! file, and substitute it in.  For example, if user
  550. ! .BR arnold 's
  551. ! home directory is
  552. ! .BR /user/arnold ,
  553. ! the shell would replace
  554. ! .BR ~arnold/bin
  555. ! with
  556. ! .BR /user/arnold/bin .
  557. ! .PP
  558. ! Tilde substitutions are recognized at the beginning of words, after
  559. ! equal signs (for shell variable assignment), in the middle of single letter
  560. ! flag arguments to commands (e.g. \fBecho \-t~arnold\fP), and after
  561. ! colons inside the
  562. ! .B
  563. ! .SM PATH
  564. ! shell parameter.
  565. ! .PP
  566. ! If
  567. ! .B /etc/passwd
  568. ! cannot be read, or if
  569. ! no user can be found to match the attempted tilde substitution,
  570. ! the text is left unmodified.
  571. ! .SS History Substitution
  572. ! When reading input from an interactive terminal, a
  573. ! .RB `` ! ''
  574. ! character, anywhere on the line,
  575. ! signals the shell that it should attempt
  576. ! to perform a history substitution.
  577. ! A history substitution is a shorthand method which allows the user
  578. ! to recall all or part of a previous command, possibly editing the
  579. ! recalled portion.
  580. ! The recalled (and possibly changed) command line is then placed into
  581. ! the current command line,
  582. ! to be passed on to the rest of the shell for normal processing.
  583. ! A history substitution takes the form:
  584. ! .PP
  585. ! .if t .RS
  586. ! \fB!\fP\^[ \fIstr\fP | \fB?\fIstr\fB?\fR | \fInum\fP ]\c
  587. ! [ \fB\(ga\fInum\fR [ \- [ \fInum\fP ] ]\c
  588. ! { \fB^\fIstr\fB^\fIstr\fB^\fR [\fBg\fP] }
  589. ! .if t .RE
  590. ! .PP
  591. ! A history substitution contains three parts;
  592. ! command selection, argument selection, and editing.
  593. ! .I Command selection
  594. ! chooses what command will be retrieved from the stored
  595. ! history.
  596. ! .I Argument selection
  597. ! chooses which arguments from that command will be extracted.
  598. ! .I Editing
  599. ! allows the user to change spelling or make a substitution.
  600. ! .PP
  601. ! The history substitution is triggered by the
  602. ! .RB `` ! '',
  603. ! and continues until another
  604. ! .RB `` ! ''
  605. ! is encountered, or until
  606. ! something that could not be part of a history substitution is seen.
  607. ! This is so that the
  608. ! history substitution will be properly concatenated with the following text.
  609. ! Whenever a history substitution is encountered and properly performed,
  610. ! the shell echoes the resulting line to the terminal and then executes the
  611. ! command.
  612. ! .PP
  613. ! History substitution occurs inside double quotes and grave accents, but will
  614. ! not occur inside single quotes.  To get a literal
  615. ! .RB `` ! ''
  616. ! character, outside of single quotes, precede it with a
  617. ! .BR \e .
  618. ! The
  619. ! .BR ? ,
  620. ! .BR \(ga ,
  621. ! and
  622. ! .B ^
  623. ! characters are treated specially by the history mechanism only when preceded
  624. ! by a
  625. ! .RB `` ! '',
  626. ! otherwise they have their normal meaning
  627. ! of ``match a single character'',
  628. ! ``enclose a command substitution'',
  629. ! and as a synonym for the \fB\(bv\fP
  630. ! character.
  631. ! .PP
  632. ! The full meaning of the history syntax is as follows:
  633. ! .RS
  634. ! .TP
  635. ! \fB!\fP\^[ \fIstr\fP | \fB?\fIstr\fB?\fR | \fInum\fP ]
  636. ! The first thing in a history substitution is
  637. ! .IR "command selection" .
  638. ! This is used to retrieve a given command line for use, or for further
  639. ! processing.  In a history command selection, \fB!\fIstr\fR
  640. ! will find the most recent command line that started with the
  641. ! characters in
  642. ! .IR str .
  643. ! \fB!?\fIstr\fB?\fR will find the most recent command line that contained
  644. ! .I str
  645. ! anywhere on the line.  It also allows
  646. ! .I str
  647. ! to contain blanks and tabs, whereas the first form does not.
  648. ! \fB!\fInum\fR allows the user to specify the number of a command, according
  649. ! to the output of the
  650. ! .B history
  651. ! command (see the section on special commands, below).
  652. ! .TP
  653. ! \fB\(ga\fInum\fR [ \- [ \fInum\fP ]
  654. ! The next portion of a history substitution is an optional
  655. ! .IR "argument selection" .
  656. ! This chooses which portions of the command are to be kept.
  657. ! History arguments are not exactly the same as the arguments the rest of
  658. ! the shell uses, since history expansion occurs before argument collection.
  659. ! Arguments in this context are blank or tab separated words on the command line.
  660. ! Single or double quoted strings, strings inside grave accents, shell regular
  661. ! expressions, commands in parentheses (which get executed in a subshell),
  662. ! and commands enclosed in braces,
  663. ! are all treated as single arguments for the history mechanism, even though
  664. ! they may have white space in them.
  665. ! .sp
  666. ! Arguments are numbered from zero, starting at the leftmost portion of the
  667. ! line.  In an argument selection, \fB\(ga\fInum\fR specifies that only argument
  668. ! .I num
  669. ! is to be extracted and kept for further processing or use, and the rest
  670. ! of the command line is to be dropped.
  671. ! \fB\(ga\fInum\fB\-\fInum\fR
  672. ! specifies that the arguments from the first
  673. ! .I num
  674. ! to the last
  675. ! .I num
  676. ! are to be kept. In place of any
  677. ! .IR num ,
  678. ! .B $
  679. ! may be specified to obtain the last argument on the line.
  680. ! The form \fB\(ga\-\fInum\fR is a shorthand for \fB\(ga\fP1\fB\-\fInum\fR
  681. ! and
  682. ! \fB\(ga\fInum\fB\-\fR
  683. ! is a short form for
  684. ! \fB\(ga\fInum\fB\-$\fR.
  685. ! Finally, the notation
  686. ! \fB\(ga\-\fP
  687. ! indicates all the arguments.  That is, \fB\(ga\-\fP implies
  688. ! \fB\(ga1\-$\fP.
  689. ! .TP
  690. ! \fB^\fIstr\fB^\fIstr\fB^\fR [\fBg\fP]
  691. ! The last portion of a history substitution is also optional, and is the
  692. ! .I editing
  693. ! phase.  This allows the remaining portions of the retrieved
  694. ! command line to modified, like the substitute command in
  695. ! .IR ed (1),
  696. ! although in a much more limited fashion.
  697. ! In the history mechanism,
  698. ! .I str
  699. ! is not a regular expression, as in
  700. ! .IR ed,
  701. ! but just a simple string.
  702. ! The history mechanism does not recognize
  703. ! either the shell's pattern matching characters or the editor's
  704. ! regular expression characters.
  705. ! Each substitution happens only once on a line, unless a trailing ``g''
  706. ! is appended to the substitution.  In this case, the substitution occurs
  707. ! globally (everywhere) on the line.
  708. ! Substitutions may be strung together,
  709. ! so that more than one can be done at once.
  710. ! The trailing ``g'' may be in either upper or lower case.
  711. ! .RE
  712. ! .PP
  713. ! Some examples of history substitution are given below.
  714. ! Should a history substitution fail, the errant command will
  715. ! .I not
  716. ! be added to the history buffers.
  717. ! .PP
  718. ! The history mechanism recognizes lines that end with unbalanced quotes.
  719. ! When the quotes are balanced on the next line(s), 
  720. ! It will join this line with the one that opened the quotes, keeping the
  721. ! embedded newline(s). So, e.g.,
  722. ! .RS
  723. ! .sp
  724. ! .nf
  725. ! .RB "$ " "echo 'open"
  726. ! .RB "> " "close'"
  727. ! .fi
  728. ! .RE
  729. ! .sp
  730. ! will be saved as one history ``event.''
  731. ! This does
  732. ! .I not
  733. ! extend to other shell constructs, like balancing parentheses across
  734. ! newlines.
  735. ! .PP
  736. ! The history mechanism keeps a maximum of
  737. ! 256
  738. ! stored commands at any one time, and the total text of the
  739. ! stored history may occupy no more than
  740. ! 4096
  741. ! characters.
  742. ! Experience indicates that it is not necessary to store more than this,
  743. ! and the extra history buffers should not make the shell too large for
  744. ! machines with small address spaces (e.g. PDP-11's).
  745. ! .SS Blank Interpretation
  746. ! After history, tilde, parameter and command substitution,
  747.   any results of substitution are scanned for internal field separator
  748.   characters (those found in
  749.   .SM
  750. ***************
  751. *** 340,348
  752.   Implicit null arguments (those resulting from
  753.   .I parameters
  754.   that have no values) are removed.
  755. ! .PP
  756. ! .B File name generation.
  757. ! .br
  758.   Following substitution, each command word is scanned for the characters
  759.   .BR * ,
  760.   .B ?
  761.  
  762. --- 592,598 -----
  763.   Implicit null arguments (those resulting from
  764.   .I parameters
  765.   that have no values) are removed.
  766. ! .SS File name generation.
  767.   Following substitution, each command word is scanned for the characters
  768.   .BR * ,
  769.   .B ?
  770. ***************
  771. *** 370,376
  772.   Matches any one of the characters enclosed.
  773.   A pair of characters separated by
  774.   .B \-
  775. ! matches any character lexically between the pair.
  776.   .PD
  777.   .PP
  778.   .B Quoting.
  779.  
  780. --- 620,636 -----
  781.   Matches any one of the characters enclosed.
  782.   A pair of characters separated by
  783.   .B \-
  784. ! matches any character lexically between the pair, inclusive.
  785. ! If the first character floolowing the opening
  786. ! .RB `` \*(OK ''
  787. ! is a
  788. ! .RB `` ! ''
  789. ! then any character not enclosed is matched.
  790. ! Note that when typing input from the terminal, the
  791. ! .RB `` ! ''
  792. ! should be preceded by a
  793. ! .BR \e ,
  794. ! so that the shell does not attempt to perform a history substitution.
  795.   .PD
  796.   .SS Quoting.
  797.   The following characters have a special meaning to the shell
  798. ***************
  799. *** 372,380
  800.   .B \-
  801.   matches any character lexically between the pair.
  802.   .PD
  803. ! .PP
  804. ! .B Quoting.
  805. ! .br
  806.   The following characters have a special meaning to the shell
  807.   and cause termination of a word unless quoted.
  808.   .LP
  809.  
  810. --- 632,638 -----
  811.   .BR \e ,
  812.   so that the shell does not attempt to perform a history substitution.
  813.   .PD
  814. ! .SS Quoting.
  815.   The following characters have a special meaning to the shell
  816.   and cause termination of a word unless quoted.
  817.   .LP
  818. ***************
  819. *** 389,395
  820.   is ignored.
  821.   All characters enclosed between a pair of quote marks (\fB\'\|\'\fP),
  822.   except a single quote, are quoted.  Inside double quotes (\fB"\|"\fP)
  823. ! parameter and command substitution occurs and
  824.   .B
  825.   \\
  826.   quotes the characters
  827.  
  828. --- 647,653 -----
  829.   is ignored.
  830.   All characters enclosed between a pair of quote marks (\fB\'\|\'\fP),
  831.   except a single quote, are quoted.  Inside double quotes (\fB"\|"\fP)
  832. ! history, parameter, and command substitution occurs and
  833.   .B
  834.   \\
  835.   quotes the characters
  836. ***************
  837. *** 394,400
  838.   \\
  839.   quotes the characters
  840.   .B
  841. ! \\ \' "
  842.   and
  843.   .BR $ \|.
  844.   .LP
  845.  
  846. --- 652,658 -----
  847.   \\
  848.   quotes the characters
  849.   .B
  850. ! \\ \' " !
  851.   and
  852.   .BR $ \|.
  853.   .PP
  854. ***************
  855. *** 397,403
  856.   \\ \' "
  857.   and
  858.   .BR $ \|.
  859. ! .LP
  860.   .B
  861.   "$*"
  862.   is equivalent to
  863.  
  864. --- 655,661 -----
  865.   \\ \' " !
  866.   and
  867.   .BR $ \|.
  868. ! .PP
  869.   .B
  870.   "$*"
  871.   is equivalent to
  872. ***************
  873. *** 412,421
  874.   .SM
  875.   .B
  876.   "$1" "$2" ... .
  877. ! .PP
  878. ! .B Prompting.
  879. ! .br
  880. ! When used interactively, the shell prompts with the value of
  881.   .SM
  882.   PS1
  883.   before reading a command.
  884.  
  885. --- 670,678 -----
  886.   .SM
  887.   .B
  888.   "$1" "$2" ... .
  889. ! .SS Prompting
  890. ! When used interactively,
  891. ! the shell prompts with the value of
  892.   .SM
  893.   .B PS1
  894.   before reading a command.
  895. ***************
  896. *** 417,423
  897.   .br
  898.   When used interactively, the shell prompts with the value of
  899.   .SM
  900. ! PS1
  901.   before reading a command.
  902.   If at any time a newline is typed and further input is needed
  903.   to complete a command, the secondary prompt
  904.  
  905. --- 674,680 -----
  906.   When used interactively,
  907.   the shell prompts with the value of
  908.   .SM
  909. ! .B PS1
  910.   before reading a command.
  911.   If the user is super-user and
  912.   .SM
  913. ***************
  914. *** 419,425
  915.   .SM
  916.   PS1
  917.   before reading a command.
  918. ! If at any time a newline is typed and further input is needed
  919.   to complete a command, the secondary prompt
  920.   .RB ( \s-2$PS2\s0 )
  921.   is issued.
  922.  
  923. --- 676,693 -----
  924.   .SM
  925.   .B PS1
  926.   before reading a command.
  927. ! If the user is super-user and
  928. ! .SM
  929. ! .B PS1
  930. ! is not set to
  931. ! .RB `` "# \|" ''
  932. ! already, the
  933. ! .SM
  934. ! .B PS1
  935. ! prompt is followed by
  936. ! .RB `` "# \|" ''
  937. ! as a BRL-supplied safety reminder.
  938. ! If at any time a new-line is typed and further input is needed
  939.   to complete a command, the secondary prompt
  940.   (i.e., the value of
  941.   .BR \s-1PS2\s+1 )
  942. ***************
  943. *** 421,427
  944.   before reading a command.
  945.   If at any time a newline is typed and further input is needed
  946.   to complete a command, the secondary prompt
  947. ! .RB ( \s-2$PS2\s0 )
  948.   is issued.
  949.   .PP
  950.   .B Input output.
  951.  
  952. --- 689,696 -----
  953.   as a BRL-supplied safety reminder.
  954.   If at any time a new-line is typed and further input is needed
  955.   to complete a command, the secondary prompt
  956. ! (i.e., the value of
  957. ! .BR \s-1PS2\s+1 )
  958.   is issued.
  959.   .PP
  960.   Many people like to have the shell provide them with useful information
  961. ***************
  962. *** 424,431
  963.   .RB ( \s-2$PS2\s0 )
  964.   is issued.
  965.   .PP
  966. ! .B Input output.
  967. ! .br
  968.   Before a command is executed its input and output
  969.   may be redirected using a special notation interpreted by the shell.
  970.   The following may appear anywhere in a simple-command
  971.  
  972. --- 693,752 -----
  973.   .BR \s-1PS2\s+1 )
  974.   is issued.
  975.   .PP
  976. ! Many people like to have the shell provide them with useful information
  977. ! in their prompt.  To accomadate this, the shell will recognize special
  978. ! sequences of characters in the value of
  979. ! .BR PS1 ,
  980. ! and substitute the appropriate information for them.
  981. ! The special sequences and what they signify are:
  982. ! .RS
  983. ! .TP
  984. ! .B %e
  985. ! Place the current event number (as defined by the
  986. ! .B history
  987. ! command) into the prompt.
  988. ! If history evaluation has been turned off (via
  989. ! .BR "set -H" ),
  990. ! no number will be substituted in (i.e. the
  991. ! .B %e
  992. ! will be removed).
  993. ! .TP
  994. ! .B %h
  995. ! Place the machine's host name into the prompt.  The host name is usually
  996. ! the name by which the machine is known to the outside world for electronic
  997. ! mail addressing.
  998. ! .TP
  999. ! .B %l
  1000. ! Place the user's login name into the prompt.
  1001. ! The login name selected is the first entry in the
  1002. ! .B /etc/passwd
  1003. ! file whose
  1004. ! .I uid
  1005. ! matches the value of the
  1006. ! .IR getuid (2)
  1007. ! system call.
  1008. ! This will be a problem on systems where multiple users share the same
  1009. ! user-id number.
  1010. ! .TP
  1011. ! .B %t
  1012. ! Place the current time of day, in the form \s-1HH:MM\s+1 into the prompt.
  1013. ! The time is on a 24 hour clock, i.e. 1:30 in the afternoon will be 13:30.
  1014. ! .TP
  1015. ! .BI % x
  1016. ! Place the character
  1017. ! .I x
  1018. ! into the prompt.
  1019. ! If the user wishes to put a literal
  1020. ! .B %
  1021. ! into the prompt, then
  1022. ! .B PS1
  1023. ! should have
  1024. ! .B %%
  1025. ! in it.
  1026. ! .RE
  1027. ! .PP
  1028. ! Some of these facilities are of more use than others.
  1029. ! .SS Input/Output.
  1030.   Before a command is executed its input and output
  1031.   may be redirected using a special notation interpreted by the shell.
  1032.   The following may appear anywhere in a simple-command
  1033. ***************
  1034. *** 458,464
  1035.   If the file exists, output is appended (by seeking to the end);
  1036.   otherwise the file is created.
  1037.   .TP
  1038. ! \*(LT\*(LT\fI\|word\fP
  1039.   The shell input is read up to a line the same as
  1040.   .IR word ,
  1041.   or end of file.
  1042.  
  1043. --- 779,785 -----
  1044.   If the file exists, output is appended (by seeking to the end);
  1045.   otherwise the file is created.
  1046.   .TP
  1047. ! \*(LT\*(LT\*(OK\fB\-\fP\*(CK\fI\|word\fP
  1048.   The shell input is read up to a line the same as
  1049.   .IR word ,
  1050.   or end of file.
  1051. ***************
  1052. *** 477,482
  1053.   \\ $ \'
  1054.   and the first character of
  1055.   .I word.
  1056.   .TP
  1057.   \*(LT\|&\|\fIdigit\fP
  1058.   The standard input is duplicated from file descriptor
  1059.  
  1060. --- 798,810 -----
  1061.   \\ $ \'
  1062.   and the first character of
  1063.   .I word.
  1064. + If
  1065. + .B \-
  1066. + is appended to \*(LT\|\*(LT, all leading tabs are stripped from
  1067. + .I word
  1068. + and from the document.
  1069. + History substitution is turned off
  1070. + while processing the document.
  1071.   .TP
  1072.   \*(LT\|&\|\fIdigit\fP
  1073.   The standard input is duplicated from file descriptor
  1074. ***************
  1075. *** 488,493
  1076.   \*(LT\|&\|\-
  1077.   The standard input is closed.
  1078.   Similarly for the standard output using \*(GT\|.
  1079.   .PD
  1080.   .LP
  1081.   If one of the above is preceded by a digit, the
  1082.  
  1083. --- 816,829 -----
  1084.   \*(LT\|&\|\-
  1085.   The standard input is closed.
  1086.   Similarly for the standard output using \*(GT\|.
  1087. + .TP
  1088. + \*(LT\|\*(GTword
  1089. + Use file
  1090. + .I word
  1091. + for standard input (file descriptor 0),
  1092. + but open it for reading
  1093. + .I and
  1094. + writing.
  1095.   .PD
  1096.   .LP
  1097.   If one of the above is preceded by a digit, the
  1098. ***************
  1099. *** 498,504
  1100.   .LP
  1101.   creates file descriptor 2 to be a duplicate
  1102.   of file descriptor 1.
  1103. ! .LP
  1104.   If a command is followed by
  1105.   .B &
  1106.   then the default standard input for the command is the empty file
  1107.  
  1108. --- 834,840 -----
  1109.   .LP
  1110.   creates file descriptor 2 to be a duplicate
  1111.   of file descriptor 1.
  1112. ! .PP
  1113.   If a command is followed by
  1114.   .B &
  1115.   then the default standard input for the command is the empty file
  1116. ***************
  1117. *** 506,514
  1118.   Otherwise, the environment for the execution of a command contains the
  1119.   file descriptors of the invoking shell as modified by input
  1120.   output specifications.
  1121. ! .PP
  1122. ! .B Environment.
  1123. ! .br
  1124.   The environment is a list of name-value pairs that is passed to
  1125.   an executed program in the same way as a normal argument list; see
  1126.   .IR execve (2)
  1127.  
  1128. --- 842,848 -----
  1129.   Otherwise, the environment for the execution of a command contains the
  1130.   file descriptors of the invoking shell as modified by input
  1131.   output specifications.
  1132. ! .SS Environment.
  1133.   The environment is a list of name-value pairs that is passed to
  1134.   an executed program in the same way as a normal argument list; see
  1135.   .IR execve (2)
  1136. ***************
  1137. *** 531,537
  1138.   plus any modifications or additions, all of which must be noted in
  1139.   .B export
  1140.   commands.
  1141. ! .LP
  1142.   The environment for any
  1143.   .I simple-command
  1144.   may be augmented by prefixing it with one or more assignments to
  1145.  
  1146. --- 865,871 -----
  1147.   plus any modifications or additions, all of which must be noted in
  1148.   .B export
  1149.   commands.
  1150. ! .PP
  1151.   The environment for any
  1152.   .I simple-command
  1153.   may be augmented by prefixing it with one or more assignments to
  1154. ***************
  1155. *** 554,562
  1156.   set \-k
  1157.   echo a=b c
  1158.   .fi
  1159. ! .PP
  1160. ! .B Signals.
  1161. ! .br
  1162.   The INTERRUPT and QUIT signals for an invoked
  1163.   command are ignored if the command is followed by
  1164.   .BR & ;
  1165.  
  1166. --- 888,894 -----
  1167.   set \-k
  1168.   echo a=b c
  1169.   .fi
  1170. ! .SS Signals.
  1171.   The INTERRUPT and QUIT signals for an invoked
  1172.   command are ignored if the command is followed by
  1173.   .BR & ;
  1174. ***************
  1175. *** 562,571
  1176.   .BR & ;
  1177.   otherwise signals have the values inherited by the shell from its parent.
  1178.   (But see also
  1179. ! .BR trap. )
  1180. ! .PP
  1181. ! .B Execution.
  1182. ! .br
  1183.   Each time a command is executed the above substitutions are carried out.
  1184.   Except for the 'special commands' listed below a new process is created and
  1185.   an attempt is made to execute the command via an
  1186.  
  1187. --- 894,904 -----
  1188.   .BR & ;
  1189.   otherwise signals have the values inherited by the shell from its parent.
  1190.   (But see also
  1191. ! .BR trap .)
  1192. ! When job control is enabled,
  1193. ! .SM SIGTSTP
  1194. ! causes a foreground command to be stopped.
  1195. ! .SS Execution.
  1196.   Each time a command is executed the above substitutions are carried out.
  1197.   Except for the 'special commands' listed below a new process is created and
  1198.   an attempt is made to execute the command via an
  1199. ***************
  1200. *** 570,576
  1201.   Except for the 'special commands' listed below a new process is created and
  1202.   an attempt is made to execute the command via an
  1203.   .IR execve (2).
  1204. ! .LP
  1205.   The shell parameter
  1206.   .B
  1207.   .SM $PATH
  1208.  
  1209. --- 903,909 -----
  1210.   Except for the 'special commands' listed below a new process is created and
  1211.   an attempt is made to execute the command via an
  1212.   .IR execve (2).
  1213. ! .PP
  1214.   The shell parameter
  1215.   .B
  1216.   .SM $PATH
  1217. ***************
  1218. *** 586,594
  1219.   file, it is assumed to be a file containing shell commands.
  1220.   A subshell (i.e., a separate process) is spawned to read it.
  1221.   A parenthesized command is also executed in a subshell.
  1222. ! .PP
  1223. ! .B Special commands.
  1224. ! .br
  1225.   The following commands are executed in the shell process
  1226.   and except where specified
  1227.   no input output redirection is permitted for such commands.
  1228.  
  1229. --- 919,925 -----
  1230.   file, it is assumed to be a file containing shell commands.
  1231.   A subshell (i.e., a separate process) is spawned to read it.
  1232.   A parenthesized command is also executed in a subshell.
  1233. ! .SS Special commands.
  1234.   The following commands are executed in the shell process
  1235.   and except where specified
  1236.   no input output redirection is permitted for such commands.
  1237. ***************
  1238. *** 595,600
  1239.   .TP
  1240.   .B :
  1241.   No effect; the command does nothing.
  1242.   .PD 0
  1243.   .TP
  1244.   .BI . \ file
  1245.  
  1246. --- 926,932 -----
  1247.   .TP
  1248.   .B :
  1249.   No effect; the command does nothing.
  1250. + A zero exit code is returned.
  1251.   .PD 0
  1252.   .TP
  1253.   .BI . \ file
  1254. ***************
  1255. *** 662,667
  1256.   of subsequently-executed commands.
  1257.   If no arguments are given, a list of exportable names is printed.
  1258.   .TP
  1259.   \fBlogin\fR \*(OK\fIarg\fR ...\*(CK
  1260.   Equivalent to 'exec login arg ...'.
  1261.   .TP
  1262.  
  1263. --- 994,1042 -----
  1264.   of subsequently-executed commands.
  1265.   If no arguments are given, a list of exportable names is printed.
  1266.   .TP
  1267. + \fBhistory\fP \*(OK \fB\-irs\fP \*(OK \fIfilename\fP \*(CK \*(CK
  1268. + The \fBhistory\fP command, with no arguments, will print all the commands that
  1269. + are currently saved in the shell's history buffers.  As new commands are
  1270. + executed, and space in the buffers runs out, old commands will be deleted.  The
  1271. + .B history
  1272. + commands prints out the stored commands with sequence numbers.  Negative
  1273. + numbered commands, through command number zero, are commands that were
  1274. + retrieved from the saved history file.  Commands starting at one were
  1275. + entered during the current login session.
  1276. + If a saved command contains embedded newlines, these will be printed out
  1277. + as the sequence
  1278. + .BR \en ,
  1279. + so that individual command stay on one line.
  1280. + .sp
  1281. + The \fBhistory\fP command takes two optional arguments.  If the first
  1282. + argument is \fB\-s\fP, the shell will save its current history buffers
  1283. + in the file named as the third argument. If no file is given, it will
  1284. + use the value of
  1285. + .BR \s-1HISTFILE\s+1 .
  1286. + .sp
  1287. + Similarly, if the first argument is \fB\-r\fP, the shell will reset its
  1288. + history buffers from the saved history in the file given as the third argument.
  1289. + Again, if no file name is given,
  1290. + .B \s-1$HISTFILE\s+1
  1291. + will be used.
  1292. + .sp
  1293. + The command
  1294. + .B history -i
  1295. + will cause the shell to reinitialize its history buffers.  In other words,
  1296. + all the shell's saved history will be thrown away, and the shell will
  1297. + start from scratch.
  1298. + .sp
  1299. + The \fBhistory\fP command will have absolutely no effect at all if input
  1300. + is not coming from a terminal.  I.e., inside shell files, the
  1301. + .B history
  1302. + command is effectively a null operation.
  1303. + .sp
  1304. + The
  1305. + .B history
  1306. + command will always have an exit status of 1 inside a shell file.
  1307. + If input is coming from a terminal, then the exit status wil be 0
  1308. + if the command succeeds, 1 otherwise.
  1309. + .TP
  1310.   \fBlogin\fR \*(OK\fIarg\fR ...\*(CK
  1311.   Equivalent to 'exec login arg ...'.
  1312.   .TP
  1313. ***************
  1314. *** 678,684
  1315.   by subsequent assignment.
  1316.   If no arguments are given, a list of all readonly names is printed.
  1317.   .TP
  1318. ! \fBset\fR \*(OK\fB\-eknptuvx\fR \*(OK\fIarg \fR...\*(CK\*(CK
  1319.   .RS
  1320.   .PD 0
  1321.   .TP 3m
  1322.  
  1323. --- 1053,1059 -----
  1324.   by subsequent assignment.
  1325.   If no arguments are given, a list of all readonly names is printed.
  1326.   .TP
  1327. ! \fBset\fR \*(OK\fB\-eknptuvxEHIJ\fR \*(OK\fIarg \fR...\*(CK\*(CK
  1328.   .RS
  1329.   .PD 0
  1330.   .TP 3m
  1331. ***************
  1332. *** 704,709
  1333.   .B \-x
  1334.   Print commands and their arguments as they are executed.
  1335.   .TP
  1336.   .B \-
  1337.   Turn off the
  1338.   .B \-x
  1339.  
  1340. --- 1079,1128 -----
  1341.   .B \-x
  1342.   Print commands and their arguments as they are executed.
  1343.   .TP
  1344. + .B \-E
  1345. + Prevents an EOT
  1346. + .RI ( control-D\^ )
  1347. + from terminating an interactive shell.
  1348. + Added by BRL mostly for use in
  1349. + .IR .profile\^ s
  1350. + to avoid accidental logout.
  1351. + .TP
  1352. + .B \-H
  1353. + Disable history processing.  If the shell is invoked with this option,
  1354. + it will not bother trying to restore its saved history from the
  1355. + contents of
  1356. + .BR \s-1$HISTFILE\s+1 .
  1357. + While this flag is in effect, the shell will not save any commands in
  1358. + its history buffers.
  1359. + The sequence
  1360. + .B %e
  1361. + in the value of
  1362. + .B \s-1PS1\s+1
  1363. + will also have no effect on the generated prompt string.
  1364. + If
  1365. + .B set +H
  1366. + is used to turn history processing back on, the shell will start saving
  1367. + subsequent commands from that point on.
  1368. + .TP
  1369. + .B \-I
  1370. + (BRL addition)
  1371. + Prints a resource usage summary
  1372. + (system plus user time, blocks input and output, page reclaims and faults)
  1373. + for each command after it terminates.
  1374. + .TP
  1375. + .B \-J
  1376. + (BRL addition)
  1377. + Enables ``job control'' features (see below).
  1378. + .TP
  1379. + .B \-\-
  1380. + Do not change any of the flags; useful in setting
  1381. + .B $1
  1382. + to
  1383. + .BR \- .
  1384. + .PP
  1385. + Using
  1386. + .B \+
  1387. + rather than
  1388.   .B \-
  1389.   causes these flags to be turned off.
  1390.   .PP
  1391. ***************
  1392. *** 705,717
  1393.   Print commands and their arguments as they are executed.
  1394.   .TP
  1395.   .B \-
  1396. ! Turn off the
  1397. ! .B \-x
  1398. ! and
  1399. ! .B \-v
  1400. ! options.
  1401. ! .PD
  1402. ! .LP
  1403.   These flags can also be used upon invocation of the shell.
  1404.   The current set of flags may be found in
  1405.   .BR $\- .
  1406.  
  1407. --- 1124,1131 -----
  1408.   .B \+
  1409.   rather than
  1410.   .B \-
  1411. ! causes these flags to be turned off.
  1412. ! .PP
  1413.   These flags can also be used upon invocation of the shell.
  1414.   The current set of flags may be found in
  1415.   .BR $\- .
  1416. ***************
  1417. *** 715,721
  1418.   These flags can also be used upon invocation of the shell.
  1419.   The current set of flags may be found in
  1420.   .BR $\- .
  1421. ! .LP
  1422.   Remaining arguments are positional
  1423.   parameters and are assigned, in order, to
  1424.   .SM
  1425.  
  1426. --- 1129,1135 -----
  1427.   These flags can also be used upon invocation of the shell.
  1428.   The current set of flags may be found in
  1429.   .BR $\- .
  1430. ! .PP
  1431.   Remaining arguments are positional
  1432.   parameters and are assigned, in order, to
  1433.   .SM
  1434. ***************
  1435. *** 743,749
  1436.   (Note that
  1437.   .I arg
  1438.   is scanned once when the trap is set and once when the trap is taken.)
  1439. ! Trap commands are executed in order of signal number.  If
  1440.   .I arg
  1441.   is absent, all trap(s)
  1442.   .I n
  1443.  
  1444. --- 1157,1168 -----
  1445.   (Note that
  1446.   .I arg
  1447.   is scanned once when the trap is set and once when the trap is taken.)
  1448. ! Trap commands are executed in order of signal number.
  1449. ! Any attempt to set a trap on a signal that
  1450. ! was ignored on entry to the current shell
  1451. ! is ineffective.
  1452. ! An attempt to trap on signal 11 (memory fault) produces an error.
  1453. ! If
  1454.   .I arg
  1455.   is absent, all trap(s)
  1456.   .I n
  1457. ***************
  1458. *** 778,788
  1459.   is not given, all currently active child processes are waited for.
  1460.   The return code from this command is that of the process waited for.
  1461.   .PD
  1462. ! .LP
  1463. ! .PP
  1464. ! .B Invocation.
  1465. ! .br
  1466. ! If the first character of argument zero is
  1467.   .BR \- ,
  1468.   commands are read from
  1469.   .BR \s-2$HOME\s0/.\|profile ,
  1470.  
  1471. --- 1197,1207 -----
  1472.   is not given, all currently active child processes are waited for.
  1473.   The return code from this command is that of the process waited for.
  1474.   .PD
  1475. ! .SS Invocation
  1476. ! If the shell is invoked through
  1477. ! .IR execve (2)
  1478. ! and the first character of argument zero
  1479. ! is
  1480.   .BR \- ,
  1481.   commands are initially read from
  1482.   .BR \s-1$HOME\s+1/.profile ,
  1483. ***************
  1484. *** 784,791
  1485.   .br
  1486.   If the first character of argument zero is
  1487.   .BR \- ,
  1488. ! commands are read from
  1489. ! .BR \s-2$HOME\s0/.\|profile ,
  1490.   if such a file exists.
  1491.   Commands are then read as described below.
  1492.   The following flags are interpreted by the shell when it is invoked.
  1493.  
  1494. --- 1203,1210 -----
  1495.   and the first character of argument zero
  1496.   is
  1497.   .BR \- ,
  1498. ! commands are initially read from
  1499. ! .BR \s-1$HOME\s+1/.profile ,
  1500.   if such a file exists.
  1501.   Next, whether or not the first character of argument zero was a
  1502.   .BR \- ,
  1503. ***************
  1504. *** 787,793
  1505.   commands are read from
  1506.   .BR \s-2$HOME\s0/.\|profile ,
  1507.   if such a file exists.
  1508. ! Commands are then read as described below.
  1509.   The following flags are interpreted by the shell when it is invoked.
  1510.   .PD 0
  1511.   .TP 11n
  1512.  
  1513. --- 1206,1231 -----
  1514.   commands are initially read from
  1515.   .BR \s-1$HOME\s+1/.profile ,
  1516.   if such a file exists.
  1517. ! Next, whether or not the first character of argument zero was a
  1518. ! .BR \- ,
  1519. ! and no matter how the shell was invoked,
  1520. ! the shell will read commands from the file
  1521. ! .BR \s-1$HOME\s+1/.shrc ,
  1522. ! if it exists.
  1523. ! Then, if the shell is interactive, is not a forked subshell,
  1524. ! and the
  1525. ! .B \-H
  1526. ! flag is not in effect,
  1527. ! it will attempt to restore its saved history from
  1528. ! .BR \s-1$HISTFILE\s+1 .
  1529. ! Thereafter, commands are read as described below, which
  1530. ! is also the case when the shell is invoked as
  1531. ! .BR /bin/sh .
  1532. ! If any character of argument zero past the last slash (if any) is
  1533. ! .BR j ,
  1534. ! the
  1535. ! .B \-J
  1536. ! (job control) flag is automatically set.
  1537.   The following flags are interpreted by the shell when it is invoked.
  1538.   .PD 0
  1539.   .TP 11n
  1540. ***************
  1541. *** 820,825
  1542.   .B wait
  1543.   is interruptible).
  1544.   In all cases SIGQUIT is ignored by the shell.
  1545.   .PD
  1546.   .LP
  1547.   The remaining flags and arguments are described under the
  1548.  
  1549. --- 1258,1279 -----
  1550.   .B wait
  1551.   is interruptible).
  1552.   In all cases SIGQUIT is ignored by the shell.
  1553. + .TP
  1554. + .B \-r
  1555. + If the
  1556. + .B \-r
  1557. + flag is present, the shell is a restricted shell.
  1558. + .TP
  1559. + .B \-q
  1560. + If the
  1561. + .B \-q
  1562. + flag is present, the shell will do a ``quick'' startup.
  1563. + This means that the shell will
  1564. + .I not
  1565. + read the contents of the
  1566. + .B \s-1$HOME\s+1/.shrc
  1567. + file.
  1568. + The shell will also not try to read this file if it is a restricted shell.
  1569.   .PD
  1570.   .PP
  1571.   The remaining flags and arguments are described under the
  1572. ***************
  1573. *** 821,827
  1574.   is interruptible).
  1575.   In all cases SIGQUIT is ignored by the shell.
  1576.   .PD
  1577. ! .LP
  1578.   The remaining flags and arguments are described under the
  1579.   .B set
  1580.   command.
  1581.  
  1582. --- 1275,1281 -----
  1583.   file.
  1584.   The shell will also not try to read this file if it is a restricted shell.
  1585.   .PD
  1586. ! .PP
  1587.   The remaining flags and arguments are described under the
  1588.   .B set
  1589.   command.
  1590. ***************
  1591. *** 825,830
  1592.   The remaining flags and arguments are described under the
  1593.   .B set
  1594.   command.
  1595.   .SH FILES
  1596.   .RB $HOME/ . \^profile
  1597.   .br
  1598.  
  1599. --- 1279,1366 -----
  1600.   The remaining flags and arguments are described under the
  1601.   .B set
  1602.   command.
  1603. + .SS Job Control.
  1604. + Job control features are enabled by the
  1605. + .B \-J
  1606. + flag.
  1607. + When job control is enabled,
  1608. + background commands and foreground commands that have been stopped
  1609. + (usually by a \s-1SIGTSTP\s0 signal generated by typing
  1610. + .IR ^Z\^ )
  1611. + are placed into separate individual
  1612. + .IR "process groups"\^ .
  1613. + The following commands are used to manipulate these process groups:
  1614. + .PP
  1615. + .PD 0
  1616. + .TP
  1617. + \f3jobs\fP
  1618. + Display information about the controlled jobs.
  1619. + The job number is given in brackets,
  1620. + followed by a plus sign if it is the ``current job'',
  1621. + then the process group number for the job,
  1622. + then the command.
  1623. + .TP
  1624. + \f3fg\fP \*(OK \f2n\^\fP \*(CK
  1625. + Resume the stopped foreground job in the foreground.
  1626. + If the process group
  1627. + .I n\^
  1628. + is not specified then the ``current job'' is resumed.
  1629. + .TP
  1630. + \f3bg\fP \*(OK \f2n\^\fP \*(CK
  1631. + Resume the stopped foreground job in the background.
  1632. + If the process group
  1633. + .I n\^
  1634. + is not specified then the ``current job'' is resumed.
  1635. + .TP
  1636. + .B suspend
  1637. + Suspend the shell process itself in the background.
  1638. + The shell will complain
  1639. + if it is a login shell, and will not suspend itself.
  1640. + Otherwise, it does not matter whether or not job control is enabled.
  1641. + .PD
  1642. + .PP
  1643. + With job control enabled,
  1644. + there are the following additional substitutable parameters:
  1645. + .PP
  1646. + .PD 0
  1647. + .TP
  1648. + .BR %%
  1649. + If there is a ``current job'',
  1650. + then this expression is replaced by
  1651. + its process group number.
  1652. + .TP
  1653. + .BI % n\^
  1654. + If the specified job number is one of the known jobs,
  1655. + then this expression is replaced by
  1656. + the corresponding process group number.
  1657. + .SS Saving and Restoring History
  1658. + When an interactive shell starts up, if the
  1659. + .B \-H
  1660. + flag is not in effect, it will attempt to read the contents of
  1661. + .B \s-1$HISTFILE\s+1
  1662. + into its history buffers.  This allows the user to recall commands
  1663. + executed during a previous login session.
  1664. + When the shell exits or executes an
  1665. + .B exec
  1666. + (again, if
  1667. + .B \-H
  1668. + is not in effect), it will attempt to write its current history
  1669. + buffers into
  1670. + .BR \s-1$HISTFILE\s+1 ,
  1671. + for use in a future login session.
  1672. + .PP
  1673. + The
  1674. + .B history
  1675. + command allows the user to save the current history buffers into
  1676. + a file of his or her own choosing, or to restore them from a given file.
  1677. + If
  1678. + .B \-H
  1679. + has been set, the
  1680. + .B history
  1681. + command will give a warning that history processing is not
  1682. + available, and will
  1683. + .I not
  1684. + save or restore the shell's history buffers.
  1685.   .SH FILES
  1686.   .RB $HOME/ . \^profile
  1687.   .br
  1688. ***************
  1689. *** 828,833
  1690.   .SH FILES
  1691.   .RB $HOME/ . \^profile
  1692.   .br
  1693.   /tmp/sh*
  1694.   .br
  1695.   /dev/null
  1696.  
  1697. --- 1364,1371 -----
  1698.   .SH FILES
  1699.   .RB $HOME/ . \^profile
  1700.   .br
  1701. + .RB $HOME/ . \^shrc
  1702. + .br
  1703.   /tmp/sh*
  1704.   .br
  1705.   /dev/null
  1706. ***************
  1707. *** 833,838
  1708.   /dev/null
  1709.   .SH SEE ALSO
  1710.   csh(1),
  1711.   test(1),
  1712.   execve(2),
  1713.   environ(7)
  1714.  
  1715. --- 1371,1377 -----
  1716.   /dev/null
  1717.   .SH SEE ALSO
  1718.   csh(1),
  1719. + ed(1),
  1720.   test(1),
  1721.   execve(2),
  1722.   getppid(2),
  1723. ***************
  1724. *** 835,840
  1725.   csh(1),
  1726.   test(1),
  1727.   execve(2),
  1728.   environ(7)
  1729.   .SH DIAGNOSTICS
  1730.   Errors detected by the shell, such as syntax errors cause the shell
  1731.  
  1732. --- 1374,1380 -----
  1733.   ed(1),
  1734.   test(1),
  1735.   execve(2),
  1736. + getppid(2),
  1737.   environ(7)
  1738.   .SH DIAGNOSTICS
  1739.   Errors detected by the shell, such as syntax errors cause the shell
  1740. ***************
  1741. *** 849,851
  1742.   process invoked by &, the shell gets mixed up about naming the input document.
  1743.   A garbage file /tmp/sh* is created, and the shell complains about
  1744.   not being able to find the file by another name.
  1745.  
  1746. --- 1389,1505 -----
  1747.   process invoked by &, the shell gets mixed up about naming the input document.
  1748.   A garbage file /tmp/sh* is created, and the shell complains about
  1749.   not being able to find the file by another name.
  1750. + .SH PYRAMID SPECIFIC
  1751. + .PP
  1752. + On computers manufactured by the Pyramid Corporation, which support
  1753. + both the University of California at Berkeley 4.2BSD version of \s-1UNIX\s+1,
  1754. + and the AT&T System V version of \s-1UNIX\s+1,
  1755. + the shell has several additional capabilities.
  1756. + .SS Special Commands
  1757. + .PP
  1758. + There are three additional commands built in to the shell. They are:
  1759. + .RS
  1760. + .TP
  1761. + \fBatt\fP \*(OK command \*(CK
  1762. + Switch the current ``universe'' to be ATT System V.
  1763. + If a command is specified, that command will be run in the ``att''
  1764. + universe, without affecting the shell's current universe.
  1765. + The
  1766. + .B \-t
  1767. + option of
  1768. + .B /bin/att
  1769. + is not (yet) supported.
  1770. + .TP
  1771. + \fBucb\fP \*(OK command \*(CK
  1772. + Switch the current ``universe'' to be University of California at
  1773. + Berkeley 4.2BSD.
  1774. + If a command is specified, that command will be run in the ``ucb''
  1775. + universe, without affecting the shell's current universe.
  1776. + The
  1777. + .B \-t
  1778. + option of
  1779. + .B /bin/ucb
  1780. + is not (yet) supported.
  1781. + .TP
  1782. + \fBuniverse\fP \*(OK \fB\-l\fP \*(CK
  1783. + Print the current universe, either ``att'' or ``ucb''. The
  1784. + .B \-l
  1785. + option will print a longer, more explanative name for the current universe.
  1786. + .RE
  1787. + .PP
  1788. + If the shell cannot determine the current universe when it starts up,
  1789. + it will default to
  1790. + .BR ucb .
  1791. + .SS Shell Variables
  1792. + .PP
  1793. + There is an additional pre-defined shell parameter,
  1794. + .BR \s-1UNIVERSE\s+1 .
  1795. + The value of
  1796. + .B \s-1UNIVERSE\s+1
  1797. + .I always
  1798. + tracks that of the current universe.  Using it is equivalent to a
  1799. + \*`universe\` command substitution,
  1800. + except that a new process will not be created.
  1801. + This variable cannot be set by the user (it is \fBreadonly\fP),
  1802. + and any inherited value from the environment will be ignored.
  1803. + .SS Special Sequences for \s-1PS1\s+1
  1804. + .PP
  1805. + Finally, the sequence
  1806. + .B %u
  1807. + in the value of
  1808. + .B \s-1PS1\s-1
  1809. + will cause the shell to subsitute in the name of the current universe,
  1810. + either ``att'' or ``ucb''.
  1811. + .SH HISTORY EXAMPLES
  1812. + Command history provides a powerful method for easily redoing previous
  1813. + commands, or for quicly fixing typing mistakes.
  1814. + Here are some annotated examples.  User input is in
  1815. + .BR boldface .
  1816. + .sp
  1817. + .nf
  1818. + # first, list some files
  1819. + .RB "$ " lf
  1820. + hello.c        echo.c
  1821. + # now, make a typing mistake
  1822. + .RB "$ " "cat hello"
  1823. + hello: No such file or directory
  1824. + # fix it.  The trailing ! ends the history substitution,
  1825. + # in order to correctly concatenate it with the following .c
  1826. + .RB "$ " "!!.c"
  1827. + cat hello.c
  1828. + main () { printf ("hello world\en"); }
  1829. + # now look at echo.c instead
  1830. + .RB "$ " "!^hello^echo"
  1831. + cat echo.c
  1832. + main () { printf ("echo: no arguments\en"); }
  1833. + # do it again, just for fun
  1834. + .RB "$ " "!"
  1835. + cat echo.c
  1836. + main () { printf ("echo: no arguments\en"); }
  1837. + # now we'll rearrange some arguments
  1838. + .RB "$ " "echo 1 2 3 4 5"
  1839. + 1 2 3 4 5
  1840. + # print last argument, first and second arguments, then change 4 to four
  1841. + .RB "$ " "echo !\(ga$ !\(ga1-2 !\(ga4^4^four"
  1842. + echo 5 1 2 four
  1843. + 5 1 2 four
  1844. + # do something with all the previous arguments at once
  1845. + .RB "$ " "echo the previous arguments were !\(ga\-"
  1846. + echo the previous arguments were 5 1 2 four
  1847. + the previous arguments were 5 1 2 four
  1848. + # now do some substitutions.  first get something to work with.
  1849. + .RB "$ " "echo aa bb cc"
  1850. + aa bb cc
  1851. + # change the first 'a' to a 'b', and change all c's to d's
  1852. + .RB "$ " "!^a^b^^c^d^g"
  1853. + echo ba bb dd
  1854. + ba bb dd
  1855. + .fi
  1856. + .PP
  1857. + These few brief examples should provide a general feel for the
  1858. + history mechanism.  The quickest way to learn it is to experiment
  1859. + with it for a while, using the
  1860. + .B echo
  1861. + command, which can do very little damage.
  1862. + While it looks cryptic when being typed, it is very general and
  1863. + orthogonal, and quickly becomes natural.
  1864.  
  1865.