BSD 1 development
authorBill Joy <wnj@ucbvax.Berkeley.EDU>
Wed, 23 Nov 1977 20:43:54 +0000 (12:43 -0800)
committerBill Joy <wnj@ucbvax.Berkeley.EDU>
Wed, 23 Nov 1977 20:43:54 +0000 (12:43 -0800)
Work on file man6/cr3.6
Work on file man6/file.6
Work on file man6/cptree.6
Work on file man6/dates.6
Work on file man6/expand.6
Work on file man6/sh.6
Work on file man6/fold.6

Synthesized-from: 1bsd

man6/cptree.6 [new file with mode: 0644]
man6/cr3.6 [new file with mode: 0644]
man6/dates.6 [new file with mode: 0644]
man6/expand.6 [new file with mode: 0644]
man6/file.6 [new file with mode: 0644]
man6/fold.6 [new file with mode: 0644]
man6/sh.6 [new file with mode: 0644]

diff --git a/man6/cptree.6 b/man6/cptree.6
new file mode 100644 (file)
index 0000000..f17a131
--- /dev/null
@@ -0,0 +1,101 @@
+.th CPTREE VI 8/22/77
+.sh NAME
+cptree \- make a duplicate tree
+.sh SYNOPSIS
+.bd cptree
+[
+.bd \-
+] [
+.bd \-y
+] [
+.bd \-q
+]
+source dest
+.sh DESCRIPTION
+A copy of the tree rooted at
+.it source
+is made with its root at
+.it dest.
+The existing link structure of the subtree is preserved.
+.it Dest
+must already exist.
+The source and destination directories need not be on the same device,
+but the subtree must encompass only one device.
+If the source and destination directories are on the same device
+.it lntree
+(VI)
+would run much faster, but will have a very different effect
+unless
+.it source
+is to be removed, e.g. with
+.it rmtree
+(VI).
+.s3
+.it Cptree
+diagnoses the fact
+that
+.it dest
+is a subdirectory of
+.it source,
+and does no copying as such would not terminate.
+.s3
+.it Cptree
+first makes a pass at the subtree rooted at source, checking that it
+can indeed transverse the directory structure and copy all the named files.
+It checks on the prepass for
+.it dest
+a subdirectory of
+.it source
+and also records
+the inode numbers of files it encounters which have link counts greater
+than 1.
+It will complain on this pass and forego pass 2 if it finds any
+unreadable subdirectories,
+any files it will not be able to copy,
+or any special files.
+.s3
+After this prepass,
+if there are any files whose link count is not totally
+accounted for in the subtree rooted at source,
+.it cptreee
+lists the inode number
+of each together with the number of dangling links and all known names for
+the inode.
+The user is then asked to confirm that the copy is still to be made.
+The
+.bd \-y
+option can be used to answer this question affirmatively on the
+command line.
+The question is not asked if the standard input is not a teletype.
+The
+.bd \-
+option suppresses all link diagnositics and prompting and makes the new tree
+regardless.
+.s3
+.it Cptree
+finally makes a second pass, forking a
+.it cp
+(I) to do each copy,
+and linking via
+.it ln
+(II)
+when appropriate.
+.s3
+For the super-user
+.it cptree 
+normally makes new quota files with the same
+maximum quota as in the source tree.
+This feature is disabled by the 
+.bd \-q
+option.
+If the super-user is copying, the ownership of each file in the copy
+corresponds to that in the original.
+.sh "SEE ALSO"
+mkdir (I), quot(I), cp (I), ln(II), cpall(VI), lntree(VI), rmtree(VI)
+.sh AUTHOR
+William Joy
+.sh BUGS
+Missing link information, while potentially useful,
+is rarely a concern, so that the prompting for confirmation
+when links are ``dangling''
+is most often a nuisance.
diff --git a/man6/cr3.6 b/man6/cr3.6
new file mode 100644 (file)
index 0000000..329ccaa
--- /dev/null
@@ -0,0 +1,49 @@
+.th CR3 VI 8/24/77
+.sh NAME
+cr3 \- controlled output flow filter for crt previewing
+.sh SYNOPSIS
+.bd cr3
+[
+name ...
+]
+.sh DESCRIPTION
+.it Cr3
+is a filter which allows causual examination of a continuous text
+on a soft-copy terminal.
+It normally pauses after each 23 lines of output.
+If the user then hits a carriage-return, 23 more lines are displayed.
+If the user hits control-d,
+11 more lines are displayed (a ``scroll'').
+.s3
+It is also possible to type positive numbers to cr3 causing that
+many lines to be printed, or negative numbers causing that many lines
+to be discarded followed by a scroll.
+.s3
+The terminal is set to
+.it noecho
+mode by this program so that the output can be continuous.
+The numbers and carriage returns you type will thus not show on your terminal.
+.s3
+.dt
+A sample usage of
+.it cr3
+in previewing
+.it nroff
+output would be
+.s3
+       nroff \-ms +2 doc.n | cr3
+.sh SEE\ ALSO
+page (VI)
+.sh AUTHOR
+William Joy
+.sh BUGS
+The function of
+.it cr3
+should be done optionally by the teletype driver in the system.
+.it Cr3
+has its unusual name because Charles Haley
+implemented such a feature,
+which was enabled by
+.dt
+.s3
+       stty cr3
diff --git a/man6/dates.6 b/man6/dates.6
new file mode 100644 (file)
index 0000000..a53406a
--- /dev/null
@@ -0,0 +1,57 @@
+.th DATES VI 8/25/77
+.sh NAME
+dates \- display and update system events calendar
+.sh SYNOPSIS
+.bd dates
+[ date [ identifier [ description ] ] ]
+.sh DESCRIPTION
+.it Dates
+displays and modifies the system calendar of events.
+The command
+.s3
+.dt
+       dates
+.s3
+will display the calendar.
+.s3
+.it Dates
+normally dispalys only events which will or have happened today,
+or will happen in the future.
+By specifying two arguments, you can ask
+.it dates
+to start at a different date.
+Thus
+.s3
+       dates 11/4.11:30
+.s3
+asks for events happening after 11:30 am on December 4, while
+.s3
+       dates 1/1/78
+.s3
+asks for events starting with the first one in 1978.
+The year and time are optional.
+.s3
+The class master accounts and the super-user may add events to the
+calendar and delete events.
+To add an event one specifies three arguments, the second and
+third arguments being an identifying tag for this entry and a description, i.e.:
+.s3
+       dates 12/31/77 "New years eve" "A holiday"
+.s3
+or more seriously
+.s3
+       dates 9/27 "CS40 Assignment 1" "Fibbonnaci numbers"
+.s3
+The identifying tag and description are limited to 30 characters.
+.s3
+To delete an entry just give the first three arguments, thus
+.s3
+       dates 9/27 "CS40 Assignment 1"
+.s3
+Would delete the last entry above.
+.ti 15
+.sh "FILES"
+/usr/lib/dates data base
+.sh AUTHOR
+William Joy
+.sh BUGS
diff --git a/man6/expand.6 b/man6/expand.6
new file mode 100644 (file)
index 0000000..acca5c6
--- /dev/null
@@ -0,0 +1,22 @@
+.th EXPAND VI 8/5/77
+.sh NAME
+expand \- expand tabs to spaces in a file like the \fIex\fR xpand command
+.sh SYNOPSIS
+.bd expand
+[
+file ...
+]
+.sh DESCRIPTION
+.it Expand
+processes the named files or the standard input writing
+the standard output with tabs changed into blanks.
+Backspace characters are preserved into the output and decrement
+the column count for tab calculations.
+.s3
+.it Expand
+is useful for pre-processing character files
+(before sorting, looking at specific columns, etc.) that
+contain tabs.
+.sh SEE\ ALSO
+list (VI), p (VI)
+.sh BUGS
diff --git a/man6/file.6 b/man6/file.6
new file mode 100644 (file)
index 0000000..3ae7ac3
--- /dev/null
@@ -0,0 +1,49 @@
+.th FILE VI 8/27/77
+.sh NAME
+file \- determine file type
+.sh SYNOPSIS
+.bd file
+file ...
+.sh DESCRIPTION
+.it File
+performs a series of tests on each argument
+in an attempt to classify it.
+If an argument appears to be \s-2ASCII\s0,
+.it file
+examines the first 512 bytes
+and tries to guess its language.
+.s3
+Classification currently known to
+.it file
+are:
+.s3
+.dt
+.br
+       directory
+.br
+       ( character | block ) special file
+.br
+       quota file
+.br
+       [ pure | separate ] executable [ not stripped ]
+.br
+       pascal object
+.br
+       [ old ] archive
+.s3
+The following text file classifications may indicate
+``with garbage'' if there are non-\s-2ASCII\s0 characters
+in the file.
+.s3
+       ( c | fortran | pascal | assembler ) program
+.br
+       roff, nroff, or eqn input
+.br
+       commands
+.br
+       data
+.br
+       probably text
+.sh SEE\ ALSO
+head (VI)
+.sh BUGS
diff --git a/man6/fold.6 b/man6/fold.6
new file mode 100644 (file)
index 0000000..f84fdaa
--- /dev/null
@@ -0,0 +1,32 @@
+.th FOLD VI 8/24/77
+.sh NAME
+fold \- fold long lines for finite width output device
+.sh SYNOPSIS
+.bd fold
+[
+\-width
+] [
+file ...
+]
+.sh DESCRIPTION
+.it Fold
+is a filter which will fold the contents of the specified files,
+or the standard input if no files are specified,
+breaking the lines to have maximum width
+.it width.
+The default for
+.it width
+is 80.
+.it Width
+should be a multiple of 8 if tabs are present, or the tabs should
+be expanded using
+.it expand
+(VI)
+before coming to
+.it fold.
+.sh SEE\ ALSO
+expand (VI)
+.sh AUTHOR
+William Joy
+.sh BUGS
+If underlining is present it may be messed up by folding.
diff --git a/man6/sh.6 b/man6/sh.6
new file mode 100644 (file)
index 0000000..6a07ac9
--- /dev/null
+++ b/man6/sh.6
@@ -0,0 +1,732 @@
+.th SH VI 9/15/77
+.if t .tr *\(**
+.sh NAME
+sh \- a shell (command interpreter)
+.sh SYNOPSIS
+.bd sh
+[
+.bd \-V
+] [
+.bd \-v
+] [
+.bd \-t
+] [
+.bd \-c
+] [
+.bd \-i
+] [
+name
+[
+arg ...
+]
+]
+.sh DESCRIPTION
+.it Sh
+is a command interpreter.
+It arranges and interprets command lines and the contents of command files.
+It is a modification of the standard shell
+.it sh
+(I),
+and almost completely upward compatible therewith.
+The intent, in working on a new shell,
+is to provide an environment which is more easily tailored to the
+wishes of each individual user.
+Most new features of this shell,
+especially the
+.it alias
+feature,
+are toward this end.
+Later versions of this shell may include improvements to the command
+language of the shell and allow more easy repetition of commands.
+The intent here is to make the command language more resemble a
+high-level language \- C being the natural choice for
+\s-2UNIX\s0,
+and to provide some means of repeating modified commands without retyping,
+perhaps akin to the
+\s-2INTERLISP\s0
+.it redo
+feature.
+The eventual goal is a C\-shell,
+.it csh
+(or ``seashell'' if you prefer.)
+.s3
+.bd "Notes:"
+this shell is currently available as
+.it "/usr/pascal/sh"
+on the Cory and Evans
+\s-2UNIX\s0
+systems at UC Berkeley.
+We discuss the major features of the shell beginning with the objects
+of the shell world,
+then the lexical structure of the shell input,
+the syntactic structure,
+details on command execution,
+pre-defined variables,
+start-up processing,
+options,
+and finally a list of the built-in commands with a simple description of each.
+This documentation is neither fully polished nor devoid of forward references.
+.it Sh
+was a ``working'' version of the new
+.it csh
+which became useful when the completion of
+.it csh
+was delayed.
+It is hoped that this documentation will serve as a reference for
+.it sh
+users who have lived, to this point, by word-of-mouth information.
+.s3
+.bd "Objects."
+The major
+.it objects
+of the shell world are the
+.it variables
+and the
+.it "argument list"
+which consists of specially named and initialized variables.
+The variables in the argument list have numeric names, e.g. `1' and `2'.
+The other variables have alphabetic names, composed of upper and
+lower case letters.
+Variable names may be up to 20 characters long.
+There is a distinction between a variable existing and not existing,
+akin to a variable being on the
+.it "a-list"
+in
+\s-2LISP\s0.
+Initially, no variables exist;
+in shell terminology, no variables are
+.it set.
+Variables have string values only;
+some numeric operations are defined on variables,
+but the representation of variables is always as a string.
+Some variables have special meaning to the shell;
+thus
+.it pid
+is the process id of the shell, set to a string with this value
+when the shell is created.
+These variables have, however, no special status.
+They may be manipulated as any other variables are,
+with the caveat being that these manipulations may directly affect
+the behavior of the shell.
+One other point to be noted is that some of the built-in variables
+are essentially `toggles';
+that is, the shell cares only if they are set or not,
+not what their value is.
+The standard way to set such a variable is to set it to be the null
+string.
+.s3
+.bd "Lexical structure."
+The primary lexical structuring of the input to the shell is the line.
+A new-line character is thus normally of syntactic significance, although
+it may be escaped with a `\e' as described below.
+The most fundamental delimiters for the shell are the blank and the
+tab character, generated by a control-i.
+There are also a number of characters which have special significance
+as they define tokens which are part of the command language of the shell:
+`>' and `<' which denote input and output redirection,
+`(' and `)' which are used to delimit command lists,
+`;' which is used to separate commands for sequential execution,
+and `|' and `^' which are completely equivalent ways of specifying a
+.it pipe
+in a
+.it pipeline.
+The ways in which these are used in construction of shell commands
+will be discussed in the next section.
+.s3
+At the syntactic level, there is also a
+.it "parameter substitution"
+facility, which can be used to substitute variables.
+Parameter substitution is introduced by the character `$'
+and has several different forms, each of which yields zero or more
+characters into the input stream replacing it.
+We describe each such construct in turn.
+.s3
+.lp +22 20
+$number        Substitutes the number'th argument in the currently
+positioned argument list.
+The accessing of the argument will be described later.
+.s3
+.lp +22 20
+$*     Substitutes all arguments in the current argument list,
+starting at the first `$1';
+successive arguments are separated by blanks.
+.s3
+.lp +22 20
+$name
+.lp +22 20
+${name}        Substitutes the value of the shell variable
+.it name.
+The second form can be used when this construct is immediately
+followed by a letter.
+.s3
+.lp +22 20
+$$     Equivalent to `${pid}'.
+.s3
+.lp +22 20
+${name?str1:str2}      Substitutes
+.it str1
+if name is set else substitutes
+.it str2.
+Currently only quoting with `\e' works correctly within
+.it str1
+and
+.it str2.
+In particular, `$' constructs and quoting via `\'' and `"' within
+these strings is unreliable as it is badly implemented.
+.s3
+.lp +22 20
+${name:default}        Substitutes the value of
+.it name
+if this variable is set, else substitutes
+the string
+.it default.
+.s3
+.lp +22 20
+${name?str}    Substitutes the string
+.it str
+if the variable
+.it name
+is set, else substitutes nothing.
+.i0
+.s3
+Whenever a paramter is being substituted a slightly different effect
+occurs if the `$' is immediately followed by a `.'.
+In this case, any substitution from parameters trims suffices from
+the parameter.
+Thus if `$0' gives `a.out', then `$.0' will give `a',
+and if `$prog' would give `foo.p' then `$.prog' would give `foo'.
+Also if the `$' character is not followed by any character described
+above then that character is returned.
+.s3
+It is possible to
+.it quote
+special characters to prevent their special meaning.
+Before describing the various ways to do this, we should note that
+the characters `[', `*' and `?' have special meaning in command
+contexts where they cause
+.it "filename expansion,"
+a kind of pattern matching of an lexical token against file names.
+These characters also often need to be quoted.
+The most simple kind of quoting is that with the character `\e',
+thus `\e>' is the same as the character `>',
+but will not be recognized as a syntactic metacharacter for output
+file redirection.
+There is a way to quote longer strings using either the delimiter
+`\'' or `"'.
+Thus the construct:
+.dt
+.s3
+       echo "*** NOTES ***"
+.s3
+could be used to prevent the spaces and `*'s from having their
+special meaning.
+It should be noted that no quoting, expansion or substitution of
+any kind occurs within `\''s or `"'s, and that the quoting
+must terminate before an end of line.
+It is also possible in the shell to escape the newline character with
+a `\e', this causing the newline to be effectively replaced by a blank.
+.s3
+.bd "Syntactic structure."
+The syntactic structure of the input to
+.it sh
+is essentially the same as that to
+.it sh
+(I).
+The fundamental component of a command is a
+.it pipeline,
+which consists of one or more commands separated by the character
+`|' or `^', with the separator optionally followed by the character `*',
+i.e. `|*' or `^*'.
+Each command in the pipeline has its standard output connected to the
+standard input of the next.
+The forms with the character `*' cause the diagnostic output to go through
+the pipe with the standard output.
+.s3
+More than one pipeline may be given on a single line if they
+are separated by the sequential execution separator `;'.
+The separator `&' termiates such a list of commands and causes
+the entire list to be executed without waiting for termination.
+The variable
+.it pcs
+is set to the process id of the shell co-ordinating the execution
+of the command list, and this number is typed on the shells diagnostic output.
+When the command terminates,
+.it pcs
+is
+.it unset.
+Note that the command
+.s3
+       date ; echo boo &
+.s3
+is thus equivalent to
+.s3
+       (date ; echo boo) &
+.s3
+rather than like
+.s3
+       date ; (echo boo&)
+.s3
+as it is in
+.it sh
+(I).
+.s3
+Finally, the basic commands are composed of a command name and
+a list of (zero or more) arguments.
+There may also be input or output redirection specifiers of the form
+`<', `>' or `>>', possibly followed by `*', and then a parameter
+specifying a file name.
+The `*' here, as in the pipe specifiers above, specifies that diagnostic
+output is to be redirected with standard output (and is thus not
+allowed with `<'.)
+The form `< name' causes the standard input to be taken from the file
+.it name,
+which is first subjected to
+.it "filename expansion"
+as described below if it contains any of the characters
+`*', `?' or `['.
+The form `> name' causes the standard output to be put in the file
+.it name
+which is created, or truncated to length zero before execution begins
+if it exists.
+The form `>> name' is like `> name' but output is put at the end of
+.it name
+if it already exists.
+It should be noted that when a pipeline is executed in the background,
+the first element of the pipeline will take input from
+.it /dev/null
+unless the input is otherwise redirected.
+.s3
+A final syntactic structuring is provided by parentheses `(' and `)'.
+A command may be given as a ny of the forms given above thus enclosed
+and participate in a pipeline.
+Thus,
+.s3
+       (date; time; echo "***") | lpr
+.s3
+executes the commands
+.it date,
+.it time,
+and echoes the character string `***' to the line printer daemon
+.it lpr.
+.s3
+.bd "Command execution."
+When a command is to be executed,
+the shell first examines the command name to see if it is a name
+of a built-in command.
+If it is not, then the shell will see if the name is actually
+an
+.it alias
+of another name.
+If it is, then the process starts over again,
+wiht the command name replaced by its
+.it alias.
+This process of alternately checking for built-in commands and for
+aliases will continue up to 100 times to allow multiple aliases.
+If this process terminates with the recognition of a built-in command
+then that command will be performed.
+If not, then the shell will attempt to find the resulting command in the
+directories in its search path as defined by the value of the
+variable
+.it path.
+This variable consists of a sequence of directory names separated by
+the character `\-'.
+The default value for
+.it path
+is
+`\-/bin\-/usr/bin'
+where here the initial `\-' signals that the first directory to
+be searched is `.', which is the same as the null string.
+After this, we are to search the directories `/bin' and `/usr/bin'
+for commands.
+If the variable
+.it path
+is not set, then the value `\-' is assumed, causing
+only the current directory to be searched.
+If the given command name includes the character `/',
+then it will be executed if and only if the path includes a null
+directory specification, and never from other prefixes in the path.
+Thus even if there is a `/bin/bin/date',
+`bin/date' will not find it with the default path.
+If the command name contains `*', '?' or `[',
+then it will undergo
+.it "filename expansion"
+as described below and will be interpreted only
+relative to the current directory or as a full path name.
+.s3
+There is a general process of
+.it "filename expansion"
+applied to the arguments to the command.
+In this process the characters `*', `?' and `[' have special meaning.
+The character `*' will match any sequence of characters in a file name,
+the character `?' any single character,
+and the construct
+`[chars]' will match any of the characters in
+.it chars
+with the construct
+`x\-y'
+within chars standing for all characters between and including `x' and `y'.
+This process applies to arbitrary path names, and is subject to two
+restrictions.
+First, each `/' in such a path name must appear explicitly in the
+pattern \- `/'s are never matched by `*', `/' or a `[' construct.
+Similarly, if the first character of a file name is the character
+`.', it must be matched explicitly with a character `.' in the pattern.
+If, during command argument expansion, some arguments specify
+filename expansion, but none of these arguments matches any file
+name, then a diagnostic ``No match'' will be given and the command
+will be suppressed.
+.s3
+A special variant of this filename substitution occurs in input
+redirect filenames, command names, and arguments to the built-in
+command
+.it chdir.
+Here the expansion must result in exactly one filename or a diagnostic
+will be printed indicating that the given pattern is ``Ambiguous''.
+.s3
+If the shell finds a file which is executable but is not recognized
+by the system as an object file, then it will be examined to see if
+it is appropriate to be used as a shell script or by one of the
+interpreters the shell knows about.
+If the first word of the file contains the magic number of one of
+the interpreters, e.g. 0404 octal for the Pascal interpreter
+.it px
+(VI),
+then this interpreter will be forked with the arguments shifted
+to the right, the name of the file becoming the first argument.
+If the first word of the file does not indicate any of the interpreters,
+yet contains
+\s-2ASCII\s0
+characters then a shell will be invoked as an interpreter.
+The path name for this shell may be specified using the
+.it shell
+variable.
+.s3
+When a command terminates, if it terminates abnormally, a message
+will be printed indicating the cause of abnormal termination.
+If the command was not the one being waited for, i.e. if a background
+process started with `&' terminates abnormally,
+its process number will also be given.
+Finally, a time statistics line may be printed at command termination.
+This is described with the
+.it time
+variable below.
+.s3
+.bd "Predefined and special variables."
+The following variables have special meaning to the shell and
+affect its behavior or are set as side effects of various commands.
+.s3
+.lp +15 12
+home   Set to the users home directory as given in the
+.it htmp
+data base.
+Usually the directory where the user logs in, this is the default
+destination for a
+.it chdir
+command.
+.s3
+.lp +15 12
+nargs  Maintained as the number of arguments in the current argument
+list.
+.s3
+.lp +15 12
+nice   If given a numeric value, each executed command will be
+.it niced
+to this priority immediately before execution.
+.s3
+.lp +15 12
+path   Specifies the search path for command executions as described
+above.
+.s3
+.lp +15 12
+pcs    The process number of the last command started with `&'.
+Unset when this command completes.
+.s3
+.lp +15 12
+pid    The process number of the shell; used in `$$'.
+.s3
+.lp +15 12
+prompt The prompt which preceded each command line interactively.
+If the shell is not interactive, then this variable is not set.
+.s3
+.lp +15 12
+shell  The shell which is the default interpreter for executable
+files not recognized by the system.
+Defaults to `/usr/pascal/sh', the current home of
+.it sh.
+.s3
+.lp +15 12
+time   When set, causes a command statistic line to be given following
+each executed command.
+This line includes the number of user cpu seconds, system cpu seconds,
+real time in hours minutes and seconds, and
+the machine utilization over this period expressed as a percentage.
+If given a numeric value,
+statistics will be given only for commands requiring more than
+this many total cpu seconds.
+.i0
+.s3
+.bd "Start up processing."
+When a new shell is created it first sets the
+.it home
+variable from the
+.it htmp
+database,
+initializes the
+.it prompt,
+.it shell,
+and
+.it pid
+variables and sets up any default aliases and interpreters.
+(Current default \fIalias\fR is ``time'' for ``tyme'',
+interpreter is ``/bin/px'' on value 0404.)
+The shell then process the command line arguments as follows:
+.s3
+.lp +7 5
+\fB\-V\fR      Causes the shell to be
+.it verbose
+like \fB\-v\fR, but even when processing
+the startup files, e.g.
+.it \&.profile.
+.s3
+.lp +7 5
+\fB\-v\fR      Causes the shell to be verbose; command input
+is echoed to the output with indication of the arguments which
+were substituted for parameters with the `$' mechanisms;
+such substitutions are bracketed with `[' and `]' for visibility.
+.s3
+.lp +7 5
+\fB\-c\fR      Causes the shell to take as input the contents
+of the immediately following string.
+.s3
+.lp +7 5
+\fB\-t\fR      Causes the shell to read exactly one line of
+input from its standard input.
+.s3
+.lp +7 5
+\fB\-i\fR      Causes the shell to be interactive:
+the remaining arguments are \fInot\fR interpreted as a file to
+be executed and parameters,
+and the shell ignores interrupts and quits and prompts
+for input.
+Shells which have standard input and output teletypes
+also are interactive in the sense that they ignore interrupts and quits.
+.i0
+.s3
+If either the
+.bd \-c
+or
+.bd \-t
+flag is given, then the shell does not prompt, i.e.
+.it prompt
+is unset.
+If none of the
+\fB\-c\fR,
+\fB\-i\fR,
+or
+\fB\-t\fR
+flags are given,
+then the first argument
+argument is taken to be the name of a file containing commands to be executed.
+This argument becomes available as the 0'th parameter during
+interpretation, i.e. `$0'.
+Its value is immune to
+.it shift
+and
+.it rewind
+operations.
+The remaining arguments become the positional parameters,
+`$1', `$2', etc.
+The number of such positional parameters will be given by the variable
+.it nargs.
+These parameters may be manipulated by
+.it rewind
+and
+.it shift
+and given new values by
+.it set.
+.s3
+After setting up all of this, the shell will read commands from
+the file
+.it \&.profile
+in the user's home directory.
+This file is typically used to set aliases and variables
+that the user wishes and also to change the value of
+.it path.
+If the shell is a login shell,
+defined as having been invoked with a name which started with `\-',
+the shell will then read commands from the file `.login' in the same directory.
+Shells normally terminate when they receive an end-of-file from their
+standard input;
+login shells will print ``logout'' when this occurs and execute the commands
+from the file `.logout' in the home directory.
+The home directory for the purpose of finding `.logout' is independent
+of the current value of the variable
+.it home.
+.s3
+.bd "Built-in commands."
+The following commands are built into the shell.
+Input and output redirections have no effect on these commands,
+and are not allowed.
+Note also that since the command
+.it if
+(I)
+is not done within the shell, it cannot, in general,
+be used to qualify a built-in command.
+In general, therefore, the shell control structure must be used like
+\s-2FORTRAN\-II\s0
+with only
+.it goto
+(I)
+commands on
+.it if
+(I)
+commands.
+.s3
+.lp +12 10
+abort  Terminate abnormally.
+Useful only for shell debugging or fits of frenzy.
+.s3
+.lp +12 10
+alias  Specify an alias for a command.
+When given two arguments the first argument is given alias the second
+argument.
+When given one argument the alias for that argument will be given.
+When given no arguments all aliases are given.
+.s3
+.lp +12 10
+chdir  Change directory.
+If no argument is given change to the directory in the variable
+.it home.
+The argument may contain the metacharacters `*', `?' and `['
+which are interpreted as for executed commands.
+This is the only built-in function which takes such arguments.
+.s3
+.lp +12 10
+interp Specify interpreters.
+Same as
+.it alias
+except that the first argument is the value of the first word of
+a file for this interpreter, i.e. its magic number,
+and the second is the name of the interpreter.
+.s3
+.lp +12 10
+logout Same as a control-d.
+.s3
+.lp +12 10
+noquit Causes the shell to ignore \s-2QUIT\s0 signals.
+This is the default.
+.s3
+.lp +12 10
+quit   Causes the shell to not ignore \s-2QUIT\s0 signals
+for the purposes of debugging.
+.s3
+.lp +12 10
+rewind Causes the shell to reset the argument list to the state
+at entry, reversing the effect of all
+.it shifts.
+.s3
+.lp +12 10
+set    Give one or more variables or parameters new values.
+With no arguments types the names and values of all variables.
+The simples kind of set is to set a variable `on', i.e. to
+the null string.
+To do this you can just mention its name, i.e.
+.s3
+       set time
+.s3
+It is also possible to give variables string values by specifying
+the value after an `=', thus
+.s3
+       set time=  prompt="+ "
+.s3
+sets
+.it time
+in the same was as the previous example, and also changes
+the
+.it prompt.
+Finally, it is possible to do arithmetic in the
+.it set
+command.
+Operators available are `+=', `\-=', `*=', `/=', `|=',
+`&=', `%=', `=', `++' and `\-\-'.
+Thus
+.s3
+       set i++ j*=$i
+.s3
+increments the value of variable
+.it i
+and then multiples the value of the variable
+.it j
+by the value of the variable
+.it i.
+Note that the operators `|' and `&' must be quoted, i.e.:
+.s3
+       set i\e|=1
+.s3
+to make the value of
+.it i
+be odd.
+One final operator is `@' which is equivalent to an
+.it unset.
+All of these operators except `@' may be applied to parameters, e.g.:
+.s3
+       set 0=a.out 1=$.1
+.s3
+.lp +12 10
+shift  Causes the argument list to be right shifted, argument 2
+becoming argument 1, etc.
+May be given a count, possibly negative, for multiple right or
+left shifts, i.e. `shift \-1' for a left shift.
+.s3
+.lp +12 10
+tyme   An internal version of \fItime\fR corresponding to ``set time''
+for the course of the command.
+Does not work correctly for `&' processes.
+Note that \fItime\fR is aliased to
+.it tyme
+by default.
+.s3
+.lp +12 10
+unalias        Given a parameter, removes that alias from the list of aliases.
+.s3
+.lp +12 10
+uninterp       Like unalias for interpreters, takes the magic number and
+removes the corresponding entry.
+.s3
+.lp +12 10
+unset  Removes the specified variables.
+.s3
+.lp +12 10
+wait   Wait for all processes to terminate,
+or for the specified process to terminate.
+.it Wait
+may be aborted with an
+\s-2INTERRUPT\s0.
+.s3
+.lp +12 10
+:      Label marker for
+.it goto
+targets.
+.i0
+.sh FILES
+.dt
+/etc/htmp              home directory data base
+.br
+/etc/passwd            home directory data when not in \fIhtmp\fR
+.br
+\&.login                       start-up for login shells
+.br
+\&.logout                      prologue for login shells
+.br
+\&.profile                     beginning script for all shells
+.br
+/dev/null              source of end-of-file
+.sh SEE\ ALSO
+sh (I), chdir (I), chdir (II), if (I), goto (I)
+.sh AUTHOR
+William N. Joy
+.sh BUGS
+As this is an experimental shell, there are probably several.
+Mostly, the design has a lot of rough edges and the new features
+don't always ``like'' each other.
+Some of them can't be successfully mixed.