Annotation of researchv10dc/man/manb/csh.1, revision 1.1

1.1     ! root        1: .de sh
        !             2: .br
        !             3: .ne 5
        !             4: .PP
        !             5: \fB\\$1\fR
        !             6: .PP
        !             7: ..
        !             8: .if n .ds ua \o'^|'
        !             9: .if t .ds ua \(ua
        !            10: .if n .ds aa '
        !            11: .if t .ds aa \(aa
        !            12: .if n .ds ga `
        !            13: .if t .ds ga \(ga
        !            14: .if t .tr *\(**
        !            15: .TH CSH 1 9/28/80
        !            16: .UC 4
        !            17: .SH NAME
        !            18: csh \- a shell (command interpreter) with C-like syntax
        !            19: .SH SYNOPSIS
        !            20: .B csh
        !            21: [
        !            22: .B \-cef\^instvVxX
        !            23: ] [
        !            24: arg ...
        !            25: ]
        !            26: .SH DESCRIPTION
        !            27: .I Csh
        !            28: is a first implementation of a command language interpreter
        !            29: incorporating a history mechanism (see
        !            30: .B "History Substitutions)"
        !            31: job control facilities
        !            32: (see
        !            33: .B Jobs)
        !            34: and a C-like syntax.
        !            35: So as to be able to use its job control facilities, users of
        !            36: .I csh
        !            37: must (and automatically) use the new tty driver summarized in
        !            38: .IR newtty (4)
        !            39: and fully described in
        !            40: .IR tty (4).
        !            41: This new tty driver allows generation of interrupt characters
        !            42: from the keyboard to tell jobs to stop.
        !            43: See
        !            44: .IR stty (1)
        !            45: for details on setting options in the new tty driver.
        !            46: .PP
        !            47: An instance of
        !            48: .I csh
        !            49: begins by executing commands from the file `.cshrc'
        !            50: in the
        !            51: .I home
        !            52: directory of the invoker.
        !            53: If this is a login shell then it also executes commands from the file
        !            54: `.login' there.
        !            55: It is typical for users on crt's to put the command ``stty crt'' in their
        !            56: .I \&.login
        !            57: file, and to also invoke
        !            58: .IR tset (1)
        !            59: there.
        !            60: .PP
        !            61: In the normal case, the shell will then begin reading commands from the
        !            62: terminal, prompting with `% '.
        !            63: Processing of arguments and the use of the shell to process files
        !            64: containing command scripts will be described later.
        !            65: .PP
        !            66: The shell then repeatedly performs the following actions:
        !            67: a line of command input is read and broken into
        !            68: .I words.
        !            69: This sequence of words is placed on the command history list and then parsed.
        !            70: Finally each command in the current line is executed.
        !            71: .PP
        !            72: When a login shell terminates it executes commands from the file `.logout'
        !            73: in the users home directory.
        !            74: .sh "Lexical structure"
        !            75: The shell splits input lines into words at blanks and tabs with the
        !            76: following exceptions.
        !            77: The characters
        !            78: `&' `|' `;' `<' `>' `(' `)'
        !            79: form separate words.
        !            80: If doubled in `&&', `|\|\||', `<<' or `>>' these pairs form single words.
        !            81: These parser metacharacters may be made part of other words, or prevented their
        !            82: special meaning, by preceding them with `\e'.
        !            83: A newline preceded by a `\e' is equivalent to a blank.
        !            84: .PP
        !            85: In addition strings enclosed in matched pairs of quotations,
        !            86: `\*(aa', `\*(ga' or `"',
        !            87: form parts of a word; metacharacters in these strings, including blanks
        !            88: and tabs, do not form separate words.
        !            89: These quotations have semantics to be described subsequently.
        !            90: Within pairs of `\'' or `"' characters a newline preceded by a `\e' gives
        !            91: a true newline character.
        !            92: .PP
        !            93: When the shell's input is not a terminal,
        !            94: the character `#' introduces a comment which continues to the end of the
        !            95: input line.
        !            96: It is prevented this special meaning when preceded by `\e'
        !            97: and in quotations using `\`', `\'', and `"'.
        !            98: .sh "Commands"
        !            99: A simple command is a sequence of words, the first of which
        !           100: specifies the command to be executed.
        !           101: A simple command or
        !           102: a sequence of simple commands separated by `|' characters
        !           103: forms a pipeline.
        !           104: The output of each command in a pipeline is connected to the input of the next.
        !           105: Sequences of pipelines may be separated by `;', and are then executed
        !           106: sequentially.
        !           107: A sequence of pipelines may be executed without immediately 
        !           108: waiting for it to terminate by following it with an `&'.
        !           109: .PP
        !           110: Any of the above may be placed in `(' `)' to form a simple command (which
        !           111: may be a component of a pipeline, etc.)
        !           112: It is also possible to separate pipelines with `|\|\||' or `&&' indicating,
        !           113: as in the C language,
        !           114: that the second is to be executed only if the first fails or succeeds
        !           115: respectively. (See
        !           116: .I Expressions.)
        !           117: .sh "Jobs"
        !           118: The shell associates a \fIjob\fR with each pipeline.  It keeps
        !           119: a table of current jobs, printed by the
        !           120: \fIjobs\fR command, and assigns them small integer numbers.  When
        !           121: a job is started asynchronously with `&', the shell prints a line which looks
        !           122: like:
        !           123: .PP
        !           124: .DT
        !           125:        [1] 1234
        !           126: .PP
        !           127: indicating that the jobs which was started asynchronously was job number
        !           128: 1 and had one (top-level) process, whose process id was 1234.
        !           129: .PP
        !           130: If you are running a job and wish to do something else you may hit the key
        !           131: \fB^Z\fR (control-Z) which sends a STOP signal to the current job.
        !           132: The shell will then normally indicate that the job has been `Stopped',
        !           133: and print another prompt.  You can then manipulate the state of this job,
        !           134: putting it in the background with the \fIbg\fR command, or run some other
        !           135: commands and then eventually bring the job back into the foreground with
        !           136: the foreground command \fIfg\fR.  A \fB^Z\fR takes effect immediately and
        !           137: is like an interrupt in that pending output and unread input are discarded
        !           138: when it is typed.  There is another special key \fB^Y\fR which does 
        !           139: not generate a STOP signal until a program attempts to
        !           140: .IR read (2)
        !           141: it.
        !           142: This can usefully be typed ahead when you have prepared some commands
        !           143: for a job which you wish to stop after it has read them.
        !           144: .PP
        !           145: A job being run in the background will stop if it tries to read
        !           146: from the terminal.  Background jobs are normally allowed to produce output,
        !           147: but this can be disabled by giving the command ``stty tostop''.
        !           148: If you set this
        !           149: tty option, then background jobs will stop when they try to produce
        !           150: output like they do when they try to read input.
        !           151: .PP
        !           152: There are several ways to refer to jobs in the shell.  The character
        !           153: `%' introduces a job name.  If you wish to refer to job number 1, you can
        !           154: name it as `%1'.  Just naming a job brings it to the foreground; thus
        !           155: `%1' is a synonym for `fg %1', bringing job 1 back into the foreground.
        !           156: Similarly saying `%1 &' resumes job 1 in the background.
        !           157: Jobs can also be named by prefixes of the string typed in to start them,
        !           158: if these prefixes are unambiguous, thus `%ex' would normally restart
        !           159: a suspended
        !           160: .IR ex (1)
        !           161: job, if there were only one suspended job whose name began with
        !           162: the string `ex'.  It is also possible to say `%?string'
        !           163: which specifies a job whose text contains
        !           164: .I string,
        !           165: if there is only one such job.
        !           166: .PP
        !           167: The shell maintains a notion of the current and previous jobs.
        !           168: In output pertaining to jobs, the current job is marked with a `+'
        !           169: and the previous job with a `\-'.  The abbreviation `%+' refers
        !           170: to the current job and `%\-' refers to the previous job.  For close
        !           171: analogy with the syntax of the
        !           172: .I history
        !           173: mechanism (described below),
        !           174: `%%' is also a synonym for the current job.
        !           175: .sh "Status reporting"
        !           176: This shell learns immediately whenever a process changes state.
        !           177: It normally informs you whenever a job becomes blocked so that
        !           178: no further progress is possible, but only just before it prints
        !           179: a prompt.  This is done so that it does not otherwise disturb your work.
        !           180: If, however, you set the shell variable
        !           181: .I notify,
        !           182: the shell will notify you immediately of changes of status in background
        !           183: jobs.
        !           184: There is also a shell command
        !           185: .I notify
        !           186: which marks a single process so that its status changes will be immediately
        !           187: reported.  By default 
        !           188: .I notify
        !           189: marks the current process;
        !           190: simply say `notify' after starting a background job to mark it.
        !           191: .PP
        !           192: When you try to leave the shell while jobs are stopped, you will
        !           193: be warned that `You have stopped jobs.'  You may use the \fIjobs\fR
        !           194: command to see what they are.  If you do this or immediately try to
        !           195: exit again, the shell will not warn you a second time, and the suspended
        !           196: jobs will be terminated.
        !           197: .sh Substitutions
        !           198: We now describe the various transformations the shell performs on the
        !           199: input in the order in which they occur.
        !           200: .sh "History substitutions"
        !           201: History substitutions place words from previous command input as portions
        !           202: of new commands, making it easy to repeat commands, repeat arguments
        !           203: of a previous command in the current command, or fix spelling mistakes
        !           204: in the previous command with little typing and a high degree of confidence.
        !           205: History substitutions begin with the character `!' and may begin
        !           206: .B anywhere
        !           207: in the input stream (with the proviso that they
        !           208: .B "do not"
        !           209: nest.)
        !           210: This `!' may be preceded by an `\e' to prevent its special meaning; for
        !           211: convenience, a `!' is passed unchanged when it is followed by a blank,
        !           212: tab, newline, `=' or `('.
        !           213: (History substitutions also occur when an input line begins with `\*(ua'.
        !           214: This special abbreviation will be described later.)
        !           215: Any input line which contains history substitution is echoed on the terminal
        !           216: before it is executed as it could have been typed without history substitution.
        !           217: .PP
        !           218: Commands input from the terminal which consist of one or more words
        !           219: are saved on the history list.
        !           220: The history substitutions reintroduce sequences of words from these
        !           221: saved commands into the input stream.
        !           222: The size of which is controlled by the
        !           223: .I history
        !           224: variable; the previous command is always retained, regardless of its value.
        !           225: Commands are numbered sequentially from 1.
        !           226: .PP
        !           227: For definiteness, consider the following output from the
        !           228: .I history
        !           229: command:
        !           230: .PP
        !           231: .DT
        !           232: .br
        !           233:        \09  write michael
        !           234: .br
        !           235:        10  ex write.c
        !           236: .br
        !           237:        11  cat oldwrite.c
        !           238: .br
        !           239:        12  diff *write.c
        !           240: .PP
        !           241: The commands are shown with their event numbers.
        !           242: It is not usually necessary to use event numbers, but the current event
        !           243: number can be made part of the
        !           244: .I prompt
        !           245: by placing an `!' in the prompt string.
        !           246: .PP
        !           247: With the current event 13 we can refer to previous events by event
        !           248: number `!11', relatively as in `!\-2' (referring to the same event),
        !           249: by a prefix of a command word
        !           250: as in `!d' for event 12 or `!wri' for event 9, or by a string contained in
        !           251: a word in the command as in `!?mic?' also referring to event 9.
        !           252: These forms, without further modification, simply reintroduce the words
        !           253: of the specified events, each separated by a single blank.
        !           254: As a special case `!!' refers to the previous command; thus `!!'
        !           255: alone is essentially a
        !           256: .I redo.
        !           257: .PP
        !           258: To select words from an event we can follow the event specification by
        !           259: a `:' and a designator for the desired words.
        !           260: The words of a input line are numbered from 0,
        !           261: the first (usually command) word being 0, the second word (first argument)
        !           262: being 1, etc.
        !           263: The basic word designators are:
        !           264: .PP
        !           265: .DT
        !           266: .nf
        !           267:        0       first (command) word
        !           268:        \fIn\fR \fIn\fR\|'th argument
        !           269:        \*(ua   first argument,  i.e. `1'
        !           270:        $       last argument
        !           271:        %       word matched by (immediately preceding) ?\fIs\fR\|? search
        !           272:        \fIx\fR\|\-\fIy\fR      range of words
        !           273:        \-\fIy\fR       abbreviates `0\-\fIy\fR\|'
        !           274:        *       abbreviates `\*(ua\-$', or nothing if only 1 word in event
        !           275:        \fIx\fR\|*      abbreviates `\fIx\fR\|\-$'
        !           276:        \fIx\fR\|\-     like `\fIx\fR\|*' but omitting word `$'
        !           277: .fi
        !           278: .PP
        !           279: The `:' separating the event specification from the word designator
        !           280: can be omitted if the argument selector begins with a `\*(ua', `$', `*'
        !           281: `\-' or `%'.
        !           282: After the optional word designator can be
        !           283: placed a sequence of modifiers, each preceded by a `:'.
        !           284: The following modifiers are defined:
        !           285: .ta .5i 1.2i
        !           286: .PP
        !           287: .nf
        !           288:        h       Remove a trailing pathname component, leaving the head.
        !           289:        r       Remove a trailing `.xxx' component, leaving the root name.
        !           290:        e       Remove all but the extension `.xxx' part.
        !           291:        s/\fIl\fR\|/\fIr\fR\|/  Substitute \fIl\fR for \fIr\fR
        !           292:        t       Remove all leading pathname components, leaving the tail.
        !           293:        &       Repeat the previous substitution.
        !           294:        g       Apply the change globally, prefixing the above, e.g. `g&'.
        !           295:        p       Print the new command but do not execute it.
        !           296:        q       Quote the substituted words, preventing further substitutions.
        !           297:        x       Like q, but break into words at blanks, tabs and newlines.
        !           298: .fi
        !           299: .PP
        !           300: Unless preceded by a `g' the modification is applied only to the first
        !           301: modifiable word.  With substitutions, it is an error for no word to be
        !           302: applicable.
        !           303: .PP
        !           304: The left hand side of substitutions are not regular expressions in the sense
        !           305: of the editors, but rather strings.
        !           306: Any character may be used as the delimiter in place of `/';
        !           307: a `\e' quotes the delimiter into the
        !           308: .IR l ""
        !           309: and
        !           310: .IR r ""
        !           311: strings.
        !           312: The character `&' in the right hand side is replaced by the text from
        !           313: the left.
        !           314: A `\e' quotes `&' also.
        !           315: A null
        !           316: .IR l ""
        !           317: uses the previous string either from a
        !           318: .IR l ""
        !           319: or from a
        !           320: contextual scan string
        !           321: .IR s ""
        !           322: in `!?\fIs\fR\|?'.
        !           323: The trailing delimiter in the substitution may be omitted if a newline
        !           324: follows immediately as may the trailing `?' in a contextual scan.
        !           325: .PP
        !           326: A history reference may be given without an event specification, e.g. `!$'.
        !           327: In this case the reference is to the previous command unless a previous
        !           328: history reference occurred on the same line in which case this form repeats
        !           329: the previous reference.
        !           330: Thus `!?foo?\*(ua !$' gives the first and last arguments
        !           331: from the command matching `?foo?'.
        !           332: .PP
        !           333: A special abbreviation of a history reference occurs when the first
        !           334: non-blank character of an input line is a `\*(ua'.
        !           335: This is equivalent to `!:s\*(ua' providing a convenient shorthand for substitutions
        !           336: on the text of the previous line.
        !           337: Thus `\*(ualb\*(ualib' fixes the spelling of 
        !           338: `lib'
        !           339: in the previous command.
        !           340: Finally, a history substitution may be surrounded with `{' and `}'
        !           341: if necessary to insulate it from the characters which follow.
        !           342: Thus, after `ls \-ld ~paul' we might do `!{l}a' to do `ls \-ld ~paula',
        !           343: while `!la' would look for a command starting `la'.
        !           344: .PP
        !           345: .if n .ul
        !           346: \fBQuotations\ with\ \'\ and\ "\fR
        !           347: .PP
        !           348: The quotation of strings by `\'' and `"' can be used
        !           349: to prevent all or some of the remaining substitutions.
        !           350: Strings enclosed in `\'' are prevented any further interpretation.
        !           351: Strings enclosed in `"' are yet variable and command expanded
        !           352: as described below.
        !           353: .PP
        !           354: In both cases the resulting text becomes (all or part of) a single word;
        !           355: only in one special case (see
        !           356: .I "Command Substitition"
        !           357: below) does a `"' quoted string yield parts of more than one word;
        !           358: `\'' quoted strings never do.
        !           359: .sh "Alias substitution"
        !           360: The shell maintains a list of aliases which can be established, displayed
        !           361: and modified by the
        !           362: .I alias
        !           363: and
        !           364: .I unalias
        !           365: commands.
        !           366: After a command line is scanned, it is parsed into distinct commands and
        !           367: the first word of each command, left-to-right, is checked to see if it
        !           368: has an alias.
        !           369: If it does, then the text which is the alias for that command is reread
        !           370: with the history mechanism available
        !           371: as though that command were the previous input line.
        !           372: The resulting words replace the
        !           373: command and argument list.
        !           374: If no reference is made to the history list, then the argument list is
        !           375: left unchanged.
        !           376: .PP
        !           377: Thus if the alias for `ls' is `ls \-l' the command `ls /usr' would map to
        !           378: `ls \-l /usr', the argument list here being undisturbed.
        !           379: Similarly if the alias for `lookup' was `grep !\*(ua /etc/passwd' then
        !           380: `lookup bill' would map to `grep bill /etc/passwd'.
        !           381: .PP
        !           382: If an alias is found, the word transformation of the input text
        !           383: is performed and the aliasing process begins again on the reformed input line.
        !           384: Looping is prevented if the first word of the new text is the same as the old
        !           385: by flagging it to prevent further aliasing.
        !           386: Other loops are detected and cause an error.
        !           387: .PP
        !           388: Note that the mechanism allows aliases to introduce parser metasyntax.
        !           389: Thus we can `alias print \'pr \e!* \||\| lpr\'' to make a command which
        !           390: .I pr's
        !           391: its arguments to the line printer.
        !           392: .sh "Variable substitution"
        !           393: The shell maintains a set of variables, each of which has as value a list
        !           394: of zero or more words.
        !           395: Some of these variables are set by the shell or referred to by it.
        !           396: For instance, the
        !           397: .I argv
        !           398: variable is an image of the shell's argument list, and words of this
        !           399: variable's value are referred to in special ways.
        !           400: .PP
        !           401: The values of variables may be displayed and changed by using the
        !           402: .I set
        !           403: and
        !           404: .I unset
        !           405: commands.
        !           406: Of the variables referred to by the shell a number are toggles;
        !           407: the shell does not care what their value is,
        !           408: only whether they are set or not.
        !           409: For instance, the
        !           410: .I verbose
        !           411: variable is a toggle which causes command input to be echoed.
        !           412: The setting of this variable results from the
        !           413: .B \-v
        !           414: command line option.
        !           415: .PP
        !           416: Other operations treat variables numerically.
        !           417: The `@' command permits numeric calculations to be performed and the result
        !           418: assigned to a variable.
        !           419: Variable values are, however, always represented as (zero or more) strings.
        !           420: For the purposes of numeric operations, the null string is considered to be
        !           421: zero, and the second and subsequent words of multiword values are ignored.
        !           422: .PP
        !           423: After the input line is aliased and parsed, and before each command
        !           424: is executed, variable substitution
        !           425: is performed keyed by `$' characters.
        !           426: This expansion can be prevented by preceding the `$' with a `\e' except
        !           427: within `"'s where it
        !           428: .B always
        !           429: occurs, and within `\''s where it
        !           430: .B never
        !           431: occurs.
        !           432: Strings quoted by `\*(ga' are interpreted later (see
        !           433: .I "Command substitution"
        !           434: below) so `$' substitution does not occur there until later, if at all.
        !           435: A `$' is passed unchanged if followed by a blank, tab, or end-of-line.
        !           436: .PP
        !           437: Input/output redirections are recognized before variable expansion,
        !           438: and are variable expanded separately.
        !           439: Otherwise, the command name and entire argument list are expanded together.
        !           440: It is thus possible for the first (command) word to this point to generate
        !           441: more than one word, the first of which becomes the command name,
        !           442: and the rest of which become arguments.
        !           443: .PP
        !           444: Unless enclosed in `"' or given the `:q' modifier the results of variable
        !           445: substitution may eventually be command and filename substituted.
        !           446: Within `"' a variable whose value consists of multiple words expands to a
        !           447: (portion of) a single word, with the words of the variables value
        !           448: separated by blanks.
        !           449: When the `:q' modifier is applied to a substitution
        !           450: the variable will expand to multiple words with each word separated
        !           451: by a blank and quoted to prevent later command or filename substitution.
        !           452: .PP
        !           453: The following metasequences are provided for introducing variable values into
        !           454: the shell input.
        !           455: Except as noted, it is an error to reference a variable which is not set.
        !           456: .HP 5
        !           457: $name
        !           458: .br
        !           459: .ns
        !           460: .HP 5
        !           461: ${name}
        !           462: .br
        !           463: Are replaced by the words of the value of variable
        !           464: .I name,
        !           465: each separated by a blank.
        !           466: Braces insulate
        !           467: .I name
        !           468: from following characters which would otherwise be part of it.
        !           469: Shell variables have names consisting of up to 20 letters and digits
        !           470: starting with a letter.  The underscore character is considered a letter.
        !           471: .br
        !           472: If
        !           473: .I name
        !           474: is not a shell variable, but is set in the environment, then
        !           475: that value is returned (but \fB:\fR modifiers and the other forms
        !           476: given below are not available in this case).
        !           477: .HP 5
        !           478: $name[selector]
        !           479: .br
        !           480: .ns
        !           481: .HP 5
        !           482: ${name[selector]}
        !           483: .br
        !           484: May be used to select only some of the words from the value of
        !           485: .I name.
        !           486: The selector is subjected to `$' substitution and may consist of a single
        !           487: number or two numbers separated by a `\-'.
        !           488: The first word of a variables value is numbered `1'.
        !           489: If the first number of a range is omitted it defaults to `1'.
        !           490: If the last member of a range is omitted it defaults to `$#name'.
        !           491: The selector `*' selects all words.
        !           492: It is not an error for a range to be empty if the second argument is omitted
        !           493: or in range.
        !           494: .HP 5
        !           495: $#name
        !           496: .br
        !           497: .ns
        !           498: .HP 5
        !           499: ${#name}
        !           500: .br
        !           501: Gives the number of words in the variable.
        !           502: This is useful for later use in a `[selector]'.
        !           503: .HP 5
        !           504: $0
        !           505: .br
        !           506: Substitutes the name of the file from which command input is being read.
        !           507: An error occurs if the name is not known.
        !           508: .HP 5
        !           509: $number
        !           510: .br
        !           511: .ns
        !           512: .HP 5
        !           513: ${number}
        !           514: .br
        !           515: Equivalent to `$argv[number]'.
        !           516: .HP 5
        !           517: $*
        !           518: .br
        !           519: Equivalent to `$argv[*]'.
        !           520: .PP
        !           521: The modifiers `:h', `:t', `:r', `:q' and `:x' may be applied to
        !           522: the substitutions above as may `:gh', `:gt' and `:gr'.
        !           523: If braces `{' '}' appear in the command form then the modifiers
        !           524: must appear within the braces.
        !           525: .B  "The current implementation allows only one `:' modifier on each `$' expansion."
        !           526: .PP
        !           527: The following substitutions may not be modified with `:' modifiers.
        !           528: .HP 5
        !           529: $?name
        !           530: .br
        !           531: .ns
        !           532: .HP 5
        !           533: ${?name}
        !           534: .br
        !           535: Substitutes the string `1' if name is set, `0' if it is not.
        !           536: .HP 5
        !           537: $?0
        !           538: .br
        !           539: Substitutes `1' if the current input filename is know, `0' if it is not.
        !           540: .HP 5
        !           541: $$
        !           542: .br
        !           543: Substitute the (decimal) process number of the (parent) shell.
        !           544: .HP 5
        !           545: $<
        !           546: .br
        !           547: Substitutes a line from the standard
        !           548: input, with no further interpretation thereafter.  It can be used
        !           549: to read from the keyboard in a shell script.
        !           550: .sh "Command and filename substitution"
        !           551: The remaining substitutions, command and filename substitution,
        !           552: are applied selectively to the arguments of builtin commands.
        !           553: This means that portions of expressions which are not evaluated are
        !           554: not subjected to these expansions.
        !           555: For commands which are not internal to the shell, the command
        !           556: name is substituted separately from the argument list.
        !           557: This occurs very late,
        !           558: after input-output redirection is performed, and in a child
        !           559: of the main shell.
        !           560: .sh "Command substitution"
        !           561: Command substitution is indicated by a command enclosed in `\*(ga'.
        !           562: The output from such a command is normally broken into separate words
        !           563: at blanks, tabs and newlines, with null words being discarded,
        !           564: this text then replacing the original string.
        !           565: Within `"'s, only newlines force new words; blanks and tabs are preserved.
        !           566: .PP
        !           567: In any case, the single final newline does not force a new word.
        !           568: Note that it is thus possible for a command substitution to yield
        !           569: only part of a word, even if the command outputs a complete line.
        !           570: .sh "Filename substitution"
        !           571: If a word contains any of the characters `*', `?', `[' or `{'
        !           572: or begins with the character `~', then that word is a candidate for
        !           573: filename substitution, also known as `globbing'.
        !           574: This word is then regarded as a pattern, and replaced with an alphabetically
        !           575: sorted list of file names which match the pattern.
        !           576: In a list of words specifying filename substitution it is an error for
        !           577: no pattern to match an existing file name, but it is not required
        !           578: for each pattern to match.
        !           579: Only the metacharacters `*', `?' and `[' imply pattern matching,
        !           580: the characters `~' and `{' being more akin to abbreviations.
        !           581: .PP
        !           582: In matching filenames, the character `.' at the beginning of a filename
        !           583: or immediately following a `/', as well as the character `/' must
        !           584: be matched explicitly.
        !           585: The character `*' matches any string of characters, including the null
        !           586: string.
        !           587: The character `?' matches any single character.
        !           588: The sequence `[...]' matches any one of the characters enclosed.
        !           589: Within `[...]',
        !           590: a pair of characters separated by `\-' matches any character lexically between
        !           591: the two.
        !           592: .PP
        !           593: The character `~' at the beginning of a filename is used to refer to home
        !           594: directories.
        !           595: Standing alone, i.e. `~' it expands to the invokers home directory as reflected
        !           596: in the value of the variable
        !           597: .I home.
        !           598: When followed by a name consisting of letters, digits and `\-' characters
        !           599: the shell searches for a user with that name and substitutes their
        !           600: home directory;  thus `~ken' might expand to `/usr/ken' and `~ken/chmach'
        !           601: to `/usr/ken/chmach'.
        !           602: If the character `~' is followed by a character other than a letter or `/'
        !           603: or appears not at the beginning of a word,
        !           604: it is left undisturbed.
        !           605: .PP
        !           606: The metanotation `a{b,c,d}e' is a shorthand for `abe ace ade'.
        !           607: Left to right order is preserved, with results of matches being sorted
        !           608: separately at a low level to preserve this order.
        !           609: This construct may be nested.
        !           610: Thus `~source/s1/{oldls,ls}.c' expands to
        !           611: `/usr/source/s1/oldls.c /usr/source/s1/ls.c'
        !           612: whether or not these files exist without any chance of error
        !           613: if the home directory for `source' is `/usr/source'.
        !           614: Similarly `../{memo,*box}' might expand to `../memo ../box ../mbox'.
        !           615: (Note that `memo' was not sorted with the results of matching `*box'.)
        !           616: As a special case `{', `}' and `{}' are passed undisturbed.
        !           617: .sh Input/output
        !           618: The standard input and standard output of a command may be redirected
        !           619: with the following syntax:
        !           620: .HP 5
        !           621: < name
        !           622: .br
        !           623: Open file
        !           624: .I name
        !           625: (which is first variable, command and filename expanded) as the standard
        !           626: input.
        !           627: .HP 5
        !           628: << word
        !           629: .br
        !           630: Read the shell input up to a line which is identical to
        !           631: .I word.
        !           632: .I Word
        !           633: is not subjected to variable, filename or command substitution,
        !           634: and each input line is compared to
        !           635: .I word
        !           636: before any substitutions are done on this input line.
        !           637: Unless a quoting `\e', `"', `\*(aa' or `\*(ga' appears in
        !           638: .I word
        !           639: variable and command substitution is performed on the intervening lines,
        !           640: allowing `\e' to quote `$', `\e' and `\*(ga'.
        !           641: Commands which are substituted have all blanks, tabs, and newlines
        !           642: preserved, except for the final newline which is dropped.
        !           643: The resultant text is placed in an anonymous temporary file which
        !           644: is given to the command as standard input.
        !           645: .HP 5
        !           646: > name
        !           647: .br
        !           648: .ns
        !           649: .HP 5
        !           650: >! name
        !           651: .br
        !           652: .ns
        !           653: .HP 5
        !           654: >& name
        !           655: .br
        !           656: .ns
        !           657: .HP 5
        !           658: >&! name
        !           659: .br
        !           660: The file
        !           661: .I name
        !           662: is used as standard output.
        !           663: If the file does not exist then it is created;
        !           664: if the file exists, its is truncated, its previous contents being lost.
        !           665: .IP
        !           666: If the variable
        !           667: .I noclobber
        !           668: is set, then the file must not exist or be a character special file (e.g. a
        !           669: terminal or `/dev/null') or an error results.
        !           670: This helps prevent accidental destruction of files.
        !           671: In this case the `!' forms can be used and suppress this check.
        !           672: .IP
        !           673: The forms involving `&' route the diagnostic output into the specified
        !           674: file as well as the standard output.
        !           675: .I Name
        !           676: is expanded in the same way as `<' input filenames are.
        !           677: .HP 5
        !           678: >> name
        !           679: .br
        !           680: .ns
        !           681: .HP 5
        !           682: >>& name
        !           683: .br
        !           684: .ns
        !           685: .HP 5
        !           686: >>! name
        !           687: .br
        !           688: .ns
        !           689: .HP 5
        !           690: >>&! name
        !           691: .br
        !           692: Uses file
        !           693: .I name
        !           694: as standard output like `>' but places output at the end of the file.
        !           695: If the variable
        !           696: .I noclobber
        !           697: is set, then
        !           698: it is an error for the file not to exist unless
        !           699: one of the `!' forms is given.
        !           700: Otherwise similar to `>'.
        !           701: .PP
        !           702: A command receives the environment in which the shell was
        !           703: invoked as modified by the input-output parameters and
        !           704: the presence of the command in a pipeline.
        !           705: Thus, unlike some previous shells, commands run from a file of shell commands
        !           706: have no access to the text of the commands by default; rather
        !           707: they receive the original standard input of the shell.
        !           708: The `<<' mechanism should be used to present inline data.
        !           709: This permits shell command scripts to function as components of pipelines
        !           710: and allows the shell to block read its input.
        !           711: Note that the default standard input for a command run detached is
        !           712: .B not
        !           713: modified to be the empty file `/dev/null'; rather the standard input
        !           714: remains as the original standard input of the shell.  If this is a terminal
        !           715: and if the process attempts to read from the terminal, then the process
        !           716: will block and the user will be notified (see
        !           717: .B Jobs
        !           718: above.)
        !           719: .PP
        !           720: Diagnostic output may be directed through a pipe with the standard output.
        !           721: Simply use the form `|\|&' rather than just `|'.
        !           722: .sh Expressions
        !           723: A number of the builtin commands (to be described subsequently)
        !           724: take expressions, in which the operators are similar to those of C, with
        !           725: the same precedence.
        !           726: These expressions appear in the
        !           727: .I @,
        !           728: .I exit,
        !           729: .I if,
        !           730: and
        !           731: .I while
        !           732: commands.
        !           733: The following operators are available:
        !           734: .DT
        !           735: .PP
        !           736:        |\|\||  &&  |  \*(ua  &  ==  !=  =~  !~  <=  >=  <  >  <<  >>  +  \-  *  /  %  !  ~  (  )
        !           737: .PP
        !           738: Here the precedence increases to the right,
        !           739: `==' `!=' `=~' and `!~', `<=' `>=' `<' and `>', `<<' and `>>', `+' and `\-',
        !           740: `*' `/' and `%' being, in groups, at the same level.
        !           741: The `==' `!=' `=~' and `!~' operators compare their arguments as strings;
        !           742: all others operate on numbers.
        !           743: The operators `=~' and `!~' are like `!=' and `==' except that the right
        !           744: hand side is a
        !           745: .I pattern
        !           746: (containing, e.g. `*'s, `?'s and instances of `[...]')
        !           747: against which the left hand operand is matched.  This reduces the
        !           748: need for use of the
        !           749: .I switch
        !           750: statement in shell scripts when all that is really needed is pattern matching.
        !           751: .PP
        !           752: Strings which begin with `0' are considered octal numbers.
        !           753: Null or missing arguments are considered `0'.
        !           754: The result of all expressions are strings,
        !           755: which represent decimal numbers.
        !           756: It is important to note that no two components of an expression can appear
        !           757: in the same word; except when adjacent to components of expressions which
        !           758: are syntactically significant to the parser (`&' `|' `<' `>' `(' `)')
        !           759: they should be surrounded by spaces.
        !           760: .PP
        !           761: Also available in expressions as primitive operands are command executions
        !           762: enclosed in `{' and `}'
        !           763: and file enquiries of the form `\-\fIl\fR  name' where
        !           764: .I  l
        !           765: is one of:
        !           766: .PP
        !           767: .DT
        !           768: .nf
        !           769:        r       read access
        !           770:        w       write access
        !           771:        x       execute access
        !           772:        e       existence
        !           773:        o       ownership
        !           774:        z       zero size
        !           775:        f       plain file
        !           776:        d       directory
        !           777: .fi
        !           778: .PP
        !           779: The specified name is command and filename expanded and then tested
        !           780: to see if it has the specified relationship to the real user.
        !           781: If the file does not exist or is inaccessible then all enquiries return
        !           782: false, i.e. `0'.
        !           783: Command executions succeed, returning true, i.e. `1',
        !           784: if the command exits with status 0, otherwise they fail, returning
        !           785: false, i.e. `0'.
        !           786: If more detailed status information is required then the command
        !           787: should be executed outside of an expression and the variable
        !           788: .I status
        !           789: examined.
        !           790: .sh "Control flow"
        !           791: The shell contains a number of commands which can be used to regulate the
        !           792: flow of control in command files (shell scripts) and
        !           793: (in limited but useful ways) from terminal input.
        !           794: These commands all operate by forcing the shell to reread or skip in its
        !           795: input and, due to the implementation, restrict the placement of some
        !           796: of the commands.
        !           797: .PP
        !           798: The
        !           799: .I foreach,
        !           800: .I switch,
        !           801: and
        !           802: .I while
        !           803: statements, as well as the
        !           804: .I if\-then\-else
        !           805: form of the
        !           806: .I if
        !           807: statement require that the major keywords appear in a single simple command
        !           808: on an input line as shown below.
        !           809: .PP
        !           810: If the shell's input is not seekable,
        !           811: the shell buffers up input whenever a loop is being read
        !           812: and performs seeks in this internal buffer to accomplish the rereading
        !           813: implied by the loop.
        !           814: (To the extent that this allows, backward goto's will succeed on
        !           815: non-seekable inputs.)
        !           816: .sh "Builtin commands"
        !           817: Builtin commands are executed within the shell.
        !           818: If a builtin command occurs as any component of a pipeline
        !           819: except the last then it is executed in a subshell.
        !           820: .HP 5
        !           821: .B  alias
        !           822: .br
        !           823: .ns
        !           824: .HP 5
        !           825: .BR alias " name"
        !           826: .br
        !           827: .ns
        !           828: .HP 5
        !           829: .BR alias " name wordlist"
        !           830: .br
        !           831: The first form prints all aliases.
        !           832: The second form prints the alias for name.
        !           833: The final form assigns the specified
        !           834: .I wordlist
        !           835: as the alias of 
        !           836: .I name;
        !           837: .I wordlist
        !           838: is command and filename substituted.
        !           839: .I Name
        !           840: is not allowed to be
        !           841: .I alias
        !           842: or
        !           843: .I unalias.
        !           844: .HP 5
        !           845: .B  alloc
        !           846: .br
        !           847: Shows the amount of dynamic core in use, broken down into used and
        !           848: free core, and address of the last location in the heap.
        !           849: With an argument shows each used and free block on the internal dynamic
        !           850: memory chain indicating its address, size, and whether it is used or free.
        !           851: This is a debugging command and may not work in production versions of the
        !           852: shell; it requires a modified version of the system memory allocator.
        !           853: .HP 5
        !           854: .B bg
        !           855: .br
        !           856: .ns
        !           857: .HP 5
        !           858: \fBbg\ %\fRjob\ ...
        !           859: .br
        !           860: Puts the current or specified jobs into the background, continuing them
        !           861: if they were stopped.
        !           862: .HP 5
        !           863: .B  break
        !           864: .br
        !           865: Causes execution to resume after the
        !           866: .I end
        !           867: of the nearest enclosing
        !           868: .I foreach
        !           869: or
        !           870: .I while.
        !           871: The remaining commands on the current line are executed.
        !           872: Multi-level breaks are thus possible by writing them all on one line.
        !           873: .HP 5
        !           874: .B  breaksw
        !           875: .br
        !           876: Causes a break from a
        !           877: .I switch,
        !           878: resuming after the
        !           879: .I endsw.
        !           880: .HP 5
        !           881: .BR case " label:"
        !           882: .br
        !           883: A label in a
        !           884: .I switch
        !           885: statement as discussed below.
        !           886: .HP 5
        !           887: .B  cd
        !           888: .br
        !           889: .ns
        !           890: .HP 5
        !           891: .BR cd " name"
        !           892: .br
        !           893: .ns
        !           894: .HP 5
        !           895: .B  chdir
        !           896: .br
        !           897: .ns
        !           898: .HP 5
        !           899: .BR chdir " name"
        !           900: .br
        !           901: Change the shells working directory to directory
        !           902: .I name.
        !           903: If no argument is given then change to the home directory of the user.
        !           904: .br
        !           905: If
        !           906: .I name
        !           907: is not found as a subdirectory of the current directory (and does not begin
        !           908: with `/', `./' or `../'), then each
        !           909: component of the variable
        !           910: .I cdpath
        !           911: is checked to see if it has a subdirectory
        !           912: .I name.
        !           913: Finally, if all else fails but
        !           914: .I name
        !           915: is a shell variable whose value begins with `/', then this
        !           916: is tried to see if it is a directory.
        !           917: .HP 5
        !           918: .B  continue
        !           919: .br
        !           920: Continue execution of the nearest enclosing
        !           921: .I while
        !           922: or
        !           923: .I foreach.
        !           924: The rest of the commands on the current line are executed.
        !           925: .HP 5
        !           926: .B  default:
        !           927: .br
        !           928: Labels the default case in a
        !           929: .I switch
        !           930: statement.
        !           931: The default should come after all
        !           932: .I case
        !           933: labels.
        !           934: .HP 5
        !           935: .BR "dirs"
        !           936: .br
        !           937: Prints the directory stack; the top of the stack is at the left,
        !           938: the first directory in the stack being the current directory.
        !           939: .HP 5
        !           940: .BR echo " wordlist"
        !           941: .br
        !           942: .ns
        !           943: .HP 5
        !           944: .BR "echo \-n" " wordlist"
        !           945: .br
        !           946: The specified words are written to the shells standard output, separated
        !           947: by spaces, and terminated with a newline unless the
        !           948: .B \-n
        !           949: option is specified.
        !           950: .HP 5
        !           951: .B  else
        !           952: .br
        !           953: .ns
        !           954: .HP 5
        !           955: .B  end
        !           956: .br
        !           957: .ns
        !           958: .HP 5
        !           959: .B  endif
        !           960: .br
        !           961: .ns
        !           962: .HP 5
        !           963: .B  endsw
        !           964: .br
        !           965: See the description of the
        !           966: .I foreach,
        !           967: .I if,
        !           968: .I switch,
        !           969: and
        !           970: .I while
        !           971: statements below.
        !           972: .HP 5
        !           973: .BR eval " arg ..."
        !           974: .br
        !           975: (As in
        !           976: .IR sh (1).)
        !           977: The arguments are read as input to the shell and the resulting
        !           978: command(s) executed.  This is usually used to execute commands
        !           979: generated as the result of command or variable substitution, since
        !           980: parsing occurs before these substitutions.  See
        !           981: .IR tset (1)
        !           982: for an example of using
        !           983: .I eval.
        !           984: .HP 5
        !           985: .BR exec " command"
        !           986: .br
        !           987: The specified command is executed in place of the current shell.
        !           988: .HP 5
        !           989: .B  exit
        !           990: .br
        !           991: .ns
        !           992: .HP 5
        !           993: .BR exit (expr)
        !           994: .br
        !           995: The shell exits either with the value of the
        !           996: .I status
        !           997: variable (first form) or with the value of the specified
        !           998: .I  expr
        !           999: (second form).
        !          1000: .HP 5
        !          1001: .B fg
        !          1002: .br
        !          1003: .ns
        !          1004: .HP 5
        !          1005: \fBfg\ %\fRjob\ ...
        !          1006: .br
        !          1007: Brings the current or specified jobs into the foreground, continuing them if
        !          1008: they were stopped.
        !          1009: .HP 5
        !          1010: .BR foreach " name (wordlist)"
        !          1011: .br
        !          1012: .ns
        !          1013: .HP 5
        !          1014: \    ...
        !          1015: .br
        !          1016: .ns
        !          1017: .HP 5
        !          1018: .B  end
        !          1019: .br
        !          1020: The variable
        !          1021: .I name
        !          1022: is successively set to each member of
        !          1023: .I wordlist
        !          1024: and the sequence of commands between this command and the matching
        !          1025: .I end
        !          1026: are executed.
        !          1027: (Both
        !          1028: .I foreach
        !          1029: and
        !          1030: .I end
        !          1031: must appear alone on separate lines.)
        !          1032: .IP
        !          1033: The builtin command
        !          1034: .I continue
        !          1035: may be used to continue the loop prematurely and the builtin
        !          1036: command
        !          1037: .I break
        !          1038: to terminate it prematurely.
        !          1039: When this command is read from the terminal, the loop is read up once
        !          1040: prompting with `?' before any statements in the loop are executed.
        !          1041: If you make a mistake typing in a loop at the terminal you can rub it out.
        !          1042: .HP 5
        !          1043: .BR glob " wordlist"
        !          1044: .br
        !          1045: Like
        !          1046: .I echo
        !          1047: but no `\e' escapes are recognized and words are delimited
        !          1048: by null characters in the output.
        !          1049: Useful for programs which wish to use the shell to filename expand a list
        !          1050: of words.
        !          1051: .HP 5
        !          1052: .BR goto " word"
        !          1053: .br
        !          1054: The specified
        !          1055: .I word
        !          1056: is filename and command expanded to yield a string of the form `label'.
        !          1057: The shell rewinds its input as much as possible
        !          1058: and searches for a line of the form `label:'
        !          1059: possibly preceded by blanks or tabs.
        !          1060: Execution continues after the specified line.
        !          1061: .HP 5
        !          1062: .BR hashstat
        !          1063: .br
        !          1064: Print a statistics line indicating how effective the internal hash
        !          1065: table has been at locating commands (and avoiding
        !          1066: .I exec's).
        !          1067: An
        !          1068: .I exec
        !          1069: is attempted for each component of the
        !          1070: .I path
        !          1071: where the hash function indicates a possible hit, and in each component
        !          1072: which does not begin with a `/'.
        !          1073: .HP 5
        !          1074: .B  history
        !          1075: .br
        !          1076: .ns
        !          1077: .HP 5
        !          1078: .BI history " n"
        !          1079: .br
        !          1080: .ns
        !          1081: .HP 5
        !          1082: .BI "history \-r" " n"
        !          1083: .br
        !          1084: Displays the history event list; if \fIn\fR is given only the
        !          1085: .I n
        !          1086: most recent events are printed.
        !          1087: The
        !          1088: .B \-r
        !          1089: option reverses the order of printout to be most recent first
        !          1090: rather than oldest first.
        !          1091: .HP 5
        !          1092: .BR if " (expr) command"
        !          1093: .br
        !          1094: If the specified expression evaluates true, then the single
        !          1095: .I  command
        !          1096: with arguments is executed.
        !          1097: Variable substitution on
        !          1098: .IR command ""
        !          1099: happens early, at the same
        !          1100: time it does for the rest of the
        !          1101: .I if
        !          1102: command.
        !          1103: .I Command
        !          1104: must be a simple command, not
        !          1105: a pipeline, a command list, or a parenthesized command list.
        !          1106: Input/output redirection occurs even if
        !          1107: .I expr
        !          1108: is false, when command is
        !          1109: .B not
        !          1110: executed (this is a bug).
        !          1111: .HP 5
        !          1112: .BR if " (expr) " "then"
        !          1113: .br
        !          1114: .ns
        !          1115: .HP 5
        !          1116: \    ...
        !          1117: .br
        !          1118: .ns
        !          1119: .HP 5
        !          1120: .BR else " " "if\fR (expr2) \fBthen"
        !          1121: .br
        !          1122: .ns
        !          1123: .HP 5
        !          1124: \    ...
        !          1125: .br
        !          1126: .ns
        !          1127: .HP 5
        !          1128: .B  else
        !          1129: .br
        !          1130: .ns
        !          1131: .HP 5
        !          1132: \    ...
        !          1133: .br
        !          1134: .ns
        !          1135: .HP 5
        !          1136: .B  endif
        !          1137: .br
        !          1138: If the specified
        !          1139: .IR expr ""
        !          1140: is true then the commands to the first
        !          1141: .I else
        !          1142: are executed; else if
        !          1143: .IR expr2 ""
        !          1144: is true then the commands to the
        !          1145: second else are executed, etc.
        !          1146: Any number of
        !          1147: .I else-if
        !          1148: pairs are possible; only one
        !          1149: .I endif
        !          1150: is needed.
        !          1151: The
        !          1152: .I else
        !          1153: part is likewise optional.
        !          1154: (The words
        !          1155: .I else
        !          1156: and
        !          1157: .I endif
        !          1158: must appear at the beginning of input lines;
        !          1159: the
        !          1160: .I if
        !          1161: must appear alone on its input line or after an
        !          1162: .I else.)
        !          1163: .HP 5
        !          1164: .B jobs
        !          1165: .br
        !          1166: .ns
        !          1167: .HP 5
        !          1168: .B "jobs \-l"
        !          1169: .br
        !          1170: Lists the active jobs; given the
        !          1171: .B \-l
        !          1172: options lists process id's in addition to the normal information.
        !          1173: .HP 5
        !          1174: \fBkill %\fRjob
        !          1175: .br
        !          1176: .ns
        !          1177: .HP 5
        !          1178: \fBkill\ \-\fRsig\ \fB%\fRjob\ ...
        !          1179: .br
        !          1180: .ns
        !          1181: .HP 5
        !          1182: \fBkill\fR\ pid
        !          1183: .br
        !          1184: .ns
        !          1185: .HP 5
        !          1186: \fBkill\ \-\fRsig\ pid\ ...
        !          1187: .br
        !          1188: .ns
        !          1189: .HP 5
        !          1190: \fBkill\ \-l\fR
        !          1191: .br
        !          1192: Sends either the TERM (terminate) signal or the
        !          1193: specified signal to the specified jobs or processes.
        !          1194: Signals are either given by number or by names (as given in
        !          1195: .I /usr/include/signal.h,
        !          1196: stripped of the prefix ``SIG'').
        !          1197: The signal names are listed by ``kill \-l''.
        !          1198: There is no default, saying just `kill' does not
        !          1199: send a signal to the current job.
        !          1200: If the signal being sent is TERM (terminate) or HUP (hangup),
        !          1201: then the job or process will be sent a CONT (continue) signal as well.
        !          1202: .HP
        !          1203: \fBlimit\fR
        !          1204: .br
        !          1205: .ns
        !          1206: .HP 5
        !          1207: \fBlimit\fR \fIresource\fR
        !          1208: .br
        !          1209: .ns
        !          1210: .HP 5
        !          1211: \fBlimit\fR \fIresource\fR \fImaximum-use\fR
        !          1212: .br
        !          1213: Limits the consumption by the current process and each process
        !          1214: it creates to not individually exceed \fImaximum-use\fR on the
        !          1215: specified \fIresource\fR.  If no \fImaximum-use\fR is given, then
        !          1216: the current limit is printed; if no \fIresource\fR is given, then
        !          1217: all limitations are given.
        !          1218: .IP
        !          1219: Resources controllable currently include \fIcputime\fR (the maximum
        !          1220: number of cpu-seconds to be used by each process), \fIfilesize\fR
        !          1221: (the largest single file which can be created), \fIdatasize\fR
        !          1222: (the maximum growth of the data+stack region via
        !          1223: .IR sbrk (2)
        !          1224: beyond the end of the program text), \fIstacksize\fR (the maximum
        !          1225: size of the automatically-extended stack region), and \fIcoredumpsize\fR
        !          1226: (the size of the largest core dump that will be created).
        !          1227: .IP
        !          1228: The \fImaximum-use\fR may be given as a (floating point or integer)
        !          1229: number followed by a scale factor.  For all limits other than \fIcputime\fR
        !          1230: the default scale is `k' or `kilobytes' (1024 bytes);
        !          1231: a scale factor of `m' or `megabytes' may also be used.
        !          1232: For
        !          1233: .I cputime
        !          1234: the default scaling is `seconds', while `m' for minutes
        !          1235: or `h' for hours, or a time of the form `mm:ss' giving minutes
        !          1236: and seconds may be used.
        !          1237: .IP
        !          1238: For both \fIresource\fR names and scale factors, unambiguous prefixes
        !          1239: of the names suffice.
        !          1240: .HP 5
        !          1241: .B  login
        !          1242: .br
        !          1243: Terminate a login shell, replacing it with an instance of
        !          1244: .B /bin/login.
        !          1245: This is one way to log off, included for compatibility with
        !          1246: .IR sh (1).
        !          1247: .HP 5
        !          1248: .B  logout
        !          1249: .br
        !          1250: Terminate a login shell.
        !          1251: Especially useful if
        !          1252: .I ignoreeof
        !          1253: is set.
        !          1254: .HP 5
        !          1255: .B  newgrp
        !          1256: .br
        !          1257: Changes the group identification of the caller; for details see
        !          1258: .IR newgrp (1).
        !          1259: A new shell is executed by
        !          1260: .I newgrp
        !          1261: so that the shell state is lost.
        !          1262: .HP 5
        !          1263: .B  nice
        !          1264: .br
        !          1265: .ns
        !          1266: .HP 5
        !          1267: .BR nice " \+number"
        !          1268: .br
        !          1269: .ns
        !          1270: .HP 5
        !          1271: .BR nice " command"
        !          1272: .br
        !          1273: .ns
        !          1274: .HP 5
        !          1275: .BR nice " \+number command"
        !          1276: .br
        !          1277: The first form sets the
        !          1278: .I nice
        !          1279: for this shell to 4.
        !          1280: The second form sets the
        !          1281: .I nice
        !          1282: to the given number.
        !          1283: The final two forms run command at priority 4 and
        !          1284: .I number
        !          1285: respectively.
        !          1286: The super-user may specify negative niceness by using `nice \-number ...'.
        !          1287: Command is always executed in a sub-shell, and the restrictions
        !          1288: place on commands in simple
        !          1289: .I if
        !          1290: statements apply.
        !          1291: .HP 5
        !          1292: .B  nohup
        !          1293: .br
        !          1294: .ns
        !          1295: .HP 5
        !          1296: .BR "nohup" " command"
        !          1297: .br
        !          1298: The first form can be used in shell scripts to cause hangups to be
        !          1299: ignored for the remainder of the script.
        !          1300: The second form causes the specified command to be run with hangups
        !          1301: ignored.
        !          1302: All processes detached with `&' are effectively
        !          1303: .I nohup'ed.
        !          1304: .HP 5
        !          1305: .B notify
        !          1306: .br
        !          1307: .ns
        !          1308: .HP 5
        !          1309: \fBnotify\ %\fRjob\ ...
        !          1310: .br
        !          1311: Causes the shell to notify the user asynchronously when the status of the
        !          1312: current or specified jobs changes; normally notification is presented
        !          1313: before a prompt.  This is automatic if the shell variable
        !          1314: .I notify
        !          1315: is set.
        !          1316: .HP 5
        !          1317: .B  onintr
        !          1318: .br
        !          1319: .ns
        !          1320: .HP 5
        !          1321: .BR onintr "  \-"
        !          1322: .br
        !          1323: .ns
        !          1324: .HP 5
        !          1325: .BR onintr "  label"
        !          1326: .br
        !          1327: Control the action of the shell on interrupts.
        !          1328: The first form restores the default action of the shell on interrupts
        !          1329: which is to terminate shell scripts or to return to the terminal command
        !          1330: input level.
        !          1331: The second form `onintr \-' causes all interrupts to be ignored.
        !          1332: The final form causes the shell to execute a `goto label' when
        !          1333: an interrupt is received or a child process terminates because
        !          1334: it was interrupted.
        !          1335: .IP
        !          1336: In any case, if the shell is running detached and interrupts are
        !          1337: being ignored, all forms of
        !          1338: .I onintr
        !          1339: have no meaning and interrupts
        !          1340: continue to be ignored by the shell and all invoked commands.
        !          1341: .HP 5
        !          1342: .BR "popd"
        !          1343: .br
        !          1344: .ns
        !          1345: .HP 5
        !          1346: .BR "popd" " +n"
        !          1347: .br
        !          1348: Pops the directory stack, returning to the new top directory.
        !          1349: With a argument `+\fIn\fR' discards the \fIn\fR\|th
        !          1350: entry in the stack.
        !          1351: The elements of the directory stack are numbered from 0 starting at the top.
        !          1352: .HP 5
        !          1353: .BR "pushd"
        !          1354: .br
        !          1355: .ns
        !          1356: .HP 5
        !          1357: .BR "pushd" " name"
        !          1358: .br
        !          1359: .ns
        !          1360: .HP 5
        !          1361: .BR "pushd" " +n"
        !          1362: .br
        !          1363: With no arguments,
        !          1364: .I pushd
        !          1365: exchanges the top two elements of the directory stack.
        !          1366: Given a
        !          1367: .I name
        !          1368: argument,
        !          1369: .I pushd
        !          1370: changes to the new directory (ala
        !          1371: .I cd)
        !          1372: and pushes the old current working directory
        !          1373: (as in
        !          1374: .I csw)
        !          1375: onto the directory stack.
        !          1376: With a numeric argument, rotates the \fIn\fR\|th argument of the directory
        !          1377: stack around to be the top element and changes to it.  The members
        !          1378: of the directory stack are numbered from the top starting at 0.
        !          1379: .HP 5
        !          1380: .BR rehash
        !          1381: .br
        !          1382: Causes the internal hash table of the contents of the directories in
        !          1383: the
        !          1384: .I path
        !          1385: variable to be recomputed.  This is needed if new commands are added
        !          1386: to directories in the
        !          1387: .I path
        !          1388: while you are logged in.  This should only be necessary if you add
        !          1389: commands to one of your own directories, or if a systems programmer
        !          1390: changes the contents of one of the system directories.
        !          1391: .HP 5
        !          1392: .BR repeat " count command"
        !          1393: .br
        !          1394: The specified 
        !          1395: .I command
        !          1396: which is subject to the same restrictions
        !          1397: as the
        !          1398: .I command
        !          1399: in the one line
        !          1400: .I if
        !          1401: statement above,
        !          1402: is executed
        !          1403: .I count
        !          1404: times.
        !          1405: I/O redirections occur exactly once, even if
        !          1406: .I count
        !          1407: is 0.
        !          1408: .HP 5
        !          1409: .B  set
        !          1410: .br
        !          1411: .ns
        !          1412: .HP 5
        !          1413: .BR set " name"
        !          1414: .br
        !          1415: .ns
        !          1416: .HP 5
        !          1417: .BR set " name=word"
        !          1418: .br
        !          1419: .ns
        !          1420: .HP 5
        !          1421: .BR set " name[index]=word"
        !          1422: .br
        !          1423: .ns
        !          1424: .HP 5
        !          1425: .BR set " name=(wordlist)"
        !          1426: .br
        !          1427: The first form of the command shows the value of all shell variables.
        !          1428: Variables which have other than a single word as value print as a parenthesized
        !          1429: word list.
        !          1430: The second form sets
        !          1431: .I name
        !          1432: to the null string.
        !          1433: The third form sets
        !          1434: .I name
        !          1435: to the single
        !          1436: .I word.
        !          1437: The fourth form sets
        !          1438: the
        !          1439: .I index'th
        !          1440: component of name to word;
        !          1441: this component must already exist.
        !          1442: The final form sets
        !          1443: .I name
        !          1444: to the list of words in
        !          1445: .I wordlist.
        !          1446: In all cases the value is command and filename expanded.
        !          1447: .IP
        !          1448: These arguments may be repeated to set multiple values in a single set command.
        !          1449: Note however, that variable expansion happens for all arguments before any
        !          1450: setting occurs.
        !          1451: .HP 5
        !          1452: .BR setenv " name value"
        !          1453: .br
        !          1454: Sets the value of environment variable
        !          1455: .I name
        !          1456: to be
        !          1457: .I value,
        !          1458: a single string.
        !          1459: The most commonly used environment variable USER, TERM, and PATH
        !          1460: are automatically imported to and exported from the
        !          1461: .I csh
        !          1462: variables
        !          1463: .I user,
        !          1464: .I term,
        !          1465: and
        !          1466: .I path;
        !          1467: there is no need to use
        !          1468: .I setenv
        !          1469: for these.
        !          1470: .HP 5
        !          1471: .B  shift
        !          1472: .br
        !          1473: .ns
        !          1474: .HP 5
        !          1475: .BR shift " variable"
        !          1476: .br
        !          1477: The members of
        !          1478: .I argv
        !          1479: are shifted to the left, discarding
        !          1480: .I argv[1].
        !          1481: It is an error for
        !          1482: .I argv
        !          1483: not to be set or to have less than one word as value.
        !          1484: The second form performs the same function on the specified variable.
        !          1485: .HP 5
        !          1486: .BR source " name"
        !          1487: .br
        !          1488: The shell reads commands from
        !          1489: .I name.
        !          1490: .I Source
        !          1491: commands may be nested; if they are nested too deeply the shell may
        !          1492: run out of file descriptors.
        !          1493: An error in a
        !          1494: .I source
        !          1495: at any level terminates all nested
        !          1496: .I source
        !          1497: commands.
        !          1498: Input during 
        !          1499: .I source
        !          1500: commands is
        !          1501: .B never
        !          1502: placed on the history list.
        !          1503: .HP 5
        !          1504: .B stop
        !          1505: .br
        !          1506: .ns
        !          1507: .HP 5
        !          1508: \fBstop\ %\fRjob\ ...
        !          1509: .br
        !          1510: Stops the current or specified job which is executing in the background.
        !          1511: .HP 5
        !          1512: .B suspend
        !          1513: .br
        !          1514: .ns
        !          1515: Causes the shell to stop in its tracks, much as if it had been sent a stop
        !          1516: signal with \fB^Z\fR.  This is most often used to stop shells started by
        !          1517: .IR su (1).
        !          1518: .HP 5
        !          1519: .BR switch " (string)"
        !          1520: .br
        !          1521: .ns
        !          1522: .HP 5
        !          1523: .BR case " str1:"
        !          1524: .br
        !          1525: .ns
        !          1526: .HP 5
        !          1527: \    ...
        !          1528: .br
        !          1529: .ns
        !          1530: .HP 5
        !          1531: \   
        !          1532: .B  breaksw
        !          1533: .br
        !          1534: .ns
        !          1535: .HP 5
        !          1536: \&...
        !          1537: .br
        !          1538: .ns
        !          1539: .HP 5
        !          1540: .B  default:
        !          1541: .br
        !          1542: .ns
        !          1543: .HP 5
        !          1544: \    ...
        !          1545: .br
        !          1546: .ns
        !          1547: .HP 5
        !          1548: \   
        !          1549: .B  breaksw
        !          1550: .br
        !          1551: .ns
        !          1552: .HP 5
        !          1553: .B  endsw
        !          1554: .br
        !          1555: Each case label is successively matched, against the specified
        !          1556: .I string
        !          1557: which is first command and filename expanded.
        !          1558: The file metacharacters `*', `?' and `[...]' may be used in the case labels,
        !          1559: which are variable expanded.
        !          1560: If none of the labels match before a `default' label is found, then
        !          1561: the execution begins after the default label.
        !          1562: Each case label and the default label must appear at the beginning of a line.
        !          1563: The command 
        !          1564: .I breaksw
        !          1565: causes execution to continue after the
        !          1566: .I endsw.
        !          1567: Otherwise control may fall through case labels and default labels as in C.
        !          1568: If no label matches and there is no default, execution continues after
        !          1569: the
        !          1570: .I endsw.
        !          1571: .HP 5
        !          1572: .B  time
        !          1573: .br
        !          1574: .ns
        !          1575: .HP 5
        !          1576: .BR time " command"
        !          1577: .br
        !          1578: With no argument, a summary of time used by this shell and its children
        !          1579: is printed.
        !          1580: If arguments are given
        !          1581: the specified simple command is timed and a time summary
        !          1582: as described under the
        !          1583: .I time
        !          1584: variable is printed.
        !          1585: If necessary, an extra shell is created to print the time
        !          1586: statistic when the command completes.
        !          1587: .HP 5
        !          1588: .B umask
        !          1589: .br
        !          1590: .ns
        !          1591: .HP 5
        !          1592: .BR umask " value"
        !          1593: .br
        !          1594: The file creation mask is displayed (first form) or set to the specified
        !          1595: value (second form).  The mask is given in octal.  Common values for
        !          1596: the mask are 002 giving all access to the group and read and execute
        !          1597: access to others or 022 giving all access except no write access for
        !          1598: users in the group or others.
        !          1599: .HP 5
        !          1600: .BR unalias " pattern"
        !          1601: .br
        !          1602: All aliases whose names match the specified pattern are discarded.
        !          1603: Thus all aliases are removed by `unalias *'.
        !          1604: It is not an error for nothing to be
        !          1605: .I unaliased.
        !          1606: .HP 5
        !          1607: .BR unhash
        !          1608: .br
        !          1609: Use of the internal hash table to speed location of executed programs
        !          1610: is disabled.
        !          1611: .HP 5
        !          1612: \fBunlimit\fR \fIresource\fR
        !          1613: .br
        !          1614: .ns
        !          1615: .HP 5
        !          1616: \fBunlimit\fR
        !          1617: .br
        !          1618: Removes the limitation on \fIresource\fR.  If no \fIresource\fR
        !          1619: is specified, then all \fIresource\fR limitations are removed.
        !          1620: .HP 5
        !          1621: .BR unset " pattern"
        !          1622: .br
        !          1623: All variables whose names match the specified pattern are removed.
        !          1624: Thus all variables are removed by `unset *'; this has noticeably
        !          1625: distasteful side-effects.
        !          1626: It is not an error for nothing to be
        !          1627: .I unset.
        !          1628: .HP 5
        !          1629: .BR unsetenv " pattern"
        !          1630: .br
        !          1631: Removes all variables whose name match the specified pattern from the
        !          1632: environment.  See also the
        !          1633: .I setenv
        !          1634: command above and
        !          1635: .IR printenv (1).
        !          1636: .HP 5
        !          1637: .B  wait
        !          1638: .br
        !          1639: All background jobs are waited for.
        !          1640: It the shell is interactive, then an interrupt can disrupt the wait,
        !          1641: at which time the shell prints names and job numbers of all jobs
        !          1642: known to be outstanding.
        !          1643: .HP 5
        !          1644: .BR while " (expr)"
        !          1645: .br
        !          1646: .ns
        !          1647: .HP 5
        !          1648: \    ...
        !          1649: .br
        !          1650: .ns
        !          1651: .HP 5
        !          1652: .B  end
        !          1653: .br
        !          1654: While the specified expression evaluates non-zero, the commands between
        !          1655: the
        !          1656: .I while
        !          1657: and the matching end are evaluated.
        !          1658: .I Break
        !          1659: and
        !          1660: .I continue
        !          1661: may be used to terminate or continue the loop prematurely.
        !          1662: (The
        !          1663: .I while
        !          1664: and
        !          1665: .I end
        !          1666: must appear alone on their input lines.)
        !          1667: Prompting occurs here the first time through the loop as for the
        !          1668: .I foreach
        !          1669: statement if the input is a terminal.
        !          1670: .HP 5
        !          1671: \fB%\fRjob
        !          1672: .br
        !          1673: Brings the specified job into the foreground.
        !          1674: .HP 5
        !          1675: \fB%\fRjob \fB&\fR
        !          1676: .br
        !          1677: Continues the specified job in the background.
        !          1678: .HP 5
        !          1679: .B "@"
        !          1680: .br
        !          1681: .ns
        !          1682: .HP 5
        !          1683: .BR "@" " name = expr"
        !          1684: .br
        !          1685: .ns
        !          1686: .HP 5
        !          1687: .BR "@" " name[index] = expr"
        !          1688: .br
        !          1689: The first form prints the values of all the shell variables.
        !          1690: The second form sets the specified
        !          1691: .I name
        !          1692: to the value of
        !          1693: .I expr.
        !          1694: If the expression contains `<', `>', `&' or `|' then at least
        !          1695: this part of the expression must be placed within `(' `)'.
        !          1696: The third form assigns the value of
        !          1697: .I expr
        !          1698: to the
        !          1699: .I index'th
        !          1700: argument of
        !          1701: .I name.
        !          1702: Both 
        !          1703: .I name
        !          1704: and its
        !          1705: .I index'th
        !          1706: component must already exist.
        !          1707: .IP
        !          1708: The operators `*=', `+=', etc are available as in C.
        !          1709: The space separating the name from the assignment operator is optional.
        !          1710: Spaces are, however, mandatory in separating components of
        !          1711: .I expr
        !          1712: which would otherwise be single words.
        !          1713: .IP
        !          1714: Special postfix `++' and `\-\-' operators increment and decrement
        !          1715: .I name
        !          1716: respectively, i.e. `@  i++'.
        !          1717: .sh "Pre-defined and environment variables"
        !          1718: The following variables have special meaning to the shell.
        !          1719: Of these,
        !          1720: .I argv,
        !          1721: .I cwd,
        !          1722: .I home,
        !          1723: .I path,
        !          1724: .I prompt,
        !          1725: .I shell
        !          1726: and
        !          1727: .I status
        !          1728: are always set by the shell.
        !          1729: Except for
        !          1730: .I cwd
        !          1731: and
        !          1732: .I status
        !          1733: this setting occurs only at initialization;
        !          1734: these variables will not then be modified unless this is done
        !          1735: explicitly by the user.
        !          1736: .PP
        !          1737: This shell copies the environment variable USER into the variable
        !          1738: .I user,
        !          1739: TERM into
        !          1740: .I term,
        !          1741: and
        !          1742: HOME into
        !          1743: .I home,
        !          1744: and copies these back into the environment whenever the normal
        !          1745: shell variables are reset.
        !          1746: The environment variable PATH is likewise handled; it is not
        !          1747: necessary to worry about its setting other than in the file
        !          1748: .I \&.cshrc
        !          1749: as inferior
        !          1750: .I csh
        !          1751: processes will import the definition of
        !          1752: .I path
        !          1753: from the environment, and re-export it if you then change it.
        !          1754: (It could be set once in the
        !          1755: .I \&.login
        !          1756: except that commands through
        !          1757: .IR net (1)
        !          1758: would not see the definition.)
        !          1759: .TP 15
        !          1760: .B argv
        !          1761: \c
        !          1762: Set to the arguments to the shell, it is from this variable that
        !          1763: positional parameters are substituted, i.e. `$1' is replaced by
        !          1764: `$argv[1]', etc.
        !          1765: .TP 15
        !          1766: .B cdpath
        !          1767: \c
        !          1768: Gives a list of alternate directories searched to find subdirectories
        !          1769: in
        !          1770: .I chdir
        !          1771: commands.
        !          1772: .TP 15
        !          1773: .B cwd
        !          1774: The full pathname of the current directory.
        !          1775: .TP 15
        !          1776: .B echo
        !          1777: \c
        !          1778: Set when the
        !          1779: .B \-x
        !          1780: command line option is given.
        !          1781: Causes each command and its arguments
        !          1782: to be echoed just before it is executed.
        !          1783: For non-builtin commands all expansions occur before echoing.
        !          1784: Builtin commands are echoed before command and filename substitution,
        !          1785: since these substitutions are then done selectively.
        !          1786: .TP 15
        !          1787: .B history
        !          1788: \c
        !          1789: Can be given a numeric value to control the size of the history list.
        !          1790: Any command which has been referenced in this many events will not be
        !          1791: discarded.
        !          1792: Too large values of
        !          1793: .I history
        !          1794: may run the shell out of memory.
        !          1795: The last executed command is always saved on the history list.
        !          1796: .TP 15
        !          1797: .B home
        !          1798: \c
        !          1799: The home directory of the invoker, initialized from the environment.
        !          1800: The filename expansion of `\fB~\fR' refers to this variable.
        !          1801: .TP 15
        !          1802: .B ignoreeof
        !          1803: \c
        !          1804: If set the shell ignores
        !          1805: end-of-file from input devices which are terminals.
        !          1806: This prevents shells from accidentally being killed by control-D's.
        !          1807: .TP 15
        !          1808: .B mail
        !          1809: \c
        !          1810: The files where the shell checks for mail.
        !          1811: This is done after each command completion which will result in a prompt,
        !          1812: if a specified interval has elapsed.
        !          1813: The shell says `You have new mail.'
        !          1814: if the file exists with an access time not greater than its modify time.
        !          1815: .IP
        !          1816: If the first word of the value of
        !          1817: .I mail
        !          1818: is numeric it specifies a different mail checking interval, in seconds,
        !          1819: than the default, which is 10 minutes.
        !          1820: .IP
        !          1821: If multiple mail files are specified, then the shell says
        !          1822: `New mail in
        !          1823: .IR name '
        !          1824: when there is mail in the file
        !          1825: .I name.
        !          1826: .TP 15
        !          1827: .B noclobber
        !          1828: \c
        !          1829: As described in the section on
        !          1830: .I Input/output,
        !          1831: restrictions are placed on output redirection to insure that
        !          1832: files are not accidentally destroyed, and that `>>' redirections
        !          1833: refer to existing files.
        !          1834: .TP 15
        !          1835: .B noglob
        !          1836: \c
        !          1837: If set, filename expansion is inhibited.
        !          1838: This is most useful in shell scripts which are not dealing with filenames,
        !          1839: or after a list of filenames has been obtained and further expansions
        !          1840: are not desirable.
        !          1841: .TP 15
        !          1842: .B nonomatch
        !          1843: \c
        !          1844: If set, it is not an error for a filename expansion to not match any
        !          1845: existing files; rather the primitive pattern is returned.
        !          1846: It is still an error for the primitive pattern to be malformed, i.e.
        !          1847: `echo [' still gives an error.
        !          1848: .TP 15
        !          1849: .B notify
        !          1850: \c
        !          1851: If set, the shell notifies asynchronously of job completions.  The
        !          1852: default is to rather present job completions just before printing
        !          1853: a prompt.
        !          1854: .TP 15
        !          1855: .B path
        !          1856: \c
        !          1857: Each word of the path variable specifies a directory in which
        !          1858: commands are to be sought for execution.
        !          1859: A null word specifies the current directory.
        !          1860: If there is no
        !          1861: .I path
        !          1862: variable then only full path names will execute.
        !          1863: The usual search path is `.', `/bin' and `/usr/bin', but this
        !          1864: may vary from system to system.
        !          1865: For the super-user the default search path is `/etc', `/bin' and `/usr/bin'.
        !          1866: A shell which is given neither the
        !          1867: .B \-c
        !          1868: nor the
        !          1869: .B \-t
        !          1870: option will normally hash the contents of the directories in the
        !          1871: .I path
        !          1872: variable after reading
        !          1873: .I \&.cshrc,
        !          1874: and each time the
        !          1875: .I path
        !          1876: variable is reset.  If new commands are added to these directories
        !          1877: while the shell is active, it may be necessary to give the
        !          1878: .I rehash
        !          1879: or the commands may not be found.
        !          1880: .TP 15
        !          1881: .B prompt
        !          1882: \c
        !          1883: The string which is printed before each command is read from
        !          1884: an interactive terminal input.
        !          1885: If a `!' appears in the string it will be replaced by the current event number
        !          1886: unless a preceding `\e' is given.
        !          1887: Default is `% ', or `# ' for the super-user.
        !          1888: .TP 15
        !          1889: .B shell
        !          1890: \c
        !          1891: The file in which the shell resides.
        !          1892: This is used in forking shells to interpret files which have execute
        !          1893: bits set, but which are not executable by the system.
        !          1894: (See the description of
        !          1895: .I "Non-builtin Command Execution"
        !          1896: below.)
        !          1897: Initialized to the (system-dependent) home of the shell.
        !          1898: .TP 15
        !          1899: .B status
        !          1900: \c
        !          1901: The status returned by the last command.
        !          1902: If it terminated abnormally, then 0200 is added to the status.
        !          1903: Builtin commands which fail return exit status `1',
        !          1904: all other builtin commands set status `0'.
        !          1905: .TP 15
        !          1906: .B time
        !          1907: \c
        !          1908: Controls automatic timing of commands.
        !          1909: If set, then any command which takes more than this many cpu seconds
        !          1910: will cause a line giving user, system, and real times and a utilization
        !          1911: percentage which is the ratio of user plus system times to real time
        !          1912: to be printed when it terminates.
        !          1913: .TP 15
        !          1914: .B verbose
        !          1915: \c
        !          1916: Set by the
        !          1917: .B \-v
        !          1918: command line option, causes the words of each command to be printed
        !          1919: after history substitution.
        !          1920: .sh "Non-builtin command execution"
        !          1921: When a command to be executed is found to not be a builtin command
        !          1922: the shell attempts to execute the command via
        !          1923: .IR  exec (2).
        !          1924: Each word in the variable
        !          1925: .I path
        !          1926: names a directory from which the shell will attempt to execute the command.
        !          1927: If it is given neither a
        !          1928: .B \-c
        !          1929: nor a
        !          1930: .B \-t
        !          1931: option, the shell will hash the names in these directories into an internal
        !          1932: table so that it will only try an
        !          1933: .I exec
        !          1934: in a directory if there is a possibility that the command resides there.
        !          1935: This greatly speeds command location when a large number of directories
        !          1936: are present in the search path.
        !          1937: If this mechanism has been turned off (via
        !          1938: .I unhash),
        !          1939: or if the shell was given a
        !          1940: .B \-c
        !          1941: or
        !          1942: .B \-t
        !          1943: argument, and in any case for each directory component of
        !          1944: .I path
        !          1945: which does not begin with a `/',
        !          1946: the shell concatenates with the given command name to form a path name
        !          1947: of a file which it then attempts to execute.
        !          1948: .PP
        !          1949: Parenthesized commands are always executed in a subshell.
        !          1950: Thus `(cd ; pwd) ; pwd' prints the
        !          1951: .I home
        !          1952: directory; leaving you where you were (printing this after the home directory),
        !          1953: while `cd ; pwd' leaves you in the
        !          1954: .I home
        !          1955: directory.
        !          1956: Parenthesized commands are most often used to prevent
        !          1957: .I chdir
        !          1958: from affecting the current shell.
        !          1959: .PP
        !          1960: If the file has execute permissions but is not an
        !          1961: executable binary to the system, then it is assumed to be a
        !          1962: file containing shell commands an a new shell is spawned to read it.
        !          1963: .PP
        !          1964: If there is an
        !          1965: .I alias
        !          1966: for
        !          1967: .I shell
        !          1968: then the words of the alias will be prepended to the argument list to form
        !          1969: the shell command.
        !          1970: The first word of the
        !          1971: .I alias
        !          1972: should be the full path name of the shell
        !          1973: (e.g. `$shell').
        !          1974: Note that this is a special, late occurring, case of
        !          1975: .I alias
        !          1976: substitution,
        !          1977: and only allows words to be prepended to the argument list without modification.
        !          1978: .sh "Argument list processing"
        !          1979: If argument 0 to the shell is `\-' then this
        !          1980: is a login shell.
        !          1981: The flag arguments are interpreted as follows:
        !          1982: .TP 5
        !          1983: .B  \-c
        !          1984: \c
        !          1985: Commands are read from the (single) following argument which must
        !          1986: be present.
        !          1987: Any remaining arguments are placed in
        !          1988: .I argv.
        !          1989: .TP 5
        !          1990: .B  \-e
        !          1991: \c
        !          1992: The shell exits if any invoked command terminates abnormally
        !          1993: or yields a non-zero exit status.
        !          1994: .TP 5
        !          1995: .B  \-f
        !          1996: \c
        !          1997: The shell will start faster, because it will neither search for nor
        !          1998: execute commands from the file
        !          1999: `\&.cshrc' in the invokers home directory.
        !          2000: .TP 5
        !          2001: .B  \-i
        !          2002: \c
        !          2003: The shell is interactive and prompts for its top-level input,
        !          2004: even if it appears to not be a terminal.
        !          2005: Shells are interactive without this option if their inputs
        !          2006: and outputs are terminals.
        !          2007: .TP 5
        !          2008: .B  \-n
        !          2009: \c
        !          2010: Commands are parsed, but not executed.
        !          2011: This may aid in syntactic checking of shell scripts.
        !          2012: .TP 5
        !          2013: .B  \-s
        !          2014: \c
        !          2015: Command input is taken from the standard input.
        !          2016: .TP 5
        !          2017: .B  \-t
        !          2018: \c
        !          2019: A single line of input is read and executed.
        !          2020: A `\e' may be used to escape the newline at the end of this
        !          2021: line and continue onto another line.
        !          2022: .TP 5
        !          2023: .B  \-v
        !          2024: \c
        !          2025: Causes the
        !          2026: .I verbose
        !          2027: variable to be set, with the effect
        !          2028: that command input is echoed after history substitution.
        !          2029: .TP 5
        !          2030: .B  \-x
        !          2031: \c
        !          2032: Causes the 
        !          2033: .I echo
        !          2034: variable to be set, so that commands are echoed immediately before execution.
        !          2035: .TP 5
        !          2036: .B  \-V
        !          2037: \c
        !          2038: Causes the
        !          2039: .I verbose
        !          2040: variable to be set even before `\&.cshrc' is executed.
        !          2041: .TP 5
        !          2042: .B  \-X
        !          2043: \c
        !          2044: Is to
        !          2045: .B \-x
        !          2046: as
        !          2047: .B \-V
        !          2048: is to
        !          2049: .B \-v.
        !          2050: .PP
        !          2051: After processing of flag arguments if arguments remain but none of the
        !          2052: .B \-c,
        !          2053: .B \-i,
        !          2054: .B \-s,
        !          2055: or
        !          2056: .B \-t
        !          2057: options was given the first argument is taken as the name of a file of
        !          2058: commands to be executed.
        !          2059: The shell opens this file, and saves its name for possible resubstitution
        !          2060: by `$0'.
        !          2061: Since many systems use either the standard version 6 or version 7 shells
        !          2062: whose shell scripts are not compatible with this shell, the shell will
        !          2063: execute such a `standard' shell if the first character of a script
        !          2064: is not a `#', i.e. if the script does not start with a comment.
        !          2065: Remaining arguments initialize the variable
        !          2066: .I argv.
        !          2067: .sh "Signal handling"
        !          2068: The shell normally ignores
        !          2069: .I quit
        !          2070: signals.
        !          2071: Jobs running detached (either by `&' or the \fIbg\fR or \fB%... &\fR
        !          2072: commands) are immune to signals generated from the keyboard, including
        !          2073: hangups.
        !          2074: Other signals have the values which the shell inherited from its parent.
        !          2075: The shells handling of interrupts and terminate signals
        !          2076: in shell scripts can be controlled by
        !          2077: .I onintr.
        !          2078: Login shells catch the
        !          2079: .I terminate
        !          2080: signal; otherwise this signal is passed on to children from the state in the
        !          2081: shell's parent.
        !          2082: In no case are interrupts allowed when a login shell is reading the file
        !          2083: `\&.logout'.
        !          2084: .SH AUTHOR
        !          2085: William Joy.
        !          2086: Job control and directory stack features first implemented by J.E. Kulp of
        !          2087: I.I.A.S.A, Laxenburg, Austria,
        !          2088: with different syntax than that used now.
        !          2089: .SH FILES
        !          2090: .ta 1.75i
        !          2091: .nf
        !          2092: ~/.cshrc       Read at beginning of execution by each shell.
        !          2093: ~/.login       Read by login shell, after `.cshrc' at login.
        !          2094: ~/.logout      Read by login shell, at logout.
        !          2095: /bin/sh        Standard shell, for shell scripts not starting with a `#'.
        !          2096: /tmp/sh*       Temporary file for `<<'.
        !          2097: /etc/passwd    Source of home directories for `~name'.
        !          2098: .fi
        !          2099: .SH LIMITATIONS
        !          2100: Words can be no longer than 1024 characters.
        !          2101: The system limits argument lists to 10240 characters.
        !          2102: The number of arguments to a command which involves filename expansion
        !          2103: is limited to 1/6'th the number of characters allowed in an argument list.
        !          2104: Command substitutions may substitute no more characters than are
        !          2105: allowed in an argument list.
        !          2106: To detect looping, the shell restricts the number of
        !          2107: .I alias
        !          2108: substititutions on a single line to 20.
        !          2109: .SH "SEE ALSO"
        !          2110: sh(1), newcsh(1), access(2), exec(2), fork(2), killpg(2), pipe(2), sigsys(2),
        !          2111: umask(2), vlimit(2), wait(2), jobs(3), sigset(3), tty(4), a.out(5), environ(5),
        !          2112: `An introduction to the C shell'
        !          2113: .SH BUGS
        !          2114: When a command is restarted from a stop,
        !          2115: the shell prints the directory it started in if this is different
        !          2116: from the current directory; this can be misleading (i.e. wrong)
        !          2117: as the job may have changed directories internally.
        !          2118: .PP
        !          2119: Shell builtin functions are not stoppable/restartable.
        !          2120: Command sequences of the form `a ; b ; c' are also not handled gracefully
        !          2121: when stopping is attempted.  If you suspend `b', the shell will then
        !          2122: immediately execute `c'.  This is especially noticeable if this
        !          2123: expansion results from an
        !          2124: .I alias.
        !          2125: It suffices to place the sequence of commands in ()'s to force it to
        !          2126: a subshell, i.e. `( a ; b ; c )'.
        !          2127: .PP
        !          2128: Control over tty output after processes are started is primitive;
        !          2129: perhaps this will inspire someone to work on a good virtual
        !          2130: terminal interface.  In a virtual terminal interface much more
        !          2131: interesting things could be done with output control.
        !          2132: .PP
        !          2133: Alias substitution is most often used to clumsily simulate shell procedures;
        !          2134: shell procedures should be provided rather than aliases.
        !          2135: .PP
        !          2136: Commands within loops, prompted for by `?', are not placed in the
        !          2137: .I history
        !          2138: list.
        !          2139: Control structure should be parsed rather than being recognized as built-in
        !          2140: commands.  This would allow control commands to be placed anywhere,
        !          2141: to be combined with `|', and to be used with `&' and `;' metasyntax.
        !          2142: .PP
        !          2143: It should be possible to use the `:' modifiers on the output of command
        !          2144: substitutions.
        !          2145: All and more than one `:' modifier should be allowed on `$' substitutions.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.