Annotation of researchv10dc/man/manb/csh.1, revision 1.1.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.