From: Bill Joy Date: Wed, 23 Nov 1977 20:43:54 +0000 (-0800) Subject: BSD 1 development X-Git-Tag: BSD-1~216 X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/commitdiff_plain/0632d7e356c80254df93670ec4b714e18d0b5a71?hp=bf436de58ded4fb0d91ab479e3044498ca830910 BSD 1 development 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 --- diff --git a/man6/cptree.6 b/man6/cptree.6 new file mode 100644 index 0000000000..f17a131b28 --- /dev/null +++ b/man6/cptree.6 @@ -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 index 0000000000..329ccaa423 --- /dev/null +++ b/man6/cr3.6 @@ -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 index 0000000000..a53406abe1 --- /dev/null +++ b/man6/dates.6 @@ -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 index 0000000000..acca5c63f2 --- /dev/null +++ b/man6/expand.6 @@ -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 index 0000000000..3ae7ac3f9e --- /dev/null +++ b/man6/file.6 @@ -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 index 0000000000..f84fdaaf19 --- /dev/null +++ b/man6/fold.6 @@ -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 index 0000000000..6a07ac9f0e --- /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.