Annotation of 43BSDTahoe/man/man1/csh.1, revision 1.1

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

unix.superglobalmegacorp.com

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