Annotation of 43BSDReno/bin/csh/csh.1, revision 1.1

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