packages icon
 ...  is an enhanced but completely compatible version of the Berkeley  UNIX
 C shell, It is a command language interpreter usable both as an interactive
 login shell and a shell script command processor.  It includes  a  command-
 line editor (see programmable word completion (see spelling correction (see
 a history mechanism (see job control (see and a C-like syntax.  The section
 describes  major  enhancements  of over Throughout this manual, features of
 not found in most implementations (specifically,  the  4.4BSD  are  labeled
 with  and  features  which  are  present  in but not usually documented are
 labeled with If the first argument (argument 0) to the shell is then it  is
 a  login  shell.  A login shell can be also specified by invoking the shell
 with the flag as the only argument.  The rest of  the  flag  arguments  are
 interpreted  as  follows:  Forces  a  from  option  processing, causing any
 further shell  arguments  to  be  treated  as  non-option  arguments.   The
 remaining  arguments will not be interpreted as shell options.  This may be
 used to pass options to  a  shell  script  without  confusion  or  possible
 subterfuge.   The  shell  will  not  run  a set-user ID script without this
 option.  Commands are read from  the  following  argument  (which  must  be
 present,  and  must be a single argument), stored in the shell variable for
 reference, and executed.  Any remaining arguments are placed in  the  shell
 variable.   The  shell  loads  the  directory stack from as described under
 whether or not it is a login shell. (+) Sets the  environment  variable  to
 (Domain/OS  only)  (+)  The  shell  exits if any invoked command terminates
 abnormally or yields a non-zero exit status.  The shell does not  load  any
 resource  or startup files, or perform any command hashing, and thus starts
 faster.  The shell uses instead of to spawn processes.  (+)  The  shell  is
 interactive  and prompts for its top-level input, even if it appears to not
 be a terminal.  Shells are interactive without this option if their  inputs
 and outputs are terminals.  The shell is a login shell.  Applicable only if
 is the only flag specified.  The shell loads even if it does not belong  to
 the effective user.  Newer versions of can pass to the shell. (+) The shell
 parses commands but does not execute them.  This aids  in  debugging  shell
 scripts.   The shell accepts SIGQUIT (see and behaves when it is used under
 a debugger.  Job control is disabled. (u) Command input is taken  from  the
 standard  input.   The  shell reads and executes a single line of input.  A
 may be used to escape the newline at the end of this line and continue onto
 another  line.   Sets  the  shell variable, so that command input is echoed
 after history substitution.  Sets the shell variable, so that commands  are
 echoed  immediately  before execution.  Sets the shell variable even before
 executing Is to as is to Print a help message on the  standard  output  and
 exit.  (+)  Print  the version/platform/compilation options on the standard
 output and exit.  This information is also contained in the shell variable.
 (+) After processing of flag arguments, if arguments remain but none of the
 or options were given, the first argument is taken as the name of a file of
 commands,  or to be executed.  The shell opens this file and saves its name
 for possible resubstitution by Because many systems use either the standard
 version  6  or version 7 shells whose shell scripts are not compatible with
 this shell, the shell uses such a shell to execute  a  script  whose  first
 character  is  not  a  i.e., that does not start with a comment.  Remaining
 arguments are placed in the  shell  variable.   A  login  shell  begins  by
 executing commands from the system files and It then executes commands from
 files in the user's directory: first or, if is not found, then the contents
 of  (or  the  value of the shell variable) are loaded into memory, then and
 finally (or the value of the shell  variable)  (+).   The  shell  may  read
 before  instead of after and before instead of after or and if so compiled;
 see the shell variable. (+) Non-login shells read only and or  on  startup.
 For examples of startup files, please consult: Commands like and which need
 be run only once per login, usually go in one's file.  Users  who  need  to
 use  the  same  set of files with both and can have only a which checks for
 the existence of the shell variable before using -specific commands, or can
 have both a and a which s (see the builtin command) The rest of this manual
 uses to mean or, if is not found, In the  normal  case,  the  shell  begins
 reading commands from the terminal, prompting with (Processing of arguments
 and the use of the shell to process files containing  command  scripts  are
 described  later.)  The  shell  repeatedly  reads  a line of command input,
 breaks it into words, places it on the command history list, parses it  and
 executes  each  command in the line.  One can log out by typing on an empty
 line, or or via the shell's autologout mechanism (see the shell  variable).
 When  a  login  shell  terminates  it  sets  the  shell  variable  to or as
 appropriate, then executes commands from the files and The shell  may  drop
 DTR  on  logout  if  so compiled; see the shell variable.  The names of the
 system login and logout files vary from system to system for  compatibility
 with  different  variants;  see We first describe The and sections describe
 two sets of functionality that are implemented as editor commands but which
 deserve  their  own  treatment.   Finally,  lists  and describes the editor
 commands specific to the shell and their  default  bindings.   Command-line
 input  can  be  edited  using  key sequences much like those used in or The
 editor is active only when the shell  variable  is  set,  which  it  is  by
 default  in  interactive  shells.   The  builtin can display and change key
 bindings to editor commands (see -style key bindings are  used  by  default
 (unless  the shell was compiled otherwise; see the shell variable), but can
 change the key bindings to -style bindings  en  masse.   The  shell  always
 binds  the  arrow  keys  (as defined in the environment variable) to editor
 commands: unless doing so would  alter  another  single-character  binding.
 One  can  set  the  arrow  key escape sequences to the empty string with to
 prevent these bindings.  The ANSI/VT100 sequences for arrow keys are always
 bound.   Other  key  bindings  are, for the most part, what and users would
 expect and can easily be displayed by so there is  no  need  to  list  them
 here.   Likewise,  can list the editor commands with a short description of
 each.  Certain key bindings have different behavior depending if or  -style
 bindings  are  being  used;  see  for  more  information.  Note that editor
 commands do not have the same notion of a as does the  shell.   The  editor
 delimits  words  with  any  non-alphanumeric  characters  not  in the shell
 variable while the  shell  recognizes  only  whitespace  and  some  of  the
 characters  with  special  meanings  to it, listed under The shell is often
 able to complete words when given  a  unique  abbreviation.   For  example,
 typing  part  of a word and hit the tab key to run the editor command.  The
 shell completes the filename to replacing  the  incomplete  word  with  the
 complete word in the input buffer.  (Note the terminal completion adds a to
 the end of completed directories and a space to the end of other  completed
 words,  to  speed  typing  and  provide  a  visual  indicator of successful
 completion.  The shell variable can be unset to prevent this.) If no  match
 is  found (perhaps doesn't exist), the terminal bell rings.  If the word is
 already complete (perhaps there is a on your system, or  perhaps  you  were
 thinking  too  far  ahead and typed the whole thing) a or space is added to
 the end if it isn't already there.  Completion works anywhere in the  line,
 not  at  just  the  end;  completed text pushes the rest of the line to the
 right.  Completion in the middle  of  a  word  often  results  in  leftover
 characters  to  the  right of the cursor that need to be deleted.  Commands
 and variables can be completed in much the same way.  For  example,  typing
 would  complete  to  if were the only command on your system beginning with
 Completion can find a command in any  directory  in  or  if  given  a  full
 pathname.   Typing  would  complete  to if no other variable began with The
 shell parses the input buffer to determine whether the  word  you  want  to
 complete should be completed as a filename, command or variable.  The first
 word in the buffer and the first word following or is considered  to  be  a
 command.   A  word beginning with is considered to be a variable.  Anything
 else is a filename.  An empty line is as a  filename.   You  can  list  the
 possible  completions  of  a  word  at any time by typing to run the editor
 command.  The shell lists the possible completions using  the  builtin  and
 reprints  the  prompt  and  unfinished  command  line,  for  example:  > ls
 /usr/l[^D] lbin/       lib/        local/      lost+found/ > ls  /usr/l  If
 the  shell  variable is set, the shell lists the remaining choices (if any)
 whenever  completion  fails:  >  set  autolist  >   nm   /usr/lib/libt[tab]
 libtermcap.a@  libtermlib.a@ > nm /usr/lib/libterm If the shell variable is
 set to choices are listed only  when  completion  fails  and  adds  no  new
 characters  to  the  word  being completed.  A filename to be completed can
 contain variables, your own or others' home  directories  abbreviated  with
 (see  and  directory  stack entries abbreviated with (see For example, > ls
 ~k[^D] kahn    kas     kellogg > ls ~ke[tab] > ls ~kellogg/ or > set  local
 =  /usr/local  > ls $lo[tab] > ls $local/[^D] bin/ etc/ lib/ man/ src/ > ls
 $local/ Note that variables can also be expanded explicitly with the editor
 command.   lists  at  only  the end of the line; in the middle of a line it
 deletes the character under the cursor and on an empty line it logs one out
 or,  if  the  variable  is  set, does nothing.  bound to the editor command
 lists completion possibilities anywhere on a line, and (or any one  of  the
 related  editor  commands  that  do  or  don't delete, list and/or log out,
 listed under can be bound to with the builtin command if so  desired.   The
 and editor commands (not bound to any keys by default) can be used to cycle
 up and down through the list of possible completions, replacing the current
 word with the next or previous word in the list.  The shell variable can be
 set to a list of suffixes  to  be  ignored  by  completion.   Consider  the
 following:  >  ls  Makefile         condiments.h~    main.o          side.c
 README            main.c            meal              side.o   condiments.h
 main.c~  >  set fignore = (.o \~) > emacs ma[^D] main.c   main.c~  main.o >
 emacs ma[tab] > emacs  main.c  and  are  ignored  by  completion  (but  not
 listing),  because  they end in suffixes in Note that a was needed in front
 of to prevent it from being expanded to as described under  is  ignored  if
 only  one  completion  is  possible.   If  the  shell  variable  is  set to
 completion  1)  ignores  case  and  2)  considers  periods,   hyphens   and
 underscores  and  to  be  word separators and hyphens and underscores to be
 equivalent.  If you had the following files comp.lang.c      comp.lang.perl
 comp.std.c++ comp.lang.c++    comp.std.c and typed it would be completed to
 and typing would list and Typing would list and  Typing  in  the  following
 directory  A_silly_file     a-hyphenated-file     another_silly_file  would
 list all three files, because case is ignored and hyphens  and  underscores
 are  equivalent.   Periods,  however,  are  not  equivalent  to  hyphens or
 underscores.  If the shell variable is set to completion ignores  case  and
 differences between a hyphen and an underscore word separator only when the
 user types a lowercase  character  or  a  hyphen.   Entering  an  uppercase
 character  or  an  underscore  will  not  match the corresponding lowercase
 character or hyphen  word  separator.   Typing  in  the  directory  of  the
 previous  example  would still list all three files, but typing would match
 only and typing would match just and because the user  explicitly  used  an
 uppercase  or an underscore character.  Completion and listing are affected
 by several other shell variables: can be set to complete  on  the  shortest
 possible  unique match, even if more typing might result in a longer match:
 > ls fodder   foo      food     foonly > set recexact  >  rm  fo[tab]  just
 beeps, because could expand to or but if we type another > rm foo[tab] > rm
 foo the completion completes on even though and also match.  can be set  to
 run  the  editor  command  before  each  completion  attempt, can be set to
 spelling-correct the word to  be  completed  (see  before  each  completion
 attempt  and  can  be set to complete commands automatically after one hits
 return.  can be set to make completion beep or not beep  in  a  variety  of
 situations,  and  can be set to never beep at all.  can be set to a list of
 directories  and/or  patterns  that  match  directories  to   prevent   the
 completion  mechanism  from ing those directories.  and can be set to limit
 the number of items and rows (respectively) that are listed without  asking
 first.   can  be  set  to make the shell list only executables when listing
 commands, but it is quite slow.  Finally, the builtin command can  be  used
 to  tell the shell how to complete words other than filenames, commands and
 variables.  Completion and listing do not work on  glob-patterns  (see  but
 the  and  editor  commands  perform equivalent functions for glob-patterns.
 The shell can sometimes correct the spelling  of  filenames,  commands  and
 variable  names  as  well as completing and listing them.  Individual words
 can be spelling-corrected with the editor command (usually bound to and and
 the  entire  input  buffer with (usually bound to The shell variable can be
 set to to correct the command name or to correct the entire line each  time
 return  is typed, and can be set to correct the word to be completed before
 each completion attempt.  When spelling correction is  invoked  in  any  of
 these  ways  and  the  shell  thinks  that  any part of the command line is
 misspelled, it prompts with the corrected line: > set correct =  cmd  >  lz
 /usr/bin CORRECT>ls /usr/bin (y|n|e|a)?  One can answer or space to execute
 the corrected line, to leave the uncorrected command in the  input  buffer,
 to  abort  the command as if had been hit, and anything else to execute the
 original  line  unchanged.   Spelling  correction  recognizes  user-defined
 completions  (see the builtin command).  If an input word in a position for
 which a completion is defined resembles a  word  in  the  completion  list,
 spelling correction registers a misspelling and suggests the latter word as
 a correction.  However, if the  input  word  does  not  match  any  of  the
 possible  completions  for  that  position,  spelling  correction  does not
 register  a  misspelling.   Like  completion,  spelling  correction   works
 anywhere  in  the  line,  pushing  the  rest  of  the line to the right and
 possibly leaving extra characters to the right of the  cursor.   lists  key
 bindings  and  lists  and  briefly  describes editor commands.  Only new or
 especially interesting editor commands are described  here.   See  and  for
 descriptions of each editor's key bindings.  The character or characters to
 which each command is bound by default is given in  parentheses.   means  a
 control character and a meta character, typed as (or on terminals without a
 meta key.  Case counts, but commands that are bound to letters  by  default
 are  bound to both lower- and uppercase letters for convenience.  Supported
 editor commands are: Move back a character.  Cursor  behavior  modified  by
 Cut  from  beginning of current word to cursor - saved in cut buffer.  Word
 boundary behavior modified by Move to  beginning  of  current  word.   Word
 boundary and cursor behavior modified by Move to beginning of line.  Cursor
 behavior modified by Capitalize  the  characters  from  cursor  to  end  of
 current  word.   Word  boundary  behavior  modified  by Completes a word as
 described under Like but steps up from the end of the list.   Replaces  the
 current  word with the first word in the list of possible completions.  May
 be repeated to step down through the list.  At the end of the  list,  beeps
 and  reverts  to  the  incomplete  word.   Like  but  ignores  user-defined
 completions.  Copies the previous word in the current line into  the  input
 buffer.   See  also  Word boundary behavior modified by Expands the current
 word to the most recent preceding one for which the current  is  a  leading
 substring, wrapping around the history list (once) if necessary.  Repeating
 without any intervening typing changes to  the  next  previous  word  etc.,
 skipping identical matches much like does.  Deletes the character under the
 cursor.  See also Cursor behavior modified by Does if there is a  character
 under the cursor or on an empty line.  See also Cursor behavior modified by
 Does if there is a character under the cursor or at the end  of  the  line.
 See  also  Does if there is a character under the cursor, at the end of the
 line or on an empty line.  See also those three  commands,  each  of  which
 does  only  a single action, and and each of which does a different two out
 of the three.  Cut from cursor to end of current word - save in cut buffer.
 Word  boundary  behavior  modified  by Like but steps down, stopping at the
 original input line.  Lowercase  the  characters  from  cursor  to  end  of
 current  word.   Word boundary behavior modified by Signals an end of file,
 causing the shell to exit unless the shell variable is set to prevent this.
 See  also  Move cursor to end of line.  Cursor behavior modified by Expands
 history substitutions in the current word.  See  See  also  and  the  shell
 variable.   Expands  the  glob-pattern to the left of the cursor.  See Like
 but expands history  substitutions  in  each  word  in  the  input  buffer.
 Expands  the  variable  to  the  left  of the cursor.  See Move forward one
 character.  Cursor behavior modified by Move  forward  to  end  of  current
 word.   Word  boundary  and  cursor behavior modified by Searches backwards
 through the history list for a command beginning with the current  contents
 of  the  input buffer up to the cursor and copies it into the input buffer.
 The search string may be a glob-pattern (see containing or and will proceed
 from the appropriate point in the history list.  Emacs mode only.  See also
 and Like but searches forward.  Searches backward  like  copies  the  first
 match  into  the  input buffer with the cursor positioned at the end of the
 pattern, and prompts with and the first match.  Additional  characters  may
 be  typed to extend the search, may be typed to continue searching with the
 same pattern, wrapping around the history list if necessary, must be  bound
 to  a  single  character  for this to work) or one of the following special
 characters may be typed: Appends the rest of the word under the  cursor  to
 the  search  pattern.   Undoes  the  effect of the last character typed and
 deletes a character  from  the  search  pattern  if  appropriate.   If  the
 previous  search  was  successful,  aborts the entire search.  If not, goes
 back to the last successful search.  Ends the search, leaving  the  current
 line  in the input buffer.  Any other character not bound to terminates the
 search, leaving  the  current  line  in  the  input  buffer,  and  is  then
 interpreted  as  normal input.  In particular, a carriage return causes the
 current line to be executed.  See also and Word boundary behavior  modified
 by  Like  but searches forward.  Word boundary behavior modified by Inserts
 the last word of the previous input line into the input buffer.   See  also
 Lists  completion  possibilities  as  described under See also and Like but
 ignores user-defined completions.  Lists (via the builtin) matches  to  the
 glob-pattern  (see  to  the  left of the cursor.  Does or on an empty line.
 See also Expands history  substitutions  in  the  current  line,  like  and
 inserts  a  space.   is  designed  to be bound to the space bar, but is not
 bound by default.  Searches for the current word in and, if  it  is  found,
 replaces  it  with the full path to the executable.  Special characters are
 quoted.  Aliases are expanded and quoted but commands  within  aliases  are
 not.  This command is useful with commands that take commands as arguments,
 e.g., and Expands the current word as described under the  setting  of  the
 shell  variable.   Toggles  between  input  and overwrite modes.  Saves the
 current input line and looks for a stopped job where the file name  portion
 of  its first word is found in the shell variable.  If is not set, then the
 file name portion of the environment variable if unset) and the environment
 variable  if  unset) will be used.  If such a job is found, it is restarted
 as if had been typed.  This is used to toggle back  and  forth  between  an
 editor  and the shell easily.  Some people bind this command to so they can
 do this even more  easily.   Searches  for  documentation  on  the  current
 command,  using  the  same notion of as the completion routines, and prints
 it.  There is no way to use a pager; is designed for short help files.   If
 the  special  alias  is  defined, it is run with the command name as a sole
 argument.  Else, documentation should be in a file named or which should be
 in  one of the directories listed in the environment variable.  If there is
 more than one help file only the first is printed.   In  insert  mode  (the
 default),  inserts  the  typed  character  into  the  input  line after the
 character under the cursor.  In  overwrite  mode,  replaces  the  character
 under  the  cursor  with  the  typed character.  The input mode is normally
 preserved between lines, but the shell variable can be set to or to put the
 editor in that mode at the beginning of each line.  See also Indicates that
 the following characters are part  of  a  multi-key  sequence.   Binding  a
 command  to  a  multi-key  sequence  really creates two bindings: the first
 character to  and  the  whole  sequence  to  the  command.   All  sequences
 beginning  with  a character bound to are effectively bound to unless bound
 to another command.  Attempts to correct the spelling of each word  in  the
 input  buffer, like but ignores words whose first character is one of or or
 which contain or to avoid problems with  switches,  substitutions  and  the
 like.   See  Attempts  to  correct  the  spelling  of  the  current word as
 described under Checks each component of a  word  which  appears  to  be  a
 pathname.   Expands or unexpands history substitutions in the input buffer.
 See also and the shell variable.  Beeps.  Copies the previous entry in  the
 history  list  into  the input buffer.  If is set, uses the literal form of
 the entry.  May be repeated to step up through the history  list,  stopping
 at  the  top.  Uppercase the characters from cursor to end of current word.
 Word boundary behavior modified by Vi goto  the  beginning  of  next  word.
 Word  boundary  and  cursor  behavior modified by Vi move to the end of the
 current word.  Word boundary behavior modified by Prompts with for a search
 string  (which may be a glob-pattern, as with searches for it and copies it
 into the input buffer.  The bell rings  if  no  match  is  found.   Hitting
 return  ends  the  search  and  leaves  the last match in the input buffer.
 Hitting escape ends the search and executes the match.   mode  only.   Like
 but  searches forward.  Does a (see the description of the builtin command)
 on the first word of the input buffer.  When executed immediately  after  a
 or  another  replaces  the yanked string with the next previous string from
 the killring.  This also has the effect of rotating the killring, such that
 this string will be considered the most recently killed by a later command.
 Repeating will cycle through the killring any number of times.   The  shell
 splits  input  lines into words at blanks and tabs.  The special characters
 and and the doubled characters and are always separate  words,  whether  or
 not  they  are  surrounded  by whitespace.  When the shell's input is not a
 terminal, the character is taken to begin a comment.  Each and the rest  of
 the  input line on which it appears is discarded before further parsing.  A
 special character (including a blank or tab) may be prevented  from  having
 its  special  meaning, and possibly made part of another word, by preceding
 it with a backslash or enclosing it in single double  or  backward  quotes.
 When not otherwise quoted a newline preceded by a is equivalent to a blank,
 but inside quotes this sequence results in  a  newline.   Furthermore,  all
 except  can  be prevented by enclosing the strings (or parts of strings) in
 which they appear with single quotes or by quoting the crucial character(s)
 (e.g., or for or respectively) with is no exception: quoting in any way any
 character of a word for which an has been defined prevents substitution  of
 the  alias.   The  usual  way  of  quoting an alias is to precede it with a
 backslash.) is prevented by backslashes but not by single quotes.   Strings
 quoted  with  double or backward quotes undergo and but other substitutions
 are prevented.  Text inside single or double quotes becomes a  single  word
 (or  part  of  one).  Metacharacters in these strings, including blanks and
 tabs, do not form separate words.  Only in one  special  case  (see  can  a
 double-quoted  string  yield  parts  of  more  than one word; single-quoted
 strings never do.  Backward quotes  are  special:  they  signal  which  may
 result  in  more  than  one  word.  C-style escape sequences can be used in
 single quoted strings by preceding the leading quote with  (+)  See  for  a
 complete  list  of  recognized  escape sequences.  Quoting complex strings,
 particularly strings which themselves contain quoting  characters,  can  be
 confusing.   Remember  that  quotes  need  not be used as they are in human
 writing!  It may be easier to quote not an entire string,  but  only  those
 parts of the string which need quoting, using different types of quoting to
 do so if appropriate.  The shell variable can be set  to  make  backslashes
 always  quote  and (+).  This may make complex quoting tasks easier, but it
 can cause syntax errors in scripts.  The  following  escape  sequences  are
 always  recognized  inside a string constructed using and optionally by the
 builtin command as controlled by  the  shell  variable.   Supported  escape
 sequences are: Bell.  Backspace.  The control character denoted by in If is
 a backslash, it must be doubled.  Escape.  Form feed.   Newline.   Carriage
 return.  Horizontal tab.  Vertical tab.  Literal backslash.  Literal single
 quote.  Literal double quote.  The character  corresponding  to  the  octal
 number   The   character  corresponding  to  the  hexadecimal  number  (1-2
 hexadecimal digits).  The character corresponding to the hexadecimal number
 (1-8 hexadecimal digits).  The Unicode code point (1-4 hexadecimal digits).
 The Unicode code point (1-8 hexadecimal digits).   The  implementations  of
 and  in  other  shells  may  take  a varying number of digits.  It is often
 safest to use leading zeros to  provide  the  maximum  expected  number  of
 digits.   We now describe the various transformations the shell performs on
 the input in the order in which they occur.  We note in  passing  the  data
 structures  involved  and  the  commands  and  variables which affect them.
 Remember that substitutions can be prevented by quoting as described  under
 Each command, or input from the terminal is saved in the history list.  The
 previous command is always saved, and the shell variable can be  set  to  a
 number  to  save  that many commands.  The shell variable can be set to not
 save duplicate events or consecutive duplicate events.  Saved commands  are
 numbered  sequentially from 1 and stamped with the time.  It is not usually
 necessary to use event numbers, but the current event number  can  be  made
 part of the prompt by placing an in the shell variable.  By default history
 entries are displayed by printing each parsed  token  separated  by  space;
 thus the redirection operator will be displayed as The shell actually saves
 history in expanded and literal (unexpanded) forms.  If the shell  variable
 is  set, commands that display and store history use the literal form.  The
 builtin command can print, store in a file, restore and clear  the  history
 list  at  any  time,  and  the  and shell variables can be set to store the
 history list automatically on logout and  restore  it  on  login.   History
 substitutions  introduce words from the history list into the input stream,
 making it easy to repeat commands, repeat arguments of a  previous  command
 in  the  current  command, or fix spelling mistakes in the previous command
 with little typing and a high degree of confidence.  History  substitutions
 begin  with  the character They may begin anywhere in the input stream, but
 they do not nest.  The may be preceded by a to prevent its special meaning;
 for convenience, a is passed unchanged when it is followed by a blank, tab,
 newline, or History substitutions also occur when an input line begins with
 see  The  characters used to signal history substitution and can be changed
 by setting the shell variable.  Any input line  which  contains  a  history
 substitution  is printed before it is executed.  A history substitution may
 have an (see which indicates the event from which words are to be taken,  a
 (see  which  selects  particular words from the chosen event, and/or a (see
 which manipulates the selected words.  A history event specification may be
 one of (with the history substitution character shown): A number, referring
 to a particular event.  An  offset,  referring  to  the  event  before  the
 current  event.  The current event.  This should be used carefully in where
 there is no check for recursion.  allows 10 levels of  recursion.  (+)  The
 previous event, equivalent to The most recent event whose first word begins
 with the string The most recent event which contains the string The  second
 can  be  omitted  if it is immediately followed by a newline.  For example,
 consider this bit of someone's history list:
  9  8:30    nroff -man wumpus.man 10  8:31    cp wumpus.man  wumpus.man.old
 11   8:36     vi  wumpus.man 12  8:37    diff wumpus.man.old wumpus.man The
 commands are shown with their event numbers and time stamps.   The  current
 event,  which  we  haven't  typed in yet, is event 13.  Typing or refers to
 event 11.  Typing refers to the previous event, 12.  can be abbreviated  if
 it is followed by which is described in and Typing refers to event 9, which
 begins with  Typing  refers  to  event  12,  which  contains  Without  word
 designators  or  modifiers  history  references simply expand to the entire
 event, so we might type to redo the command (event 10) or if the output  in
 the  previous  event,  12,  scrolled  off  the  top of the screen.  History
 references may be insulated from the surrounding text with  braces  and  if
 necessary.   For  example,  would look for a command beginning with and, in
 this example, not find one, but would expand unambiguously to  by  matching
 event  11.   Even  in braces, history substitutions do not nest.  (+) While
 expands, for example, to event 3 with the letter appended to it, expands it
 to  the  last  event  beginning  with only completely numeric arguments are
 treated as  event  numbers.   This  makes  it  possible  to  recall  events
 beginning with numbers.  To expand as in type To select words from an event
 we can follow the event specification by a and a designator for the desired
 words.   The words of an input line are numbered from 0, the first (usually
 command) word being 0, the second word (first argument) being 1, etc.   The
 basic  word  designators are, with columns for a leading and a leading (for
 the abbreviated word designators - see The first (command)  word.   The  th
 argument.   The  first argument, equivalent to The last argument.  The word
 matched by an search.  A range of words.  Equivalent to Equivalent  to  but
 returns  nothing  if  the  event  contains  only  1  word.   Equivalent  to
 Equivalent to but omitting the last word Equivalent to the command and  all
 arguments  except  the last argument.  Selected words are inserted into the
 command line separated by single blanks.  For example, the  command  (event
 12)  in  the  history  list  example  in might have been typed as (using to
 select the first argument from the previous event) or to  select  and  swap
 the  arguments  from  the  command (event 10).  If we didn't care about the
 order of the we might have typed or simply The  command  (event  10)  might
 have  been  typed  using to refer to the current event.  Typing would reuse
 the first two words from the command (event 9) to expand to The  separating
 the  event  specification  from  the  word designator can be omitted if the
 argument selector begins with a or For  example,  our  command  (event  12)
 might  have  been  typed  or,  equivalently,  However, if is abbreviated an
 argument  selector  beginning  with  will  be  interpreted  as   an   event
 specification.  A history reference may have a word designator but no event
 specification.  It then references the previous  command.   Continuing  our
 command  example  (event  12),  we  could  have typed simply or, to get the
 arguments in the opposite order, just  The  word  or  words  in  a  history
 reference  can  be  edited,  or  by following it with one or more modifiers
 (with the leading shown), each preceded by a  Remove  a  trailing  pathname
 component,  leaving  the  head.   Remove  all  leading pathname components,
 leaving the tail.  Remove a  filename  extension  leaving  the  root  name.
 Remove  all  but  the  extension.   Uppercase  the  first lowercase letter.
 Lowercase the first uppercase letter.  Substitute for is  simply  a  string
 like  not  a regular expression as in the eponymous command.  Any character
 may be used as the delimiter in place  of  a  can  be  used  to  quote  the
 delimiter  inside and The character in the is replaced by also quotes If is
 empty the from a previous substitution or the from  a  previous  search  or
 event number in event specification is used.  The trailing delimiter may be
 omitted if it is immediately followed by a newline.   Repeat  the  previous
 substitution.   Apply  the following modifier once to each word.  Apply the
 following modifier as many times as possible to a single word.  and can  be
 used  together  to  apply a modifier globally.  With the modifier, only the
 patterns contained in the original word are substituted, not patterns  that
 contain  any  substitution  result.   Print the new command line but do not
 execute it.  Quote the substituted words, preventing further substitutions.
 Same  as  but in addition preserve empty variables as a string containing a
 NUL.  This is useful to preserve positional arguments for  example:  >  set
 args=('arg  1' '' 'arg 3') > tcsh -f -c 'echo ${#argv}' $args:gQ 3 Like but
 break into words at blanks, tabs and newlines.  Modifiers  are  applied  to
 only  the  first  modifiable  word (unless is used).  It is an error for no
 word to be modifiable.  For example, the command (event 12) in the  history
 list  example  in  might  have been typed as using to remove from the first
 argument on the same line We could type then to capitalize  to  upper  case
 the  first  word  to  or  to upper case all words.  We might follow with to
 correct the spelling of (see and for  different  approaches).   (+)  In  as
 such,  only  one  modifier  may  be  applied  to  each  history or variable
 expansion.  In more than one may be  used,  for  example  %  mv  wumpus.man
 /usr/share/man/man1/wumpus.1 % man !$:t:r man wumpus In the result would be
 A substitution followed by a may need to be insulated from it with  braces:
 > mv a.out /usr/games/wumpus > setenv PATH !$:h:$PATH Bad ! modifier: $.  >
 setenv PATH  !{-2$:h}:$PATH  setenv  PATH  /usr/games:/bin:/usr/bin:.   The
 first  attempt  would  succeed  in  but  fails  in  because expects another
 modifier after the second rather than There is a special  abbreviation  for
 substitutions;  when  it  is  the  first  character  on  an  input line, is
 equivalent to Thus, we might follow the  example  from  with  to  make  the
 spelling  correction.  This is the only history substitution which does not
 explicitly begin with Finally, history can be accessed through  the  editor
 as  well  as through the substitutions just described.  The and and and and
 and editor commands search for events in the history  list  and  copy  them
 into  the  input  buffer.  The editor command switches between the expanded
 and literal forms of history lines in the input buffer.  and expand history
 substitutions   in  the  current  word  and  in  the  entire  input  buffer
 respectively.  The shell maintains a list of  aliases  which  can  be  set,
 unset and printed by the and commands.  After a command line is parsed into
 simple commands (see the first word  of  each  command,  left-to-right,  is
 checked  to  see  if it has an alias.  If so, the first word is replaced by
 the alias.  If the alias contains a  history  reference,  it  undergoes  as
 though  the  original  command  were the previous input line.  If the alias
 does not contain a history reference, the argument list is left  untouched.
 Thus  if the alias for were the command would become the argument list here
 being undisturbed.  If the alias for were then would become Aliases can  be
 used  to  introduce  parser  metasyntax.   For example, defines a which its
 arguments to the line printer.  Alias substitution is  repeated  until  the
 first  word of the command has no alias.  If an alias substitution does not
 change the first word (as in the previous example) it is flagged to prevent
 a  loop.   Other  loops  are detected and cause an error.  Some aliases are
 referred to by the shell; see The shell maintains a list of variables, each
 of  which  has  as value a list of zero or more words.  The values of shell
 variables can be displayed and changed with the and commands.   The  system
 maintains  its  own  list of variables.  These can be displayed and changed
 with and (+) Variables may be made read-only with Read-only  variables  may
 not  be  modified  or unset; attempting to do so will cause an error.  Once
 made read-only, a variable cannot be made writable, so should be used  with
 caution.   Environment  variables cannot be made read-only.  Some variables
 are set by the shell or referred to by it.  For instance, the  variable  is
 an  image  of the shell's argument list, and words of this variable's value
 are referred to in special ways.  Some of the variables referred to by  the
 shell  are  toggles;  the  shell  does  not  care what their value is, only
 whether they are set or not.  For instance, the variable is a toggle  which
 causes  command  input  to  be  echoed.   The command line option sets this
 variable.  lists all variables which are referred to by the  shell.   Other
 operations  treat  variables  numerically.   The  command  permits  numeric
 calculations to be  performed  and  the  result  assigned  to  a  variable.
 Variable values are, however, always represented as (zero or more) strings.
 For the purposes of numeric operations, the null string is considered to be
 zero, and the second and subsequent words of multi-word values are ignored.
 After the input line is aliased and parsed,  and  before  each  command  is
 executed,  variable  substitution  is  performed keyed by characters.  This
 expansion can be prevented by preceding the  with  a  except  within  pairs
 where  it  occurs, and within pairs where it occurs.  Strings quoted by are
 interpreted later (see so substitution does not occur there until later, if
 at all.  A is passed unchanged if followed by a blank, tab, or end-of-line.
 Input/output redirections are recognized before variable expansion, and are
 variable  expanded  separately.   Otherwise,  the  command  name and entire
 argument list are expanded together.  It is thus  possible  for  the  first
 (command) word (to this point) to generate more than one word, the first of
 which becomes the command name, and the rest  of  which  become  arguments.
 Unless   enclosed  in  or  given  the  modifier  the  results  of  variable
 substitution may eventually be command and filename substituted.  Within  a
 variable whose value consists of multiple words expands to a (portion of a)
 single word, with the words of the variable's value  separated  by  blanks.
 When  the modifier is applied to a substitution the variable will expand to
 multiple words with each word separated by a blank and  quoted  to  prevent
 later  command or filename substitution.  The editor command normally bound
 to can be used to interactively expand individual variables.  The following
 metasequences  are  provided for introducing variable values into the shell
 input: Substitutes the words of the value of variable each separated  by  a
 blank.   Braces insulate from following characters which would otherwise be
 part of it.  Shell variables have names consisting of  letters  and  digits
 starting  with  a letter.  The underscore character is considered a letter.
 If is not a shell variable, but is set in the environment, then that  value
 is  returned  (but some of the other forms given below are not available in
 this case).  Substitutes only the selected words from the value of  The  is
 subjected to substitution and may consist of a single number or two numbers
 separated by a The first word of a variable's  value  is  numbered  If  the
 first  number  of a range is omitted it defaults to If the last member of a
 range is omitted it defaults to The selects all words.  It is not an  error
 for  a  range  to  be  empty if the second argument is omitted or in range.
 Substitutes the name of the file from which command input  is  being  read.
 An  error  occurs  if  the  name is not known.  Equivalent to Equivalent to
 which is equivalent to Except as noted, it  is  an  error  to  reference  a
 variable which is not set.  The modifiers described under except for can be
 applied to the substitutions above.  More than one may be used.  (+) Braces
 may  be  needed  to insulate a variable substitution from a literal just as
 with  any  modifiers  must  appear  within  the  braces.    The   following
 substitutions  cannot be modified with modifiers: Substitutes the string if
 is set, if it is not.  Substitutes if the current input filename is  known,
 if  it  is  not.   Always in interactive shells.  Substitutes the number of
 words in Equivalent to (+) Substitutes the  number  of  characters  in  (+)
 Substitutes  the  number of characters in (+) Equivalent to (+) Substitutes
 the (decimal) process  number  of  the  (parent)  shell.   Substitutes  the
 (decimal)  process  number  of  the last background process started by this
 shell.  (+) Substitutes the command line of the last command executed.  (+)
 Substitutes  a line from the standard input, with no further interpretation
 thereafter.  It can be used to read from the keyboard in  a  shell  script.
 (+) While always quotes as if it were equivalent to does not.  Furthermore,
 when is waiting for a line to be typed the user may type  an  interrupt  to
 interrupt  the  sequence into which the line is to be substituted, but does
 not allow this.  The remaining substitutions are applied selectively to the
 arguments  of  builtin  commands.   This means that portions of expressions
 which are not  evaluated  are  not  subjected  to  these  expansions.   For
 commands  which  are  not  internal  to  the  shell,  the  command  name is
 substituted separately from the argument  list.   This  occurs  very  late,
 after  input-output  redirection  is  performed, and in a child of the main
 shell.  Command substitution is indicated by  a  command  enclosed  in  The
 output  from  such  a command is broken into separate words at blanks, tabs
 and newlines, and null words are discarded.  The  output  is  variable  and
 command  substituted  and  put  in  place  of the original string.  Command
 substitutions inside double quotes retain blanks and  tabs;  only  newlines
 force new words.  The single final newline does not force a new word in any
 case.  It is thus possible for a command substitution to yield only part of
 a word, even if the command outputs a complete line.  By default, the shell
 since version 6.12 replaces all newline and carriage return  characters  in
 the  command  by  spaces.   If  this  is switched off by unsetting newlines
 separate commands as usual.  If a word contains any of the characters or or
 begins with the character it is a candidate for filename substitution, also
 known as This word is then regarded as  a  pattern  and  replaced  with  an
 alphabetically  sorted  list  of  file  names  which match the pattern.  In
 matching filenames, the  character  at  the  beginning  of  a  filename  or
 immediately following a as well as the character must be matched explicitly
 (unless either or or both are set (+)).  The character matches  any  string
 of characters, including the null string.  The character matches any single
 character.  The sequence  matches  any  one  of  the  characters  enclosed.
 Within  a  pair  of characters separated by matches any character lexically
 between the two.  (+) Some  glob-patterns  can  be  negated:  The  sequence
 matches  any  single character specified by the characters and/or ranges of
 characters in the braces.  An entire glob-pattern can also be negated  with
 >  echo  * bang crash crunch ouch > echo ^cr* bang ouch Glob-patterns which
 do not use or or which use or  (below)  are  not  negated  correctly.   The
 metanotation  is  a shorthand for Left-to-right order is preserved: expands
 to The results of matches are sorted separately at a low level to  preserve
 this  order:  might expand to (Note that was not sorted with the results of
 matching It is not an error when this construct expands to files  which  do
 not  exist,  but it is possible to get an error from a command to which the
 expanded list is passed.  This construct may be nested.  As a special  case
 the  words and are passed undisturbed.  The character at the beginning of a
 filename refers to home directories.  Standing alone, i.e., it  expands  to
 the  invoker's  home  directory  as  reflected  in  the  value of the shell
 variable.  When followed by  a  name  consisting  of  letters,  digits  and
 characters  the  shell  searches  for a user with that name and substitutes
 their home directory; thus might expand to  and  might  expand  to  If  the
 character  is  followed  by  a  character other than a letter or or appears
 elsewhere than at the beginning of a  word,  it  is  left  undisturbed.   A
 command  like  does  not,  therefore, do home directory substitution as one
 might hope.  It is an error  for  a  glob-pattern  containing  or  with  or
 without  not  to  match  any files.  However, only one pattern in a list of
 glob-patterns must match a file (so that, e.g., would fail  only  if  there
 were  no  files  in  the  current  directory  ending in or and if the shell
 variable is set a pattern (or list of patterns) which  matches  nothing  is
 left unchanged rather than causing an error.  The shell variable can be set
 to allow or as a file glob pattern that matches any  string  of  characters
 including   recursively   traversing  any  existing  sub-directories.   For
 example, will list all the .c files in the current directory tree.  If used
 by  itself,  it  will match zero or more sub-directories.  For example will
 list any file named in the directory tree;  will  match  any  file  in  the
 directory  tree  ending  in  and  will  match  any .h file with either in a
 subdirectory name or in the filename  itself.   To  prevent  problems  with
 recursion,   the  glob-pattern  will  not  descend  into  a  symbolic  link
 containing a directory.  To override this, use (+) The shell  variable  can
 be  set  to prevent filename substitution, and the editor command, normally
 bound  to  can  be  used  to  interactively  expand   individual   filename
 substitutions.  The directory stack is a list of directories, numbered from
 zero, used by the and builtin  commands.   can  print,  store  in  a  file,
 restore  and  clear  the  directory  stack  at  any time, and the and shell
 variables can be set to store the directory stack automatically  on  logout
 and  restore  it  on  login.  The shell variable can be examined to see the
 directory stack and set to put arbitrary  directories  into  the  directory
 stack.  The character followed by one or more digits expands to an entry in
 the directory stack.  The special case expands to the last directory in the
 stack.   For  example, > dirs -v 0       /usr/bin 1       /usr/spool/uucp 2
 /usr/accts/sys   >   echo   =1   /usr/spool/uucp   >    echo    =0/calendar
 /usr/bin/calendar  > echo =- /usr/accts/sys The and shell variables and the
 editor command apply to directory stack as well as filename  substitutions.
 There  are  several  more transformations involving filenames, not strictly
 related to the above but mentioned here for completeness.  filename may  be
 expanded  to  a full path when the variable is set to Quoting prevents this
 expansion, and the editor command does it on demand.   The  editor  command
 expands  commands  in into full paths on demand.  Finally, and interpret as
 the old working directory (equivalent to the shell variable This is  not  a
 substitution at all, but an abbreviation recognized by only those commands.
 Nonetheless, it too can be prevented by quoting.  The next  three  sections
 describe  how  the  shell  executes commands and deals with their input and
 output.  A simple command is a  sequence  of  words,  the  first  of  which
 specifies  the  command to be executed.  A series of simple commands joined
 by characters forms a pipeline.  The output of each command in  a  pipeline
 is  connected  to the input of the next.  Simple commands and pipelines may
 be joined into sequences with and will be executed sequentially.   Commands
 and  pipelines  can also be joined into sequences with or indicating, as in
 the C language, that the second is to be executed only if the  first  fails
 or  succeeds  respectively.   A simple command, pipeline or sequence may be
 placed in parentheses and to form a simple command, which may in turn be  a
 component  of  a pipeline or sequence.  A command, pipeline or sequence can
 be executed without waiting for it to terminate by  following  it  with  an
 Builtin  commands  are  executed  within  the shell.  If any component of a
 pipeline except the last is a builtin command, the pipeline is executed  in
 a  subshell.   Parenthesized  commands  are  always executed in a subshell.
 (cd; pwd); pwd thus prints  the  directory,  leaving  you  where  you  were
 (printing  this  after the home directory), while cd; pwd leaves you in the
 directory.  Parenthesized commands are most  often  used  to  prevent  from
 affecting the current shell.  When a command to be executed is found not to
 be a builtin command the shell attempts to execute  the  command  via  Each
 word in the variable names a directory in which the shell will look for the
 command.  If the shell is not given a option, the shell hashes the names in
 these  directories  into an internal table so that it will try an in only a
 directory where there is a possibility  that  the  command  resides  there.
 This greatly speeds command location when a large number of directories are
 present in the search path.  This hashing mechanism is not used: If hashing
 is  turned  explicitly  off via If the shell was given a For each directory
 component of which does not begin with a If the command contains a  In  the
 above  four  cases the shell concatenates each component of the path vector
 with the given command name to form a path name of a  file  which  it  then
 attempts  to execute it.  If execution is successful, the search stops.  If
 the file has execute permissions but is not an  executable  to  the  system
 (i.e.,  it  is neither an executable binary nor a script that specifies its
 interpreter), then it is assumed to be a file containing shell commands and
 a new shell is spawned to read it.  The special alias may be set to specify
 an interpreter other than the  shell  itself.   On  systems  which  do  not
 understand  the  script interpreter convention the shell may be compiled to
 emulate it; see the shell variable.  If so, the shell checks the first line
 of the file to see if it is of the form If it is, the shell starts with the
 given s and feeds the file to it on standard input.  The standard input and
 standard  output  of a command may be redirected with the following syntax:
 Open file (which is first variable, command and filename expanded)  as  the
 standard input.  Read the shell input up to a line which is identical to is
 not subjected to variable, filename or command substitution, and each input
 line  is  compared to before any substitutions are done on this input line.
 Unless a quoting  or  appears  in  variable  and  command  substitution  is
 performed  on  the  intervening lines, allowing to quote and Commands which
 are substituted have all blanks, tabs, and newlines preserved,  except  for
 the  final  newline  which  is dropped.  The resultant text is placed in an
 anonymous temporary file which is given to the command as  standard  input.
 The file is used as standard output.  If the file does not exist then it is
 created; if the file exists, it is truncated, its previous  contents  being
 lost.   If  the shell variable is set, then the file must not exist or be a
 character special file (e.g., a terminal or  or  an  error  results.   This
 helps  prevent accidental destruction of files.  In this case the forms can
 be used to suppress this check.  If is given in is allowed on empty  files;
 if  is  given  in  an  interacive confirmation is presented, rather than an
 error.  The forms involving route the diagnostic output into the  specified
 file  as well as the standard output.  is expanded in the same way as input
 filenames are.  Like but appends output to the end of If the shell variable
 is  set, then it is an error for the file to exist, unless one of the forms
 is given.  A command receives  the  environment  in  which  the  shell  was
 invoked  as modified by the input-output parameters and the presence of the
 command in a pipeline.  Thus, unlike some  previous  shells,  commands  run
 from a file of shell commands have no access to the text of the commands by
 default; rather they receive the original standard input of the shell.  The
 mechanism  should  be  used  to  present  inline  data.  This permits shell
 command scripts to function as components of pipelines and allows the shell
 to  block  read  its  input.   Note  that  the default standard input for a
 command run detached is the empty file but the original standard  input  of
 the  shell.  If this is a terminal and if the process attempts to read from
 the terminal, then the process will block and the  user  will  be  notified
 (see  Diagnostic  output  may  be directed through a pipe with the standard
 output.  Simply use the form rather than just The  shell  cannot  presently
 redirect diagnostic output without also redirecting standard output, but is
 often an acceptable workaround.  Either or may be to  send  output  to  the
 terminal.   Having  described  how  the  shell accepts, parses and executes
 command lines, we now turn to a variety of its useful features.  The  shell
 contains  a  number  of  commands which can be used to regulate the flow of
 control in command files (shell scripts) and (in limited but  useful  ways)
 from  terminal  input.   These commands all operate by forcing the shell to
 reread or skip in its input and, due to the  implementation,  restrict  the
 placement of some of the commands.  The and statements, as well as the form
 of the statement, require that the major keywords appear in a single simple
 command  on  an  input  line  as  shown below.  If the shell's input is not
 seekable, the shell buffers up input whenever a  loop  is  being  read  and
 performs  seeks in this internal buffer to accomplish the rereading implied
 by the loop.  (To the extent that this allows, backward s will  succeed  on
 non-seekable  inputs.)  The  and  builtin  commands  use expressions with a
 common syntax.  The expressions can include any of the operators  described
 in  the  next  three  sections.   Note that the builtin command has its own
 separate syntax.  These operators are similar to those of C  and  have  the
 same  precedence.  The operators, in descending precedence, with equivalent
 precedence per line, are: The and  operators  compare  their  arguments  as
 strings;  all  others  operate  on numbers.  The operators and are like and
 except that the right hand side is a glob-pattern (see  against  which  the
 left hand operand is matched.  This reduces the need for use of the builtin
 command in shell  scripts  when  all  that  is  really  needed  is  pattern
 matching.   Null  or  missing  arguments  are considered The results of all
 expressions are strings, which represent decimal numbers.  It is  important
 to  note  that  no  two  components of an expression can appear in the same
 word;  except  when  adjacent  to  components  of  expressions  which   are
 syntactically  significant  to  the  parser  they  should  be surrounded by
 spaces.  Commands can be executed in  expressions  and  their  exit  status
 returned by enclosing them in braces and Remember that the braces should be
 separated from the words of the  command  by  spaces.   Command  executions
 succeed,  returning  true,  i.e.,  if  the  command  exits  with  status 0,
 otherwise they  fail,  returning  false,  i.e.,  If  more  detailed  status
 information  is  required then the command should be executed outside of an
 expression and the  shell  variable  examined.   Some  of  these  operators
 perform  true/false  tests  on  files and related objects.  They are of the
 form where  is  one  of:  Read  access.   Write  access.   Execute  access.
 Executable  in the path or shell builtin, e.g., and are generally true, but
 is not. (+) Existence.  Ownership.  Zero size.  Non-zero  size.  (+)  Plain
 file.   Directory.   Symbolic link. (+) * Block special file. (+) Character
 special file. (+) Named pipe (fifo). (+) * Socket special file. (+) *  Set-
 user-ID bit is set. (+) Set-group-ID bit is set. (+) Sticky bit is set. (+)
 (which must be a digit) is an open file descriptor for a  terminal  device.
 (+)  Has been migrated (Convex only). (+) Applies subsequent operators in a
 multiple-operator test to a symbolic link rather than to the file to  which
 the  link points. (+) * is command and filename expanded and then tested to
 see if it has the specified relationship to the real  user.   If  does  not
 exist  or  is  inaccessible  or,  for  the  operators  indicated  by if the
 specified file type  does  not  exist  on  the  current  system,  then  all
 inquiries   return  false,  i.e.,  These  operators  may  be  combined  for
 conciseness: is equivalent to (+) For example, is true (returns  for  plain
 executable  files,  but  not  for  directories.  may be used in a multiple-
 operator test to apply subsequent operators to a symbolic link rather  than
 to the file to which the link points.  For example, is true for links owned
 by the invoking user.  and are always true for links  and  false  for  non-
 links.   has  a  different  meaning  when  it  is  the  last  operator in a
 multiple-operator test; see below.  It is  possible  but  not  useful,  and
 sometimes  misleading,  to combine operators which expect to be a file with
 operators which do not (e.g., and Following with a  non-file  operator  can
 lead  to  particularly  strange  results.   Other  operators  return  other
 information, i.e., not just or (+) They have the same format as before; may
 be one of: Last file access time, as the number of seconds since the epoch.
 Like but in timestamp format, e.g., Last file modification time.  Like  but
 in  timestamp format.  Last inode modification time.  Like but in timestamp
 format.  Device number.  Inode number.  Composite ile  identifier,  in  the
 form  The name of the file pointed to by a symbolic link.  Number of (hard)
 links.  Permissions, in octal, without leading  zero.   Like  with  leading
 zero.   Equivalent  to  For  example,  returns  if is writable by group and
 other, if by group only, and  if  by  neither.   Like  with  leading  zero.
 Numeric  userid.   Username,  or  the  numeric  userid  if  the username is
 unknown.  Numeric groupid.   Groupname,  or  the  numeric  groupid  if  the
 groupname  is  unknown.   Size,  in bytes.  Only one of these operators may
 appear in a multiple-operator test, and it must be the last.  Note that has
 a  different  meaning  at  the  end of and elsewhere in a multiple-operator
 test.  Because is a valid return value for many of these operators, they do
 not return when they fail: most return and returns If the shell is compiled
 with POSIX defined (see the shell variable), the result of a  file  inquiry
 is  based  on  the permission bits of the file and not on the result of the
 system call.  For example, if one tests a file with whose permissions would
 ordinarily  allow  writing but which is on a file system mounted read-only,
 the test will succeed in a POSIX shell but fail in a non-POSIX shell.  File
 inquiry  operators can also be evaluated with the builtin command (+).  The
 shell associates a with each pipeline.  It keeps a table of  current  jobs,
 printed by the command, and assigns them small integer numbers.  When a job
 is started asynchronously with the shell prints a line which looks like [1]
 1234  indicating  that  the  job  which  was started asynchronously was job
 number 1 and had one (top-level) process, whose process id  was  1234.   If
 you are running a job and wish to do something else you may hit the suspend
 key (usually which sends a STOP signal to the current job.  The shell  will
 then  normally indicate that the job has been and print another prompt.  If
 the shell variable is set,  all  jobs  will  be  listed  like  the  builtin
 command;  if  it is set to the listing will be in long format, like You can
 then manipulate the state of the suspended job.  You can put it in the with
 the  command  or  run some other commands and eventually bring the job back
 into the with (See also the editor command.) A takes effect immediately and
 is  like an interrupt in that pending output and unread input are discarded
 when it is typed.  The builtin command causes the shell  to  wait  for  all
 background jobs to complete.  The key sends a delayed suspend signal, which
 does not generate a STOP signal until a program  attempts  to  it,  to  the
 current  job.  This can usefully be typed ahead when you have prepared some
 commands for a job which you wish to stop after it has read them.  The  key
 performs this function in in is an editing command.  (+) A job being run in
 the background stops if it tries to read  from  the  terminal.   Background
 jobs  are  normally  allowed to produce output, but this can be disabled by
 giving the command If you set this tty option, then  background  jobs  will
 stop  when  they  try  to produce output like they do when they try to read
 input.  There are several  ways  to  refer  to  jobs  in  the  shell.   The
 character introduces a job name.  If you wish to refer to job number 1, you
 can name it as Just naming a job brings it to the  foreground;  thus  is  a
 synonym  for  bringing  job  1 back into the foreground.  Similarly, typing
 resumes job 1 in the background, just like A job can also be  named  by  an
 unambiguous  prefix  of  the  string  typed  in to start it: would normally
 restart a suspended job, if there were only one suspended  job  whose  name
 began  with  the  string It is also possible to type to specify a job whose
 text contains if there is only one such job.  The shell maintains a  notion
 of  the  current  and  previous  jobs.   In  output pertaining to jobs, the
 current job is marked with a and the previous job with a The  abbreviations
 and  (by analogy with the syntax of the mechanism) all refer to the current
 job, and refers to the previous job.  The job  control  mechanism  requires
 that  the  option  be  set  on  some  systems.   It  is  an artifact from a
 implementation of the tty  driver  which  allows  generation  of  interrupt
 characters  from  the  keyboard  to tell jobs to stop.  See and the builtin
 command for details on setting options in the new tty  driver.   The  shell
 learns  immediately  whenever a process changes state.  It normally informs
 you whenever a job becomes blocked so that no further progress is possible,
 but only right before it prints a prompt.  This is done so that it does not
 otherwise disturb your work.  If, however, you set the shell  variable  the
 shell  will notify you immediately of changes of status in background jobs.
 There is also a builtin command which marks a single process  so  that  its
 status  changes will be immediately reported.  By default marks the current
 process; simply enter after starting  a  background  job  to  mark  it  for
 immediate status reporting.  When you try to leave the shell while jobs are
 stopped, you will be warned that You may use the command to see  what  they
 are.   If  you do this or immediately try to exit again, the shell will not
 warn you a second time, and the suspended jobs will be  terminated.   There
 are  various  ways  to run commands and take other actions automatically at
 various times in the of the shell.  They are summarized here, and described
 in  detail under the appropriate and The builtin command puts commands in a
 scheduled-event list, to be executed by the shell at a given time.  The and
 can be set, respectively, to execute commands: when the shell wants to ring
 the bell, when the working directory changes, when a job is started  or  is
 brought  into the foreground, every minutes, before each prompt, and before
 each command gets executed.  The shell variable can be set to  log  out  or
 lock  the  shell  after a given number of minutes of inactivity.  The shell
 variable can be set to check for new mail periodically.  The shell variable
 can  be  set  to print the exit status of commands which exit with a status
 other than zero.  The shell variable can be set to ask the  user,  when  is
 typed,  if that is really what was meant.  The shell variable can be set to
 execute the builtin command after the completion of any process that  takes
 more  than  a  given number of CPU seconds.  The and shell variables can be
 set to report when selected users log in or out, and  the  builtin  command
 reports  on  those  users at any time.  The shell is eight bit clean (if so
 compiled; see the shell variable) and thus supports character sets  needing
 this capability.  NLS support differs depending on whether or not the shell
 was compiled to use the system's NLS (again,  see  In  either  case,  7-bit
 ASCII  is  the  default  character  code (e.g., the classification of which
 characters are printable) and sorting,  and  changing  the  or  environment
 variables  causes  a  check  for  possible changes in these respects.  When
 using the system's NLS, the function is  called  to  determine  appropriate
 character  code/classification  and  sorting  (e.g.,  would  yield  as  the
 character code).  This function  typically  examines  the  and  environment
 variables; refer to the system documentation for further details.  When not
 using the system's NLS, the shell simulates it by  assuming  that  the  ISO
 8859-1  character set is used whenever either of the and variables are set,
 regardless of their values.  Sorting is not affected for the simulated NLS.
 In  addition, with both real and simulated NLS, all printable characters in
 the range \200-\377, i.e., those  that  have  bindings,  are  automatically
 rebound  to  The  corresponding  binding  for the sequence, if any, is left
 alone.  These characters are not rebound if  the  environment  variable  is
 set.   This  may  be  useful  for the simulated NLS or a primitive real NLS
 which assumes full ISO  8859-1.   Otherwise,  all  bindings  in  the  range
 \240-\377  are  effectively undone.  Explicitly rebinding the relevant keys
 with is of course still possible.  Unknown characters (i.e., those that are
 neither  printable  nor control characters) are printed in the format \nnn.
 If the tty is not in 8 bit mode, other 8  bit  characters  are  printed  by
 converting  them to ASCII and using standout mode.  The shell never changes
 the 7/8 bit mode of the tty and tracks user-initiated changes  of  7/8  bit
 mode.   NLS  users  (or, for that matter, those who want to use a meta key)
 may need to explicitly set the tty in 8 bit mode  through  the  appropriate
 command  in, e.g., the file.  A number of new builtin commands are provided
 to support features in particular operating systems.  All are described  in
 detail  in the section.  On systems that support TCF (aix-ibm370, aix-ps2),
 and get and set the system execution path, and get and set the experimental
 version  prefix  and  migrates processes between sites.  The builtin prints
 the site on which each job is executing.  Under BS2000,  executes  commands
 of  the  underlying  BS2000/OSD  operating  system.   Under Domain/OS, adds
 shared libraries to the  current  environment,  changes  the  rootnode  and
 changes   the   systype.    Under  Mach,  is  equivalent  to  Mach's  Under
 Masscomp/RTU and Harris CX/UX, sets the universe.  Under Harris  CX/UX,  or
 runs  a  command  under the specified universe.  Under Convex/OS, prints or
 sets the universe.  The and environment variables indicate respectively the
 vendor,  operating system and machine type (microprocessor class or machine
 model) of the system on which the shell thinks it is  running.   These  are
 particularly useful when sharing one's home directory between several types
 of machines; one can, for example, set  path  =  (~/bin.$MACHTYPE  /usr/ucb
 /bin  /usr/bin .) in one's and put executables compiled for each machine in
 the appropriate directory.  The shell variable indicates what options  were
 chosen  when  the shell was compiled.  Note also the builtin, the and shell
 variables and the system-dependent locations of  the  shell's  input  files
 (see Login shells ignore interrupts when reading the file The shell ignores
 quit signals unless started with Login shells catch the  terminate  signal,
 but  non-login  shells  inherit  the terminate behavior from their parents.
 Other signals have the values which the shell inherited  from  its  parent.
 In  shell  scripts, the shell's handling of interrupt and terminate signals
 can be controlled with and its handling of hangups can be  controlled  with
 and The shell exits on a hangup (see also the shell variable).  By default,
 the shell's children do too, but the shell does not send them a hangup when
 it  exits.   arranges  for  the  shell  to send a hangup to a child when it
 exits, and sets a child to ignore hangups.  The shell uses three  different
 sets  of  terminal  modes:  used  when  editing;  used when quoting literal
 characters; and  used  when  executing  commands.   The  shell  holds  some
 settings  in  each  mode  constant,  so  commands  which leave the tty in a
 confused state do not interfere with the shell.   The  shell  also  matches
 changes  in  the  speed and padding of the tty.  The list of tty modes that
 are kept constant can be examined and modified with the builtin.  Note that
 although  the  editor uses CBREAK mode (or its equivalent), it takes typed-
 ahead characters anyway.  The and commands can be used  to  manipulate  and
 debug terminal capabilities from the command line.  On systems that support
 SIGWINCH or SIGWINDOW, the shell adapts to  window  resizing  automatically
 and  adjusts  the  environment  variables  and  if set.  If the environment
 variable contains and fields, the shell adjusts them  to  reflect  the  new
 window  size.   The  next  sections  of  this  manual  describe  all of the
 available and A synonym for the builtin command.  A synonym for the builtin
 command.   Does nothing, successfully.  The first form prints the values of
 all shell variables.  The second form assigns the value  of  to  The  third
 form  assigns  the  value  of  to  the  'th  component  of both and its 'th
 component must already exist.  may contain the operators etc., as in C.  If
 contains  or then at least that part of must be placed within and Note that
 the syntax of has nothing to do with that described under  The  fourth  and
 fifth forms increment or decrement or its 'th component.  The space between
 and is required.  The spaces between and  and  between  and  are  optional.
 Components  of  must be separated by spaces.  Without arguments, prints all
 aliases.  With prints the alias for name.  With and assigns as the alias of
 is  command  and  filename substituted.  may not be or See also the builtin
 command.  Shows the amount of dynamic memory  acquired,  broken  down  into
 used  and  free memory.  With an argument shows the number of free and used
 blocks in each size category.  The categories start at size 8 and double at
 each  step.   This  command's  output may vary across system types, because
 systems other than the VAX may use a different memory allocator.  Puts  the
 specified   jobs   (or,  without  arguments,  the  current  job)  into  the
 background, continuing each if it is stopped.  may be a number,  a  string,
 or  as  described  under The first form either lists all bound keys and the
 editor command to which each is bound, lists a description of the commands,
 or  binds  all  keys  to a specific mode.  The second form lists the editor
 command to which is bound.  The third form  binds  the  editor  command  to
 Supported  options:  Lists  or  changes key-bindings in the alternative key
 map.  This is the key map used  in  command  mode.   is  interpreted  as  a
 control  character written (e.g., or (e.g., a meta character written (e.g.,
 a function key written (e.g., or an extended prefix key written  (e.g.,  is
 interpreted  as a builtin or external command instead of an editor command.
 Binds all keys to the standard bindings for the default editor, as per  and
 Binds  all  keys  to  -style bindings.  Unsets is interpreted as a symbolic
 arrow key name, which may be one of or Lists  all  editor  commands  and  a
 short  description  of each.  Removes 's binding.  Be careful: does bind to
 it unbinds completely.  is  taken  as  a  literal  string  and  treated  as
 terminal  input when is typed.  Bound keys in are themselves reinterpreted,
 and this continues for  ten  levels  of  interpretation.   Prints  a  usage
 message.   Binds  all  keys  to  -style bindings.  Sets Forces a break from
 option processing, so the next word is taken as even if it begins with  may
 be  a single character or a string.  If a command is bound to a string, the
 first character of the string is bound to and the entire string is bound to
 the  command.   Control  characters in can be literal (they can be typed by
 preceding them with the editor command normally bound to or written  caret-
 character  style,  e.g.,  Delete is written (caret-question mark).  and can
 contain backslashed escape sequences (in the style of System V as  follows:
 Bell.    Backspace.    Escape.   Form  feed.   Newline.   Carriage  return.
 Horizontal tab.  Vertical tab.  The ASCII character  corresponding  to  the
 octal  number  nullifies the special meaning of the following character, if
 it has any, notably and  Passes  to  the  BS2000  command  interpreter  for
 execution.   Only  non-interactive  commands can be executed, and it is not
 possible to execute any command that would overlay the image of the current
 process,  like  /EXECUTE or /CALL-PROCEDURE. (BS2000 only) Causes execution
 to resume after the of the nearest enclosing or The remaining  commands  on
 the  current  line  are  executed.  Multi-level breaks are thus possible by
 writing them all on one line.  Causes a break from  a  resuming  after  the
 Prints  the  names  of  all  builtin  commands.   A synonym for the builtin
 command.  Available only if the  shell  was  so  compiled;  see  the  shell
 variable.   A  label  in a statement as discussed below.  If a directory is
 given, changes the shell's working directory to If not, changes  to  unless
 the  variable  is  not  set,  in  which  case  a  is required.  If is it is
 interpreted as the  previous  working  directory  (see  (+)  If  is  not  a
 subdirectory  of  the  current  directory  (and does not begin with or each
 component of the variable is checked  to  see  if  it  has  a  subdirectory
 Finally,  if all else fails but is a shell variable whose value begins with
 or then this is tried to see if it  is  a  directory,  and  the  option  is
 implied.   With  prints  the final directory stack, just like The and flags
 have the same effect on as on and they imply (+).   Using  forces  a  break
 from  option  processing so the next word is taken as the directory even if
 it begins with (+).  See also the and shell variables.  A synonym  for  the
 builtin  command.  ...  (+) Without arguments, lists all completions.  With
 lists completions for With and ..., defines completions.   may  be  a  full
 command  name  or  a  glob-pattern  (see It can begin with to indicate that
 completion should be used only when is  ambiguous.   specifies  which  word
 relative  to  the  current  word  is to be completed, and may be one of the
 following: Current-word completion.  is a glob-pattern which must match the
 beginning  of  the  current  word  on  the  command  line.  is ignored when
 completing the current word.  Like but includes when completing the current
 word.   Next-word  completion.   is  a  glob-pattern  which  must match the
 beginning of the previous word on the command line.  Like  but  must  match
 the  beginning of the word two before the current word.  Position-dependent
 completion.  is a numeric range, with the same syntax used to  index  shell
 variables,  which  must  include  the  current  word.  the list of possible
 completions, may be  one  of  the  following:  Aliases.   Bindings  (editor
 commands).   Commands  (builtin  or  external commands).  External commands
 which begin with the supplied path prefix.  Directories.  Directories which
 begin  with  the  supplied path prefix.  Environment variables.  Filenames.
 Filenames which begin with the supplied path  prefix.   Groupnames.   Jobs.
 Limits.   Nothing.   Shell  variables.  Signals.  Plain files.  Plain files
 which begin with the supplied  path  prefix.   Any  variables.   Usernames.
 Like  but prints when is used.  Completions.  Words from the variable Words
 from the given list.  Words from the output of  command.   is  an  optional
 glob-pattern.   If given, words from only that match are considered and the
 shell variable is ignored.  The types and may not have a pattern, and  uses
 as  an  explanatory  message  when the editor command is used.  is a single
 character to be appended to a successful completion.  If null, no character
 is  appended.   If  omitted (in which case the fourth delimiter can also be
 omitted), a slash is appended to directories and a space  to  other  words.
 invoked  from  has  the additional environment variable set, which contains
 (as its name indicates) contents of the current (already typed in)  command
 line.   One  can  examine and use contents of the environment variable in a
 custom script to build more sophisticated completions (see  completion  for
 included in this package).  Now for some examples.  Some commands take only
 directories as arguments, so there's no point completing  plain  files.   >
 complete  cd  'p/1/d/'  completes  only  the  first  word  following with a
 directory.  -type completion can  also  be  used  to  narrow  down  command
 completion:  > co[^D] complete compress > complete -co* 'p/0/(compress)/' >
 co[^D] > compress This completion completes commands (words in position  0,
 which  begin  with  (thus  matching  to  (the  only word in the list).  The
 leading indicates that this completion is to be used  with  only  ambiguous
 commands.   > complete find 'n/-user/u/' is an example of -type completion.
 Any word following and immediately following is completed from the list  of
 users.   >  complete  cc 'c/-I/d/' demonstrates -type completion.  Any word
 following and beginning with is completed as a directory.  is not taken  as
 part  of  the directory because we used lowercase Different are useful with
 different commands.  > complete alias 'p/1/a/' > complete  man  'p/*/c/'  >
 complete  set 'p/1/s/' > complete true 'p/1/x:Truth has no options./' These
 complete words following  with  aliases,  with  commands,  and  with  shell
 variables.   doesn't  have  any options, so does nothing when completion is
 attempted and prints when completion choices are  listed.   Note  that  the
 example,  and several other examples below, could just as well have used or
 as Words can be completed from a variable evaluated at completion  time,  >
 complete   ftp   'p/1/$hostnames/'   >   set   hostnames   =  (rtfm.mit.edu
 tesla.ee.cornell.edu) > ftp [^D] rtfm.mit.edu  tesla.ee.cornell.edu  >  ftp
 [^C]  >  set hostnames = (rtfm.mit.edu tesla.ee.cornell.edu uunet.uu.net) >
 ftp [^D] rtfm.mit.edu tesla.ee.cornell.edu uunet.uu.net or from  a  command
 run  at completion time: > complete kill 'p/*/`ps | awk \{print\ \$1\}`/' >
 kill -9 [^D] 23113 23377 23380 23406 23429 23529 23530 PID  Note  that  the
 command  does  not  itself quote its arguments, so the braces, space and in
 must be quoted explicitly.  One command can have  multiple  completions:  >
 complete  dbx  'p/2/(core)/' 'p/*/c/' completes the second argument to with
 the word and all other arguments with commands.  Note that  the  positional
 completion   is   specified   before  the  next-word  completion.   Because
 completions are evaluated from left to right, if the  next-word  completion
 were  specified  first  it would always match and the positional completion
 would never be  executed.   This  is  a  common  mistake  when  defining  a
 completion.   The  pattern  is  useful when a command takes files with only
 particular forms as arguments.  For example, > complete cc 'p/*/f:*.[cao]/'
 completes  arguments  to  files  ending  in only or can also exclude files,
 using negation of a  glob-pattern  as  described  under  One  might  use  >
 complete rm 'p/*/f:^*.{c,h,cc,C,tex,1,man,l,y}/' to exclude precious source
 code from completion.  Of course,  one  could  still  type  excluded  names
 manually or override the completion mechanism using the or editor commands.
 The and are like and respectively, but they use the argument in a different
 way:  to  restrict  completion  to  files  beginning with a particular path
 prefix.  For example, the Elm mail program  uses  as  an  abbreviation  for
 one's  mail  directory.  One might use > complete elm c@=@F:$HOME/Mail/@ to
 complete as if it were Note that we used the separator instead of to  avoid
 confusion  with the argument, and we used instead of because home directory
 substitution works at only the beginning of a  word.   is  used  to  add  a
 nonstandard  suffix  (not  space or for directories) to completed words.  >
 complete finger 'c/*@/$hostnames/' 'p/1/u/@' completes  arguments  to  from
 the  list  of  users,  appends  an  and  then  completes after the from the
 variable.  Note again the order in which  the  completions  are  specified.
 Finally,  here's  a  complex  example  for  inspiration:  > complete find \
 'n/-name/f/'  'n/-newer/f/'  'n/-{,n}cpio/f/'  \  'n/-exec/c/'   'n/-ok/c/'
 'n/-user/u/' \ 'n/-group/g/' 'n/-fstype/(nfs 4.2)/' \ 'n/-type/(b c d f l p
 s)/' \ 'c/-/(name newer cpio ncpio exec ok user \ group fstype  type  atime
 ctime  depth inum \ ls mtime nogroup nouser perm print prune \ size xdev)/'
 \ 'p/*/d/' This completes  words  following  or  (note  the  pattern  which
 matches both) to files, words following or to commands, words following and
 to users and groups respectively and words following or to members  of  the
 given lists.  It also completes the switches themselves from the given list
 (note the use of -type completion) and  completes  anything  not  otherwise
 completed  to a directory.  Whew.  Remember that programmed completions are
 ignored if the word being completed is a tilde substitution (beginning with
 or  a  variable  (beginning  with  See also the builtin command.  Continues
 execution of the nearest enclosing or The  rest  of  the  commands  on  the
 current  line  are  executed.   Labels the default case in a statement.  It
 should come after all labels.  (+) (+) The first form prints the  directory
 stack.   The top of the stack is at the left and the first directory in the
 stack is the  current  directory.   With  or  in  the  output  is  expanded
 explicitly  to  or  the  pathname  of  the home directory for user (+) With
 entries are wrapped before they reach the edge of  the  screen.   (+)  With
 entries  are  printed one per line, preceded by their stack positions.  (+)
 If more than one of or is given, takes precedence.  is  accepted  but  does
 nothing.   The second form with saves the directory stack to as a series of
 and commands.  The second form with sources which is presumably a directory
 stack  file  saved by the option or the mechanism.  In either case, is used
 if is not given and is used if is unset.  Note that  login  shells  do  the
 equivalent  of  on startup and, if is set, before exiting.  Because only is
 normally sourced before should be set in rather than The third form  clears
 the directory stack.  Writes each to the shell's standard output, separated
 by spaces and terminated with a newline.  The shell variable may be set  to
 emulate  (or not) the flags and escape sequences of the BSD and/or System V
 versions of see  and  Exercises  the  terminal  capabilities  (see  in  For
 example,  sends  the  cursor to the home position, sends it to column 3 and
 row 10, and prints in the status line.  If is or prints the value  of  that
 capability  or  indicating  that  the  terminal  does or does not have that
 capability).  One might use this to make the output  from  a  shell  script
 less  verbose  on  slow terminals, or limit command output to the number of
 lines on the screen: > set history=`echotc lines`  >  @  history--  Termcap
 strings  may  contain  wildcards which will not echo correctly.  One should
 use double quotes when setting a shell variable to  a  terminal  capability
 string,  as  in  the  following  example that places the date in the status
 line: > set tosl="`echotc ts  0`"  >  set  frsl="`echotc  fs`"  >  echo  -n
 "$tosl";date;  echo  -n  "$frsl"  With  nonexistent capabilities return the
 empty string rather than causing an error.  With messages are verbose.  See
 the description of the and statements below.  Treats the arguments as input
 to the shell and executes the resulting command(s) in the  context  of  the
 current  shell.   This is usually used to execute commands generated as the
 result of command or variable substitution, because parsing  occurs  before
 these  substitutions.   See  for  a sample use of Executes the specified in
 place of the current shell.  The shell exits either with the value  of  the
 specified  (an expression, as described under or, without with the value 0.
 Brings the specified jobs (or, without arguments, the current job) into the
 foreground,  continuing  each if it is stopped.  may be a number, a string,
 or as described under See also the editor command.   Applies  (which  is  a
 file inquiry operator as described under to each and returns the results as
 a space-separated list.  Successively sets the variable to each  member  of
 and executes the sequence of commands between this command and the matching
 (Both and must appear alone on separate lines.)  The builtin command may be
 used  to continue the loop prematurely and the builtin command to terminate
 it prematurely.  When this command is read from the terminal, the  loop  is
 read  once  prompting  with  (or  before  any  statements  in  the loop are
 executed.  If you make a mistake typing in a loop at the terminal  you  can
 rub  it  out.   Prints  the  system  execution path.  (TCF only) Prints the
 experimental version prefix.  (TCF only) Like  but  the  parameter  is  not
 recognized  and  words  are  delimited  by  null  characters in the output.
 Useful for programs which wish to use the shell to filename expand  a  list
 of  words.   is  filename  and command-substituted to yield a string of the
 form The shell rewinds its input as much as possible, searches for  a  line
 of  the  form  possibly preceded by blanks or tabs, and continues execution
 after that line.  Prints a statistics line  indicating  how  effective  the
 internal hash table has been at locating commands (and avoiding 's).  An is
 attempted for each component of the where the  hash  function  indicates  a
 possible hit, and in each component which does not begin with a On machines
 without prints only the number and size of hash buckets.  (+) (+) The first
 form  prints  the  history  event  list.   If is given only the most recent
 events are printed or saved.  With the  history  list  is  printed  without
 leading  numbers.   If is specified, timestamps are printed also in comment
 form.  This can be used to produce files suitable for loading with or  With
 the  order  of printing is most recent first rather than oldest first.  The
 second form with saves the history list to If the first word of  the  shell
 variable  is  set  to  a number, at most that many lines are saved.  If the
 second word of is set to the history  list  is  merged  with  the  existing
 history  file  instead of replacing it (if there is one) and sorted by time
 stamp.  (+) Merging is intended for an environment like the X Window System
 with  several shells in simultaneous use.  If the second word of is and the
 third word is set to the history file update will be serialized with  other
 shell  sessions  that  would  possibly like to merge history at exactly the
 same time.  The second form with appends (which  is  presumably  a  history
 list  saved  by  the option or the mechanism) to the history list.  is like
 but the contents of  are  merged  into  the  history  list  and  sorted  by
 timestamp.   In  either  case,  is  used  if is not given and is used if is
 unset.  Note that is exactly  like  except  that  it  does  not  require  a
 filename.   Note  that login shells do the equivalent of on startup and, if
 is set, before exiting.  Because only is normally sourced before should  be
 set in rather than If is set, the first and second forms print and save the
 literal (unexpanded) form of the history list.  The third form  clears  the
 history  list.   With  runs  such  that it will exit on a hangup signal and
 arranges for the shell to send it a hangup signal  when  the  shell  exits.
 Note  that  commands  may  set  their  own  response to hangups, overriding
 Without an argument, causes the non-interactive shell only  to  exit  on  a
 hangup  for the remainder of the script.  See also and the builtin command.
 If (an expression, as described under evaluates  true,  then  is  executed.
 Variable  substitution  on  happens early, at the same time it does for the
 rest of the command.  must be a simple command, not an alias, a pipeline, a
 command  list  or  a parenthesized command list, but it may have arguments.
 Input/output redirection occurs even if is false and is thus executed; this
 is  a  bug.   If  the  specified is true then the commands to the first are
 executed; otherwise if  is  true  then  the  commands  to  the  second  are
 executed,  etc.  Any number of pairs are possible; only one is needed.  The
 part is likewise optional.  (The words and must appear at the beginning  of
 input  lines; the must appear alone on its input line or after an Adds each
 to the current environment.  There is no way to remove  a  shared  library.
 (Domain/OS  only) The first form lists the active jobs.  With lists process
 IDs in addition to the normal information.  On TCF systems, prints the site
 on  which  each job is executing.  The second form with the option sets the
 process title to using where available.  If no  is  provided,  the  process
 title  will be cleared.  The first form lists the signal names.  The second
 form sends the specified (or,  if  none  is  given,  the  TERM  (terminate)
 signal)  to the specified jobs or processes.  may be a number, a string, or
 as described under Signals are either given by number or by name (as  given
 in stripped of the prefix There is no default entering just does not send a
 signal to the current job.  If the signal being sent is TERM (terminate) or
 HUP  (hangup),  then the job or process is sent a CONT (continue) signal as
 well.  Limits the consumption by the current process and  each  process  it
 creates  to  not  individually exceed on the specified If no is given, then
 the current limit for is printed.  If no is given, then all limitations are
 given.   If  the  flag  is  given,  the hard limits are used instead of the
 current limits.  The hard limits impose a ceiling  on  the  values  of  the
 current  limits.  Only the super-user may raise the hard limits, but a user
 may lower or raise the current limits within the legal range.  Controllable
 types currently include (if supported by the OS): Maximum number of threads
 for this process.  Size of the largest core  dump  that  will  be  created.
 Maximum  number  of cpu-seconds to be used by each process.  Maximum growth
 of the data+stack region via beyond the end of the program  text.   Maximum
 number  of  open  files for this process.  Largest single file which can be
 created.  Maximum amount of memory a process may allocate per system  call.
 Maximum  number  of  kqueues allocated for this process.  Maximum number of
 locks for this user.  Maximum number of bytes in  POSIX  mqueues  for  this
 user.   Maximum  nice  priority  the  user  is allowed to raise mapped from
 [19...-20] to [0...39] for  this  user.   Maximum  number  of  simultaneous
 processes  for  this  user  id.   Maximum  realtime priority for this user.
 Timeout for RT tasks in microseconds for  this  user.   Maximum  number  of
 pending  signals  for  this  user.   Maximum number of simultaneous threads
 (lightweight processes) for this user id.  Maximum size which a process may
 lock into memory using Maximum amount of physical memory a process may have
 allocated to it at a given time.  Maximum number of  POSIX  advisory  locks
 for  this user.  Maximum number of pseudo-terminals for this user.  Maximum
 size  of  socket  buffer  usage  for  this  user.   Maximum  size  of   the
 automatically-extended stack region.  Maximum amount of swap space reserved
 or used for this  user.   Maximum  number  of  threads  for  this  process.
 Maximum  amount  of  virtual memory a process may have allocated to it at a
 given time (address space).  may be given as a (floating point or  integer)
 number  followed  by a scale factor.  For all limits other than the default
 scale is or (1024 bytes); a scale  factor  of  or  (1048576  bytes)  or  or
 (1073741824  bytes) may also be used.  For the default scaling is while for
 minutes or for hours, or a time of the form giving minutes and seconds  may
 be  used.   If  is then the limitation on the specified is removed (this is
 equivalent to the builtin command).  For  both  names  and  scale  factors,
 unambiguous  prefixes  of the names suffice.  Prints the shell variable and
 reports on each user indicated in who is logged in, regardless of when they
 last  logged  in.   See also Terminates a login shell, replacing it with an
 instance of This is one way to log off,  included  for  compatibility  with
 Terminates  a  login  shell.  Especially useful if is set.  (+) Lists files
 like but much faster.  identifies each type of special file in the  listing
 with  a  special  character  suffix: Directory.  Executable.  Block device.
 Character device.  Named pipe (systems  with  named  pipes  only).   Socket
 (systems  with  sockets  only).  Symbolic link (systems with symbolic links
 only).  Hidden directory (AIX only)  or  context  dependent  (HP/UX  only).
 Network special (HP/UX only).  If the shell variable is set, symbolic links
 are identified in more detail (on only systems that have them, of  course):
 Symbolic  link to a non-directory.  Symbolic link to a directory.  Orphaned
 (broken) symbolic link.  also slows  down  and  causes  partitions  holding
 files pointed to by symbolic links to be mounted.  If the shell variable is
 set to or or any combination thereof (e.g.,  they  are  used  as  flags  to
 making  it  act  like ls -xF ls -Fa ls -FA or a combination, for example On
 machines where is not the default, acts like unless contains  an  in  which
 case  it  acts like passes its arguments to if it is given any switches, so
 generally does the right thing.  The builtin can list files using different
 colors depending on the file type or extension.  See the shell variable and
 the and environment variables.  The first form migrates the process or  job
 to  the  site  specified or the default site determined by the system path.
 (TCF only) The second form is equivalent to in that it migrates the current
 process  to  the  specified  site.   Migrating  the  shell itself can cause
 unexpected behavior, because the shell does not like to lose its tty.  (TCF
 only) Equivalent to as per Available only if the shell was so compiled; see
 the shell variable.  Increments the scheduling priority for  the  shell  by
 or,  without by 4.  With runs at the appropriate priority.  The greater the
 the less cpu the process gets.  The super-user may decrement  the  priority
 by  using is always executed in a sub-shell, and the restrictions placed on
 commands in simple statements apply.  With runs such that  it  will  ignore
 hangup  signals.  Note that commands may set their own response to hangups,
 overriding Without an argument, causes the non-interactive  shell  only  to
 ignore  hangups  for the remainder of the script.  See also and the builtin
 command.  Causes the shell to  notify  the  user  asynchronously  when  the
 status  of any of the specified jobs (or, without the current job) changes,
 instead of waiting until the next prompt as is usual.  may be a  number,  a
 string,  or  as  described under See also the shell variable.  Controls the
 action of the shell on interrupts.  Without arguments, restores the default
 action  of  the shell on interrupts, which is to terminate shell scripts or
 to return to the terminal command input level.  With causes all  interrupts
 to  be  ignored.   With  causes the shell to execute a when an interrupt is
 received or a child process terminates  because  it  was  interrupted.   is
 ignored  if  the shell is running detached and in system startup files (see
 where  interrupts  are  disabled  anyway.   Without  arguments,  pops   the
 directory  stack  and  returns  to  the  new  top directory.  With a number
 discards the th entry in the stack.  Finally, all forms of print the  final
 directory  stack,  just  like The shell variable can be set to prevent this
 and the flag can be given to override The and flags have the same effect on
 as on (+) Prints the names and values of all environment variables or, with
 the value of the environment variable Without arguments, exchanges the  top
 two  elements of the directory stack.  If is set, without arguments acts as
 like (+) With pushes the current working directory onto the directory stack
 and  changes  to  If is it is interpreted as the previous working directory
 (see (+) If is set, removes any instances of from the stack before  pushing
 it  onto  the  stack.   (+)  With  a  number  rotates the th element of the
 directory stack around to be the top element and changes to it.  If is set,
 however, extracts the th directory, pushes it onto the top of the stack and
 changes to it.  (+) Finally, all forms of print the final directory  stack,
 just like The shell variable can be set to prevent this and the flag can be
 given to override The and flags have the same effect on as  on  (+)  Causes
 the  internal hash table of the contents of the directories in the variable
 to be recomputed.  This is needed if the shell variable is not set and  new
 commands  are  added to directories in while you are logged in.  With a new
 command will be found automatically,  except  in  the  special  case  where
 another  command of the same name which is located in a different directory
 already exists  in  the  hash  table.   Also  flushes  the  cache  of  home
 directories  built  by  tilde expansion.  The specified which is subject to
 the same restrictions as the in the one line statement above,  is  executed
 times.   I/O  redirections  occur  exactly once, even if is 0.  Changes the
 rootnode to so that will be interpreted as (Domain/OS only) (+)  The  first
 form  prints  the  scheduled-event  list.  The shell variable may be set to
 define the format in which the scheduled-event list is printed.  The second
 form  adds  to  the  scheduled-event list.  For example, > sched 11:00 echo
 It\'s eleven o\'clock.  causes the shell to echo at 11 AM.  The time may be
 in  12-hour  AM/PM  format  >  sched 5pm set prompt='[%h] It\'s after 5; go
 home:  >'  or  may  be  relative  to  the  current  time:  >  sched   +2:15
 /usr/lib/uucp/uucico  -r1 -sother A relative time specification may not use
 AM/PM format.  The third form removes item from the event list: >  sched  1
 Wed Apr  4 15:42  /usr/lib/uucp/uucico -r1 -sother 2  Wed Apr  4 17:00  set
 prompt=[%h] It's after 5; go home: > > sched -2 > sched 1  Wed Apr  4 15:42
 /usr/lib/uucp/uucico  -r1  -sother A command in the scheduled-event list is
 executed just before the first prompt is printed after the  time  when  the
 command  is  scheduled.   It  is  possible  to miss the exact time when the
 command is to be run, but an overdue  command  will  execute  at  the  next
 prompt.   A  command  which  comes  due while the shell is waiting for user
 input is executed immediately.  However, normal operation  of  an  already-
 running  command  will  not  be  interrupted so that a scheduled-event list
 element may be run.  This mechanism is similar to, but not the same as, the
 command  on  some  Unix systems.  Its major disadvantage is that it may not
 run a command at exactly the specified time.  Its major advantage  is  that
 because  runs directly from the shell, it has access to shell variables and
 other structures.  This provides a mechanism  for  changing  one's  working
 environment  based  on  the time of day.  (+) The first form of the command
 prints the value of all shell variables.  Variables which contain more than
 a  single word print as a parenthesized word list.  The second form sets to
 the null string.  The third form sets to the single The fourth form sets to
 the  list  of  words  in  In  all  cases  the value is command and filename
 expanded.  If is  specified,  the  value  is  set  read-only.   If  or  are
 specified,  set  only  unique words keeping their order.  prefers the first
 occurrence of a word, and the last.  The fifth form sets the 'th  component
 of  to  this  component  must already exist.  The sixth form lists only the
 names of all shell variables that are read-only.  The  seventh  form  makes
 read-only,  whether  or not it has a value.  The eighth form is the same as
 the third form, but make read-only at the same time.  These  arguments  can
 be repeated to set and/or make read-only multiple variables in a single set
 command.  Note, however, that variable expansion happens for all  arguments
 before  any  setting occurs.  Note also that can be adjacent to both and or
 separated from both by whitespace, but cannot be adjacent to  only  one  or
 the  other.   See  also the builtin command.  Without arguments, prints the
 names and values of all environment variables.  With sets  the  environment
 variable to or, without to the null string.  Equivalent to (Mach only) Sets
 the system execution path.  (TCF only) Tells the shell to believe that  the
 terminal  capability  (as  defined  in  has the value No sanity checking is
 done.  Concept terminal users may have to to get  proper  wrapping  at  the
 rightmost  column.   (+)  Controls  which tty modes (see the shell does not
 allow to change.  or tells to act on the or set of tty modes  respectively;
 without or is used.  Without other arguments, lists the modes in the chosen
 set which are fixed on or off The available modes, and  thus  the  display,
 vary  from  system  to  system.  With lists all tty modes in the chosen set
 whether or not they are fixed.  With or fixes on or off or removes  control
 from  in the chosen set.  For example, fixes mode on and allows commands to
 turn mode on or off, both when the shell is executing  commands.   Set  the
 experimental  version  prefix  to  or removes it if is omitted.  (TCF only)
 Without arguments, discards and shifts the members of to the left.   It  is
 an  error  for not to be set or to have fewer than one word as value.  With
 performs the same function on The shell reads and  executes  commands  from
 The  commands  are  not placed on the history list.  If any are given, they
 are placed in (+) commands may be nested; if they are nested too deeply the
 shell  may  run  out  of  file  descriptors.   An  error  in a at any level
 terminates all nested commands.  With commands are placed  on  the  history
 list  instead  of  being  executed,  much  like Stops the specified jobs or
 processes which are executing in  the  background.   may  be  a  number,  a
 string,  or  as  described under There is no default entering just does not
 stop the current job.  Causes the shell to stop in its tracks, much  as  if
 it  had been sent a stop signal with This is most often used to stop shells
 started by Each case label is successively matched, against  the  specified
 which  is first command and filename expanded.  The file metacharacters and
 may be used in the case labels, which are variable expanded.   If  none  of
 the  labels  match before a label is found, then the execution begins after
 the label.  Each case label and the label must appear at the beginning of a
 line.  The command causes execution to continue after the Otherwise control
 may fall through case labels and default labels  as  in  C.   If  no  label
 matches  and  there  is no default, execution continues after the Lists the
 values of all terminal capabilities (see Tests if (or the current value  of
 if no is given) has an entry in the hosts or database.  Prints the terminal
 type to stdout and returns 0 if an entry is present  otherwise  returns  1.
 Executes  (which  must  be  a  simple  command, not an alias, a pipeline, a
 command list or a parenthesized command list) and prints a time summary  as
 described  under  the variable.  If necessary, an extra shell is created to
 print the time statistic when the command completes.  Without prints a time
 summary  for  the  current  shell and its children.  Sets the file creation
 mask to which is given in octal.  Common  values  for  the  mask  are  002,
 giving  all  access to the group and read and execute access to others, and
 022, giving read and execute access  to  the  group  and  others.   Without
 prints  the  current  file  creation mask.  Removes all aliases whose names
 match Thus removes all aliases.  It is not an error for nothing to  be  ed.
 Removes all completions whose names match Thus removes all completions.  It
 is not an error for nothing to be d.  Disables use  of  the  internal  hash
 table  to  speed  location  of  executed  programs.   Sets  the universe to
 (Masscomp/RTU only) Removes the limitation on or, if no is  specified,  all
 limitations.   With  the  corresponding  hard limits are removed.  Only the
 super-user may do this.  Note that may  not  exit  successful,  since  most
 systems  do  not  allow to be unlimited.  With errors are ignored.  Removes
 all variables whose names match unless they are  read-only.   Thus  removes
 all  variables unless they are read-only; this is a bad idea.  It is not an
 error for nothing to be Removes all environment variables whose names match
 Thus  removes  all environment variables; this is a bad idea.  It is not an
 error for nothing to be ed.  Without arguments, prints With  sets  to  With
 and  executes  under  may  be  or  (Domain/OS only) The shell waits for all
 background jobs.  If the shell is interactive, an  interrupt  will  disrupt
 the  wait  and  cause  the  shell to print the names and job numbers of all
 outstanding jobs.  Sets the universe to (Convex/OS only) An alternate  name
 for  the builtin command.  Available only if the shell was so compiled; see
 the shell variable.  Reports all  known  instances  of  including  aliases,
 builtins  and  executables in Displays the command that will be executed by
 the shell after substitutions, searching, etc.  The builtin command is just
 like  but  it correctly reports aliases and builtins and is 10 to 100 times
 faster.  See also the editor command.  Executes the  commands  between  the
 and  the  matching  while (an expression, as described under evaluates non-
 zero.  and must appear alone on their input lines.   and  may  be  used  to
 terminate  or  continue  the loop prematurely.  If the input is a terminal,
 the user is prompted the first time through the loop as with If  set,  each
 of  these  aliases  executes automatically at the indicated time.  They are
 all initially undefined.  Supported special  aliases  are:  Runs  when  the
 shell  wants to ring the terminal bell.  Runs after every change of working
 directory.  For example, if the user is working on an X window system using
 and a re-parenting window manager that supports title bars such as and does
 > alias cwdcmd  'echo -n "^[]2;${HOST}:$cwd ^G"' then the shell will change
 the title of the running to be the name of the host, a and the full current
 working directory.  A fancier way to do that is >  alias  cwdcmd  'echo  -n
 "^[]2;${HOST}:$cwd^G^[]1;${HOST}^G"' This will put the hostname and working
 directory on the title bar but only the hostname in the icon manager  menu.
 Note  that  putting a or in may cause an infinite loop.  It is the author's
 opinion that anyone doing so will get what they deserve.  Runs before  each
 command  gets executed, or when the command changes state.  This is similar
 to  but  it  does  not  print  builtins.   >   alias   jobcmd    'echo   -n
 "^[]2\;\!#:q^G"'  then  executing  will put the command string in the xterm
 title bar.  Invoked by the editor command.  The command name for which help
 is  sought  is  passed  as sole argument.  For example, if one does > alias
 helpcommand '\!:1 --help' then the help display of the command itself  will
 be  invoked,  using the GNU help calling convention.  Currently there is no
 easy way to account for various calling conventions  (e.g.,  the  customary
 Unix  except  by using a table of many commands.  Runs every minutes.  This
 provides a convenient means for checking on common but  infrequent  changes
 such  as  new  mail.   For  example, if one does > set tperiod = 30 > alias
 periodic checknews then the program runs every 30 minutes.  If is  set  but
 is unset or set to 0, behaves like Runs just before each prompt is printed.
 For example, if one does > alias precmd date  then  runs  just  before  the
 shell  prompts for each command.  There are no limits on what can be set to
 do, but discretion should be used.  Runs before each command gets executed.
 >  alias  postcmd   'echo  -n  "^[]2\;\!#:q^G"' then executing will put the
 command string in the xterm  title  bar.   Specifies  the  interpreter  for
 executable  scripts  which  do  not themselves specify an interpreter.  The
 first word should be a full path name to the desired interpreter (e.g.,  or
 The  variables described in this section have special meaning to the shell.
 The shell sets and at startup; they do not change thereafter unless changed
 by  the  user.   The  shell updates and when necessary, and sets on logout.
 The shell synchronizes and with  the  environment  variables  of  the  same
 names:  whenever  the  environment  variable  changes the shell changes the
 corresponding shell variable to match (unless the shell variable  is  read-
 only) and vice versa.  Note that although and have identical meanings, they
 are not synchronized in this  manner,  and  that  the  shell  automatically
 converts  between  the  different  formats  of  and Supported special shell
 variables are: If set, filename completion adds to the end  of  directories
 and  a space to the end of normal files when they are matched exactly.  Set
 by default.  If set, 's autolock feature uses  its  value  instead  of  the
 local username for kerberos authentication.  If set, all times are shown in
 12-hour AM/PM format.  This variable selects  what  is  propagated  to  the
 value  of  the  variable.   For more information see the description of the
 variable below.  The arguments to the  shell.   Positional  parameters  are
 taken  from i.e., is replaced by etc.  Set by default, but usually empty in
 interactive shells.  If set, the editor command  is  invoked  automatically
 before  each  completion  attempt.   If  set, the editor command is invoked
 automatically before each completion attempt.  If this is set to then  only
 history will be expanded and a second completion will expand filenames.  If
 set, possibilities are listed after an ambiguous  completion.   If  set  to
 possibilities  are  listed  only  when  no  new  characters  are  added  by
 completion.  The first word is the number of minutes of  inactivity  before
 automatic  logout.   The  optional  second word is the number of minutes of
 inactivity before automatic locking.  When  the  shell  automatically  logs
 out,   it   prints  sets  the  variable  to  and  exits.   When  the  shell
 automatically locks, the user  is  required  to  enter  their  password  to
 continue working.  Five incorrect attempts result in automatic logout.  Set
 to (automatic logout after 60 minutes, and no locking) by default in  login
 and  superuser  shells,  but  not if the shell thinks it is running under a
 window system (i.e., the  environment  variable  is  set),  the  tty  is  a
 pseudo-tty (pty) or the shell was not so compiled (see the shell variable).
 Unset or set it to to disable automatic logout.  See  also  the  and  shell
 variables.   If  set,  the  internal  hash  table  of  the  contents of the
 directories in the variable will be recomputed if a command is not found in
 the  hash  table.   In  addition,  the  list  of available commands will be
 rebuilt for each command completion or spelling correction attempt  if  set
 to  or  respectively;  if set to this will be done for both cases.  If set,
 backslashes (`\') always quote and This  may  make  complex  quoting  tasks
 easier,  but  it  can cause syntax errors in scripts.  The file name of the
 message catalog.  If set, uses as a message catalog instead  of  default  A
 list  of  directories  in  which  should  search for subdirectories if they
 aren't found in the current directory.  If not set,  requires  a  directory
 and  will not go to the directory if it's omitted.  This is set by default.
 If set, it enables color display for the builtin and it passes to (or if is
 set).   Alternatively,  it can be set to only or only to enable color for a
 specific command.  Setting it to nothing is equivalent  to  setting  it  to
 Color  is  disabled  if the output is not directed to a terminal, unless is
 set.  If set, it enables color escape sequence for NLS message  files,  and
 display colorful NLS messages.  If set, the command which was passed to the
 shell with the flag.  If set, the shell will evaluate expressions right  to
 left,  like the original If set to the completion becomes case insensitive.
 If set to completion ignores case and considers hyphens and underscores  to
 be  equivalent;  it will also treat periods, hyphens and underscores and as
 word separators.  If set to completion  matches  uppercase  and  underscore
 characters  explicitly  and  matches  lowercase  and  hyphens  in  a  case-
 insensitive manner; it will treat periods, hyphens and underscores as  word
 separators.   If  set  to  a  list of commands, the shell will continue the
 listed commands, instead of starting a new one.  Same as continue, but  the
 shell  will  execute:  echo  `pwd` $argv > ~/.<cmd>_pause; %<cmd> If set to
 commands are automatically spelling-corrected.   If  set  to  commands  are
 automatically  completed.   If set to the entire command line is corrected.
 If set, newlines and carriage returns in command substitution are  replaced
 by  spaces.   Set  by default.  The full pathname of the current directory.
 See also the and shell variables.  If set, extracts the th  directory  from
 the  directory  stack  rather  than  rotating  it  to the top.  The default
 location in which and look for a history file.  If unset, is used.  Because
 only  is  normally  sourced before should be set in rather than An array of
 all the directories  on  the  directory  stack.   is  the  current  working
 directory,  the  first  directory on the stack, etc.  Note that the current
 working directory is but in directory stack substitutions,  etc.   One  can
 change  the stack arbitrarily by setting but the first element (the current
 working directory) is always correct.  See also the  and  shell  variables.
 Has  an  effect only if is listed as part of the shell variable.  If set to
 it enables display and editing EUC-kanji(Japanese)  code.   If  set  to  it
 enables display and editing Shift-JIS(Japanese) code.  If set to it enables
 display and editing Big5(Chinese) code.  If set to it enables  display  and
 editing  Utf8(Unicode)  code.   If  set  to 256 characters in the following
 format, it enables display and editing of original multi-byte code  format:
 Each  character in the 256 character value corresponds (from left to right)
 to the ASCII codes 0x00, 0x01, 0x02, ..., 0xfd,  0xfe,  0xff  at  the  same
 index.  Each character is set to number 0, 1, 2 or 3, with the meaning: Not
 used for multi-byte characters.  Used for the first byte  of  a  multi-byte
 character.   Used  for the second byte of a multi-byte character.  Used for
 both the first byte  and  second  byte  of  a  multi-byte  character.   For
 example,  if  set  to 256 characters starting with the value is interpreted
 as: The GNU  coreutils  version  of  cannot  display  multi-byte  filenames
 without  the option.  If you are using this version, set the second word of
 dspmbyte to If not, for example, cannot display multi-byte filenames.  Note
 that  this variable can only be used if KANJI and DSPMBYTE has been defined
 at compile time.  If set, removes any instances of from  the  stack  before
 pushing  it  onto  the  stack.   If set, each command with its arguments is
 echoed just before it is executed.  For non-builtin commands all expansions
 occur  before  echoing.   Builtin  commands  are  echoed before command and
 filename  substitution,  because  these   substitutions   are   then   done
 selectively.   Set  by  the command line option.  The style of the builtin.
 May be set to: Don't echo a newline if the first argument  is  the  default
 for Recognize backslashed escape sequences in echo strings.  Recognize both
 the flag and  backslashed  escape  sequences;  the  default  for  Recognize
 neither.  Set by default to the local system default.  The BSD and System V
 options are described in the man pages on the appropriate systems.  If set,
 the  command-line editor is used.  Set by default in interactive shells.  A
 list of command names for the editor command to match.  If not set, the  if
 unset)  and  if unset) environment variables will be used instead.  If set,
 the  and  prompt  sequences  (see  the  shell  variable)  indicate  skipped
 directories  with an ellipsis instead of The user's effective user ID.  The
 first matching passwd entry name corresponding to the  effective  user  ID.
 Lists  file  name  suffixes  to be ignored by completion.  In completion is
 always used and this variable is ignored by default.  If is unset, then the
 traditional  completion  is  used.   If set in filename completion is used.
 The user's real group ID.  If set, wild-card glob patterns will match files
 and  directories  beginning  with  except for and If set, the and file glob
 patterns will match any  string  of  characters  including  traversing  any
 existing  sub-directories.   For example, will list all the .c files in the
 current directory tree.  If used by itself, it  will  match  zero  or  more
 sub-directories.   For  example,  will list any file named in the directory
 tree; whereas will match any file  in  the  directory  tree  ending  in  To
 prevent  problems  with recursion, the glob-pattern will not descend into a
 symbolic link containing a directory.  To override  this,  use  The  user's
 group  name.   If  set, the incremental search match (in and and the region
 between  the  mark  and  the  cursor  are  highlighted  in  reverse  video.
 Highlighting requires more frequent terminal writes, which introduces extra
 overhead.  If you care about terminal performance, you may  want  to  leave
 this  unset.   A  string value determining the characters used in The first
 character of its value is  used  as  the  history  substitution  character,
 replacing  the default character The second character of its value replaces
 the character in  quick  substitutions.   Controls  handling  of  duplicate
 entries  in  the  history  list.   If set to only unique history events are
 entered in the history list.  If set to and the last history event  is  the
 same as the current command, then the current command is not entered in the
 history.  If set to and the same event is found in the history  list,  that
 old event gets erased and the current one gets inserted.  Note that the and
 options renumber history events so there are no gaps.  The default location
 in  which  and look for a history file.  If unset, is used.  is useful when
 sharing the same home directory between different machines, or when  saving
 separate  histories  on  different  terminals.   Because  only  is normally
 sourced before should be set in rather than  If  set,  builtin  and  editor
 commands  and  the  mechanism use the literal (unexpanded) form of lines in
 the history list.  See also the editor command.  The first  word  indicates
 the  number  of  history  events  to  save.   The  optional second word (+)
 indicates the format in which history is printed; if not  given,  is  used.
 The format sequences are described below under note the variable meaning of
 Set to by default.  Initialized to the home directory of the invoker.   The
 filename  expansion of refers to this variable.  If set to the empty string
 or and the input device is a terminal, the command  (usually  generated  by
 the  user  by typing on an empty line) causes the shell to print instead of
 exiting.   This  prevents  the  shell  from  accidentally   being   killed.
 Historically  this  setting  exited  after  26  successive  EOF's  to avoid
 infinite loops.  If set to a number the shell ignores - 1 consecutive s and
 exits  on the th (+).  If unset, is used, i.e., the shell exits on a single
 If set, the shell treats a directory name typed as a command as  though  it
 were  a  request  to  change  to  that  directory.  If set to the change of
 directory is echoed to the standard output.  This behavior is inhibited  in
 non-interactive  shell  scripts,  or for command strings with more than one
 word.  Changing directory takes  precedence  over  executing  a  like-named
 command,  but  it  is  done  after alias substitutions.  Tilde and variable
 expansions work as expected.  If set to or puts the editor into that  input
 mode at the beginning of each line.  Controls handling of duplicate entries
 in the kill ring.  If set to only unique strings are entered  in  the  kill
 ring.   If  set  to  and  the last killed string is the same as the current
 killed string, then the current string is not entered in the ring.  If  set
 to  and the same string is found in the kill ring, the old string is erased
 and the current one is inserted.  Indicates the number of killed strings to
 keep in memory.  Set to by default.  If unset or set to less than the shell
 will only keep the most recently killed string.  Strings  are  put  in  the
 killring  by  the  editor commands that delete (kill) strings of text, e.g.
 etc, as well as the  command.   The  editor  command  will  yank  the  most
 recently  killed  string  into  the command-line, while (see can be used to
 yank earlier killed strings.  If set  to  or  or  any  combination  thereof
 (e.g., they are used as flags to making it act like ls -xF ls -Fa ls -FA or
 a combination, for example If the first word contains shows all files (even
 if  they start with a If the first word contains shows all files but and If
 the first word contains sorts across instead of down.  If the  second  word
 of is set, it is used as the path to If set, all jobs are listed when a job
 is suspended.  If set to the listing  is  in  long  format.   If  set,  the
 builtin  command shows the type of file to which each symbolic link points.
 The maximum number of items which the  editor  command  will  list  without
 asking first.  The maximum number of rows of items which the editor command
 will list without asking first.  Set by the shell if it is a  login  shell.
 Setting  or unsetting it within a shell has no effect.  See also Set by the
 shell to before a normal logout, before an automatic  logout,  and  if  the
 shell  was  killed  by a hangup signal (see See also the shell variable.  A
 list of files and  directories  to  check  for  incoming  mail,  optionally
 preceded  by a numeric word.  Before each prompt, if 10 minutes have passed
 since the last check, the shell checks  each  file  and  displays  (or,  if
 contains  multiple  files, if the filesize is greater than zero in size and
 has a modification time greater than its access time.   If  you  are  in  a
 login  shell,  then  no  mail  file is reported unless it has been modified
 after  the  time  the  shell  has  started   up,   to   prevent   redundant
 notifications.   Most  login programs will tell you whether or not you have
 mail when you log in.  If a file specified in is  a  directory,  the  shell
 will  count each file within that directory as a separate message, and will
 report or as appropriate.  This functionality  is  provided  primarily  for
 those  systems  which  store  mail  in this manner, such as the Andrew Mail
 System.  If the first word of is numeric it is taken as  a  different  mail
 checking  interval,  in  seconds.  Under very rare circumstances, the shell
 may report instead of If set to completion never beeps.  If set to it beeps
 only  when  there  is no match.  If set to it beeps when there are multiple
 matches.  If set to it beeps when there  is  one  exact  and  other  longer
 matches.   If unset, is used.  If set, beeping is completely disabled.  See
 also If set, restrictions are placed on output redirection to  insure  that
 files  are  not  accidentally  destroyed  and  that  redirections  refer to
 existing files, as described in the section.   If  contains  an  interacive
 confirmation is presented, rather than an error.  If contains is allowed on
 empty files.  If set, disable the printing of in the time specifiers at the
 change  of  hour.  If set, and are inhibited.  This is most useful in shell
 scripts which do not deal with filenames, or after a list of filenames  has
 been  obtained  and  further  expansions are not desirable.  If set and the
 shell supports Kanji (see the shell variable), it is disabled so  that  the
 meta key can be used.  If set, a or which does not match any existing files
 is left untouched rather than causing an error.  It is still an  error  for
 the  substitution  to  be malformed.  For example, still gives an error.  A
 list of directories (or glob-patterns which  match  directories;  see  that
 should  not  be  during  a  completion  operation.  This is usually used to
 exclude directories which take too much time to for  example  If  set,  the
 shell  announces job completions asynchronously.  The default is to present
 job  completions  just  before  printing  a  prompt.    The   user's   real
 organization ID.  (Domain/OS only) The old working directory, equivalent to
 the used by and See also the and  shell  variables.   If  set,  enable  the
 printing of padding '0' for hours, in 24 and 12 hour formats.  E.g., versus
 To retain compatibily with older versions numeric variables starting with 0
 are  not  interpreted as octal.  Setting this variable enables proper octal
 parsing.  A list of directories in which to look for  executable  commands.
 A  null word specifies the current directory.  If there is no variable then
 only full path names will execute.  is set by the shell at startup from the
 environment  variable or, if does not exist, to a system-dependent default,
 such as The shell may put first or last in or omit it entirely depending on
 how  it  was  compiled;  see  the  shell  variable.  A shell which is given
 neither the nor the option hashes the contents of the directories in  after
 reading  and  each time is reset.  If one adds a new command to a directory
 in while the shell is active, one may need to do a for the  shell  to  find
 it.   If  set  and an interactive program exits with a non-zero status, the
 shell prints The string which is printed before reading each  command  from
 the  terminal.   may include any of the following formatting sequences (+),
 which are replaced by the given information: The current working directory.
 The current working directory, but with one's home directory represented by
 and other users'  home  directories  represented  by  as  per  substitution
 happens  only  if  the  shell has already used in a pathname in the current
 session.  The trailing component  of  the  current  working  directory,  or
 trailing  components  if  a  digit  is given.  If begins with the number of
 skipped components precede the trailing component(s) in the format  If  the
 shell variable is set, skipped components are represented by an ellipsis so
 the whole becomes substitution is done as in above, but  the  component  is
 ignored  when counting trailing components.  Like but without substitution.
 The current history event number.  The full hostname.  The hostname  up  to
 the first Start (stop) standout mode.  Start (stop) boldfacing mode.  Start
 (stop) underline mode.  The time of day in 12-hour AM/PM format.  Like  but
 in 24-hour format (but see the shell variable).  The time of day in 12-hour
 AM/PM format, with seconds.  Like but in 24-hour format (but see the  shell
 variable).   is  parsed  as in is parsed as in A single The user name.  The
 effective user name.  The number of jobs.  The weekday in format.  The  day
 in format.  The month in format.  The month in format.  The year in format.
 The year in format.  The shell's tty.  Clears from the end of the prompt to
 end  of  the  display  or  the  end  of  the  line.   Expands  the shell or
 environment variable name immediately after the (or the first character  of
 the  shell  variable) for normal users, (or the second character of for the
 superuser.  Includes as a literal escape sequence.  It should be used  only
 to  change  terminal  attributes  and  should not move the cursor location.
 This cannot be the last sequence in The return code of the command executed
 just  before  the  prompt.   In the status of the parser.  In the corrected
 string.  In the history string.  and are available in only  eight-bit-clean
 shells; see the shell variable.  The bold, standout and underline sequences
 are often used to distinguish a superuser shell.  For  example,  If  or  is
 used,  and  is  not  set,  then  print on the change of hour (i.e, minutes)
 instead of the actual time.  Set by default to in interactive shells.   The
 string with which to prompt in and loops and after lines ending in The same
 format sequences may be used as in note the  variable  meaning  of  Set  by
 default  to  in  interactive  shells.  The string with which to prompt when
 confirming automatic spelling correction.  The same format sequences may be
 used  as  in  note the variable meaning of Set by default to in interactive
 shells.  If set (to a two-character string), the formatting sequence in the
 shell  variable  is  replaced with the first character for normal users and
 the second character for the superuser.  If  set,  without  arguments  does
 like  If  set,  and  do  not print the directory stack.  If set, completion
 completes on an exact match even if a longer match is  possible.   If  set,
 command listing displays only files in the path that are executable.  Slow.
 If set, the user is prompted before is executed.  The string  to  print  on
 the right-hand side of the screen (after the command input) when the prompt
 is being  displayed  on  the  left.   It  recognizes  the  same  formatting
 characters as It will automatically disappear and reappear as necessary, to
 ensure that command input isn't obscured,  and  will  appear  only  if  the
 prompt,  command input, and itself will fit together on the first line.  If
 isn't set, then will be printed after the prompt  and  before  the  command
 input.  If set, the shell does before exiting.  If the first word is set to
 a number, at most that many directory stack entries are saved.  If set, the
 shell  does  before exiting.  If the first word is set to a number, at most
 that many lines are saved.  (The number should be less than or equal to the
 number  entries;  if it is set to greater than the number of settings, only
 entries will be saved.) If the second word is set to the  history  list  is
 merged  with the existing history file instead of replacing it (if there is
 one) and sorted by time stamp and the most recent events are retained.   If
 the  second  word  is  set to and the third word is set to the history file
 update will be serialized with other shell  sessions  that  would  possibly
 like to merge history at exactly the same time. (+) The format in which the
 builtin command prints scheduled events; if not given, is used.  The format
 sequences  are  described above under note the variable meaning of The file
 in which the shell resides.  This is used in forking  shells  to  interpret
 files  which  have  execute  bits  set, but which are not executable by the
 system.  (See the description of Initialized to the (system-dependent) home
 of  the  shell.   The number of nested shells.  Reset to 1 in login shells.
 See also The exit status from the last command or backquote  expansion,  or
 any  command  in  a  pipeline  is  propagated  to (This is also the default
 behavior.) This default does not match what POSIX mandates (to  return  the
 status  of the last command only). To match the POSIX behavior, you need to
 unset If the variable is unset, the exit status of a pipeline is determined
 only  from  the  last  command  in  the  pipeline, and the exit status of a
 backquote expansion is propagated to If a  command  terminated  abnormally,
 then  0200 is added to the status.  Builtin commands which fail return exit
 status all other builtin commands return  status  Can  be  set  to  several
 different  values  to  control symbolic link resolution: If set to whenever
 the current directory changes to a directory containing a symbolic link, it
 is  expanded  to  the  real name of the directory to which the link points.
 This does not work for the user's home directory; this is a bug.  If set to
 the  shell  tries  to construct a current directory relative to the current
 directory before the link was crossed.  This means that through a  symbolic
 link  and  then  returns  one to the original directory.  This affects only
 builtin commands and filename completion.  If set to the shell tries to fix
 symbolic  links by actually expanding arguments which look like path names.
 This affects any command, not just builtins.  Unfortunately, this does  not
 work  for  hard-to-recognize  filenames,  such as those embedded in command
 options.  Expansion may be prevented by quoting.   While  this  setting  is
 usually  the  most  convenient,  it  is  sometimes misleading and sometimes
 confusing when it fails to recognize an argument which should be  expanded.
 A compromise is to use and use the editor command (bound by default to when
 necessary.  Some examples are in order.  First,  let's  set  up  some  play
 directories:  >  cd  /tmp  > mkdir from from/src to > ln -s from/src to/dst
 Here's the behavior with unset, > cd /tmp/to/dst; echo $cwd  /tmp/to/dst  >
 cd  ..;  echo  $cwd  /tmp/from  Here's  the  behavior  with  set  to  >  cd
 /tmp/to/dst; echo $cwd /tmp/from/src > cd ..; echo  $cwd  /tmp/from  Here's
 the  behavior  with set to > cd /tmp/to/dst; echo $cwd /tmp/to/dst > cd ..;
 echo $cwd /tmp/to Here's the behavior with set to >  cd  /tmp/to/dst;  echo
 $cwd  /tmp/to/dst  >  cd  ..; echo $cwd /tmp/to > cd /tmp/to/dst; echo $cwd
 /tmp/to/dst > cd ".."; echo  $cwd  /tmp/from  >  /bin/echo  ..   /tmp/to  >
 /bin/echo  ".."  ..  Note that expansion: Works just like for builtins like
 Is prevented by quoting.  Happens  before  filenames  are  passed  to  non-
 builtin  commands.   The version number of the shell in the format where is
 the major release number, the current version,  and  the  patchlevel.   The
 terminal  type.  Usually set in as described under If set to a number, then
 the builtin executes automatically after each command which takes more than
 that  many  CPU seconds.  If there is a second word, it is used as a format
 string for the output of the builtin.  (u) The following sequences  may  be
 used  in  the format string: The time the process spent in user mode in cpu
 seconds.  The time the process spent in kernel mode in  cpu  seconds.   The
 elapsed (wall clock) time in seconds.  The CPU percentage computed as (%U +
 %S) / %E.  Number of times the process was swapped.  The average amount  in
 (shared)  text  space  used  in  Kbytes.   The average amount in (unshared)
 data/stack space used in Kbytes.  The total space used (%X + %D) in Kbytes.
 The  maximum  memory  the  process  had  in use at any time in Kbytes.  The
 number of major page faults (page needed to be  brought  from  disk).   The
 number  of  minor page faults.  The number of input operations.  The number
 of output operations.  The number of socket messages received.  The  number
 of  socket  messages  sent.  The number of signals received.  The number of
 voluntary context switches (waits).   The  number  of  involuntary  context
 switches.   Only  the first four sequences are supported on systems without
 BSD resource limit functions.  The default time format is for systems  that
 support  resource  usage  reporting  and  for  systems  that do not.  Under
 Sequent's DYNIX/ptx, and are not available, but  the  following  additional
 sequences  are:  The number of system calls performed.  The number of pages
 which are zero-filled on demand.  The number of times a process's  resident
 set  size  was  increased  by  the kernel.  The number of times a process's
 resident set size was decreased by the kernel.  The number of  read  system
 calls  performed.   The number of write system calls performed.  The number
 of reads from raw disk devices.  The number of writes to raw disk  devices.
 and  the  default time format is Note that the CPU percentage can be higher
 than 100% on multi-processors.  The period, in minutes, between  executions
 of  the  special  alias.   The name of the tty, or empty if not attached to
 one.  The user's real user ID.  The user's login name.  If set, causes  the
 words  of  each command to be printed, after history substitution (if any).
 Set by the command line option.  The version ID  stamp.   It  contains  the
 shell's  version number (see origin, release date, vendor, operating system
 and machine (see and and a comma-separated list of options which  were  set
 at  compile time.  Options which are set by default in the distribution are
 noted.  Supported options include: The shell is eight bit  clean;  default.
 The  shell  is not eight bit clean.  The shell is multi-byte encoding clean
 (like UTF-8).  The system's NLS is used;  default  for  systems  with  NLS.
 Login  shells  execute  before instead of after and before instead of after
 and is put last in for security; default.  is omitted  from  for  security.
 -style  editing  is  the default rather than -style.  Login shells drop DTR
 when exiting.  is a synonym for and is an alternate name  for  is  enabled;
 default.  Kanji is used if appropriate according to locale settings, unless
 the shell variable is set.   The  system's  is  used.   The  convention  is
 emulated  when  executing  shell  scripts.   The builtin is available.  The
 shell attempts to set the environment variable.  The  shell  verifies  your
 password with the kerberos server if local authentication fails.  The shell
 variable or the environment variable override your local username  if  set.
 An  administrator  may  enter additional strings to indicate differences in
 the local version.  If unset, various key bindings change  behavior  to  be
 more -style: word boundaries are determined by versus other characters.  If
 set,  various  key  bindings  change  behavior  to  be  more  -style:  word
 boundaries  are  determined  by  versus whitespace versus other characters;
 cursor behavior depends upon current  vi  mode  (command,  delete,  insert,
 replace).   This  variable  is unset by and set by may be explicitly set or
 unset by the user after those operations if required.   If  set,  a  screen
 flash  is  used  rather  than  the  audible  bell.   See  also  A  list  of
 user/terminal pairs to watch for logins and logouts.  If either the user is
 all  terminals  are  watched for the given user and vice versa.  Setting to
 watches all users and terminals.  For example, set watch  =  (george  ttyd1
 any  console  $user  any)  reports  activity of the user on any user on the
 console, and oneself (or a trespasser) on any terminal.  Logins and logouts
 are  checked  every 10 minutes by default, but the first word of can be set
 to a number to check every so many minutes.  For example, set  watch  =  (1
 any  any)  reports  any login/logout once every minute.  For the impatient,
 the builtin command triggers a report at any time.  All current logins  are
 reported  (as  with  the  builtin)  when  is first set.  The shell variable
 controls the format of reports.   The  format  string  for  messages.   The
 following  sequences are replaced by the given information: The name of the
 user who logged in/out.  The observed action, i.e., or The  terminal  (tty)
 on  which the user logged in/out.  The full hostname of the remote host, or
 if the login/logout was from the local host.  The hostname  of  the  remote
 host  up to the first The full name is printed if it is an IP address or an
 X Window System display.  and are available on only systems that store  the
 remote  hostname  in If unset, is used, or on systems which don't store the
 remote hostname.  A list of non-alphanumeric characters  to  be  considered
 part  of  a word by the etc., editor commands.  If unset, the default value
 is determined based on the state of if is unset, is used as the default; if
 is  set,  is used as the default.  Equivalent to the shell variable.  Color
 sequences for are normally disabled if the output  is  not  directed  to  a
 terminal.   This  can  be  overridden  by setting this variable, which also
 changes the invocation of to use instead of Note that must be set for  this
 environment  variable  to be effective; by itself does not enable color Set
 by to the current command line when invoking programs for the mode  See  in
 The number of columns in the terminal.  See Used by X Window System (see If
 set, the shell does not set The pathname to a default editor.  Used by  the
 editor  command  if  the  the  shell  variable  is  unset.   See  also  the
 environment variable.  Equivalent to the shell variable.  Equivalent to the
 shell  variable.  Initialized to the name of the machine on which the shell
 is running, as determined by the system call.  Initialized to the  type  of
 machine on which the shell is running, as determined at compile time.  This
 variable is obsolete and will be removed in a future version.   A  list  of
 directories  in  which  the editor command looks for command documentation.
 Gives  the  preferred  character  environment.   See  If  set,  only  ctype
 character  handling  is  changed.  See The number of lines in the terminal.
 See One of two environment variables that may be used to  define  the  per-
 file  colors used by (along with This variable is used by some BSD versions
 of On startup, takes priority over If both or are the most recent is  used.
 If is while is still then is parsed again (with any warnings suppressed) to
 reapply its settings.  This variable is a 22 character string containing  a
 concatenation  of  11 pairs of the format where is the foreground color and
 is the background color.  If fewer than  11  pairs  are  provided,  default
 colors  are  used  for  the  remaining  entries.  If more than 11 pairs are
 provided, the extra values are ignored.  The order of the  color  attribute
 pairs  to  the equivalent variable, the file type, and default color, is as
 follows: The color code designators are as follows:  Black.   Red.   Green.
 Yellow  (or  brown).   Blue.   Magenta.   Cyan.   Light  grey.  Bold black,
 usually shows up as dark grey.  Bold red.  Bold green.  Bold yellow.   Bold
 blue.  Bold magenta.  Bold cyan.  Bold light grey; looks like bright white.
 Default foreground or background.  Note that the above  are  standard  ANSI
 colors.   The actual display may differ depending on the color capabilities
 of the terminal in use.  The default colors are as per the color  variables
 in  and  are not the same default colors as those used by some BSD versions
 of One of two environment variables that may be used to define the per-file
 colors  used  by  (along  with  This  variable is used by the GNU coreutils
 version of and may be setup by On startup, takes priority over If  both  or
 are  the  most  recent  is used.  If is while is still then is parsed again
 (with any warnings suppressed) to reapply its settings.  The format of this
 variable  is  reminiscent  of the file format; a list of expressions of the
 form or The first form where is a two-character variable name, supports the
 following variables, their associated default ISO 6429 color code or escape
 sequences, and file type: You need to include only the variables  you  want
 to  change from the default.  The second form colorizes file names based on
 extension.  For example, using ISO 6429  codes,  to  color  all  C-language
 source files blue you would specify This would color all files ending in in
 blue foreground (34) color.  Control characters can be  written  either  in
 C-style-escaped notation, or in stty-like ^-notation.  The C-style notation
 adds for Escape,  for  a  normal  space  character,  and  for  Delete.   In
 addition,  the  escape  character  can  be  used  to  override  the default
 interpretation of and Each filename will be output to the  terminal  as  If
 the  code  is  undefined,  the  sequence  will  be  used  instead.  This is
 generally more convenient to use, but less general.  The  left  code  right
 code and end codes are provided so you don't have to type common parts over
 and over again and to support weird terminals; you will generally not  need
 to  change  them  at  all  unless your terminal does not use ISO 6429 color
 codes but a different system.  If your terminal uses ISO 6429 color  codes,
 you  can  compose  the  type  codes  (i.e.,  all except the and codes) from
 numerical ISO 6429 color codes separated by For example,  is  bright  green
 foreground  with  default background.  The most common ISO 6429 color codes
 are: To restore default color.  Bold / brighter colors.   Underlined  text.
 Flashing  text.   Black  foreground.   Red  foreground.   Green foreground.
 Yellow (or brown) foreground.  Blue foreground.  Magenta foreground.   Cyan
 foreground.    White   (or   gray)   foreground.   Black  background.   Red
 background.   Green  background.   Yellow  (or  brown)  background.    Blue
 background.    Magenta  background.   Cyan  background.   White  (or  gray)
 background.  Not all ISO 6429 color codes  will  work  on  all  systems  or
 display  devices.  A few terminal programs do not recognize the default end
 code properly.  If all  text  gets  colorized  after  you  do  a  directory
 listing,  try changing the and codes from 0 to the numerical codes for your
 standard foreground and background colors.  For symbolic links the  keyword
 can  be set to which makes the file color the same as the color of the link
 target.  The machine type  (microprocessor  class  or  machine  model),  as
 determined  at  compile time.  If set, printable characters are not rebound
 to See The operating system, as determined at  compile  time.   A  list  of
 directories  in  which  to  look  for executables.  Equivalent to the shell
 variable, but in a different format.  Equivalent to the shell variable, but
 not synchronized to it; updated only after an actual directory change.  The
 host from which the user has logged in remotely, if this is  the  case  and
 the  shell is able to determine it.  Set only if the shell was so compiled;
 see the shell variable.  Equivalent to the  shell  variable.   The  current
 system  type.   (Domain/OS  only)  Equivalent  to  the shell variable.  The
 terminal capability string.  See Equivalent to  the  shell  variable.   The
 vendor,  as  determined  at  compile time.  The pathname to a default full-
 screen editor.  Used by the editor command if the  the  shell  variable  is
 unset.   See  also  the  environment  variable.  Read first by every shell.
 ConvexOS, Stellix and Intel use NeXTs use A/UX, AMIX, Cray and IRIX have no
 equivalent  in  but read this file in anyway.  Solaris 2.x does not have it
 either, but reads (+) Read by login  shells  after  ConvexOS,  Stellix  and
 Intel  use NeXTs use Solaris 2.x uses A/UX, AMIX, Cray and IRIX use Read by
 every shell after or its equivalent.   Read  by  every  shell,  if  doesn't
 exist,  after  or  its  equivalent.  This manual uses to mean or, if is not
 found, Read by login shells after if is set, but see  also  Read  by  login
 shells  after  or The shell may be compiled to read before instead of after
 and see the shell variable.  Read by login shells after if is set, but  see
 also Read by login shells at logout.  ConvexOS, Stellix and Intel use NeXTs
 use A/UX, AMIX, Cray and IRIX have no equivalent in but read this  file  in
 anyway.   Solaris  2.x does not have it either, but reads (+) Read by login
 shells at logout after or its equivalent.  Used to interpret shell  scripts
 not  starting  with  a  Temporary  file  for Source of home directories for
 substitutions.  The order in which startup files are read may differ if the
 shell  was  so compiled; see and the shell variable.  This manual describes
 as a single  entity,  but  experienced  users  will  want  to  pay  special
 attention to 's new features.  A command-line editor, which supports -style
 or -style key bindings.  See and Programmable, interactive word  completion
 and listing.  See and the and builtin commands.  of filenames, commands and
 variables.  which perform other useful functions in  the  middle  of  typed
 commands,  including  documentation  lookup  quick  editor  restarting  and
 command resolution An enhanced history mechanism.  Events  in  the  history
 list  are  time-stamped.   See  also  the  command and its associated shell
 variables, the previously undocumented event specifier  and  new  modifiers
 under  the  and editor commands and the shell variable.  Enhanced directory
 parsing and directory stack handling.   See  the  and  commands  and  their
 associated  shell variables, the description of the and shell variables and
 the and editor commands.  Negation in glob-patterns.  See New and a builtin
 which uses them.  A variety of including scheduled events, special aliases,
 automatic logout and terminal locking,  command  timing  and  watching  for
 logins and logouts.  Support for the Native Language System (see OS variant
 features (see and the shell variable) and system-dependent  file  locations
 (see  Extensive terminal-management capabilities.  See New builtin commands
 including and New variables that make useful information  easily  available
 to  the  shell.   See  the  and  shell  variables  and  the and environment
 variables.  A new syntax for including useful  information  in  the  prompt
 string  (see and special prompts for loops and spelling correction (see and
 Read-only variables.  See In 1964, DEC produced the PDP-6.  The PDP-10  was
 a  later  re-implementation.  It was re-christened the DECsystem-10 in 1970
 or so when DEC brought out the second model, the KI10.  TENEX  was  created
 at  Bolt,  Beranek & Newman (a Cambridge, Massachusetts think tank) in 1972
 as an experiment in demand-paged virtual memory  operating  systems.   They
 built  a new pager for the DEC PDP-10 and created the OS to go with it.  It
 was extremely successful in academia.  In 1975, DEC brought out a new model
 of  the  PDP-10,  the  KL10; they intended to have only a version of TENEX,
 which they had licensed from BBN, for  the  new  box.   They  called  their
 version  TOPS-20  (their  capitalization is trademarked).  A lot of TOPS-10
 users  (`The  OPerating  System  for  PDP-10')  objected;  thus  DEC  found
 themselves  supporting  two  incompatible systems on the same hardware--but
 then there were 6 on the PDP-11!  TENEX, and  TOPS-20  to  version  3,  had
 command  completion via a user-code-level subroutine library called ULTCMD.
 With version 3, DEC moved all that capability and  more  into  the  monitor
 (`kernel'  for  you  Unix  types),  accessed  by  the COMND% JSYS (`Jump to
 SYStem' instruction, the supervisor call mechanism [are my IBM  roots  also
 showing?]).   The creator of tcsh was impressed by this feature and several
 others of TENEX and TOPS-20, and created a version of  csh  which  mimicked
 them.   The system limits argument lists to ARG_MAX characters.  The number
 of arguments to a command which involves filename expansion is  limited  to
 1/6th  the  number  of  characters  allowed  in  an argument list.  Command
 substitutions may substitute no more characters  than  are  allowed  in  an
 argument  list.   To  detect  looping,  the  shell  restricts the number of
 substitutions on a single line to 20.  This manual documents  tcsh  6.24.12
 (Astron) 2024-04-05.
 Original author of IIASA, Laxenburg, Austria.
 Job control and directory stack features.  HP Labs, 1981.
 File name completion.  Fairchild, 1983.
 Command name recognition/completion.  Ohio State CIS Dept., 1983-1993.
 Command line editor, prompt routines, new glob syntax  and  numerous  fixes
 and speedups.  CCI, 1983-4.
 Special aliases, directory  stack  extraction  stuff,  login/logout  watch,
 scheduled  events,  and  the  idea of the new prompt format.  University of
 Toronto, 1984.
 and builtins and numerous bug fixes, modifications and speedups.  Caltech.
 Fast storage allocator routines.  TRW, 1987.
 Incorporated 4.3BSD into Cornell U. EE Dept., 1987-94.
 Ports to HPUX, SVR2 and SVR3, a  SysV  version  of  getwd.c,  SHORT_STRINGS
 support and a new version of sh.glob.c.  BBN, and OSU, 1988.
 A/UX port.  NNSC, 1988.
 Kuck and Associates, Inc., 1988.
 mode cleanup.  Rensselaer Polytechnic Institute, 1989.
 and ambiguous completion listing.  DEC, 1989.
 Newlines in the prompt.  BBN, 1989.
 Purdue Physics, 1989.
 Magic space bar history expansion.  Intel, 1989.
 fixes and additions.  Dept. of Computer Science, Keio University, 1989.
 Automatic spelling correction and Ellemtel, Sweden, 1990-.
 Various bugfixes, improvements and manual updates.  Sun Sweden.
 and
 Interrupt handling fixes.  Digital Equipment Corp.
 Extended key support.  Convex, 1990.
 Convex support, lots of bug fixes, save and  restore  of  directory  stack.
 Apple, 1990.
 A/UX 2.0 (re)port.  LTH Sweden, 1990.
 NLS support and simulated NLS support  for  non  NLS  sites,  fixes.   SICS
 Sweden, 1990.
 Mach support, 8-bit printing.  Sanyo Icon, 1990.
 POSIX termio support, SysV limit fixes.  Sequent, 1990-91.
 Vi mode fixes, expand-line, window change fixes, Symmetry  port.   Institut
 de recherche d'Hydro-Quebec, 1991.
 beeping options, modified the history search to search for the whole string
 from the beginning of the line to the cursor.  Motorola, 1991.
 Minix port.  Sydney U. Australia, Physics Dept., 1991.
 SVR4 job control fixes.  1991-.
 Various  portability  and  other  fixes.    Added   (dollar-single-quotes).
 Interactive Systems Corp., 1991.
 Extended fixes and delete command.  MIT, 1991.
 ANSIfication fixes, new exec hashing code, imake fixes, 1991-.
 Enhanced  directory  printing  in  Added  and  improvements.   Manual  page
 improvements.  sterling@netcom.com, 1991-1995.
 ETA and Pyramid port, Makefile and lint fixes, addition, and various  other
 portability changes and bug fixes.  1992.
 and 1992.
 Coherent port.  Mullard Space Science Lab U.K., 1992.
 VMS-POSIX port.  IBM Corp., 1992.
 Walking process group fixes, bug fixes, POSIX  file  tests,  POSIX  SIGHUP.
 Cray Computer Corp., 1992.
 CSOS port.  Rutgers University, 1992.
 Tek, m88k, Titan and Masscomp ports and  fixes.   Added  autoconf  support.
 Cornell University, 1992.
 OS/2 port.  liljeber@kruuna.Helsinki.FI, 1992.
 Linux port.  NASA Langley Research Center Operations, 1993.
 Read-only variables.  Yale University, 1993-4.
 New man page and tcsh.man2html.  Stanford University, 1993.
 AFS and HESIOD patches.  Silicon Graphics Inc., 1996.
 Added implicit cd.  1997.
 Ported to Siemens Nixdorf EBCDIC machine.  Microsoft, 1997.
 Ported to WIN32 (Windows/95 and Windows/NT); wrote all the missing  library
 and message catalog code to interface to Windows.  1998.
 Color ls additions.  Bryan Dunlap, Clayton  Elwell,  Karl  Kleinpaste,  Bob
 Manson,   Steve  Romig,  Diana  Smetters,  Bob  Sutterfield,  Mark  Verber,
 Elizabeth Zwicky and all the other people at Ohio State for suggestions and
 encouragement  All  the  people  on the net, for putting up with, reporting
 bugs in, and suggesting new additions to each and every version Richard  M.
 Alderson  III,  for  writing  the  section  When  a  suspended  command  is
 restarted, the shell  prints  the  directory  it  started  in  if  this  is
 different from the current directory.  This can be misleading (i.e., wrong)
 as  the  job  may  have  changed  directories  internally.   Shell  builtin
 functions are not stoppable/restartable.  Command sequences of the form are
 also not handled gracefully when stopping is attempted.  If you suspend the
 shell  will  then immediately execute This is especially noticeable if this
 expansion results from an It suffices to place the sequence of commands  in
 's to force it to a subshell, i.e., Control over tty output after processes
 are started is primitive; perhaps this will inspire someone to  work  on  a
 good virtual terminal interface.  In a virtual terminal interface much more
 interesting things could be done with output control.   Alias  substitution
 is  most often used to clumsily simulate shell procedures; shell procedures
 should be provided rather  than  aliases.   Control  structures  should  be
 parsed rather than being recognized as built-in commands.  This would allow
 control commands to be placed anywhere, to be combined with and to be  used
 with and metasyntax.  doesn't ignore here documents when looking for its It
 should  be  possible  to  use  the  modifiers  on  the  output  of  command
 substitutions.  The screen update for lines longer than the screen width is
 very poor if the terminal cannot move the cursor up  (i.e.,  terminal  type
 and don't need to be environment variables.  Glob-patterns which do not use
 or or which use or are not negated correctly.  The single-command  form  of
 does  output redirection even if the expression is false and the command is
 not  executed.   includes  file  identification  characters  when   sorting
 filenames  and  does  not  handle control characters in filenames well.  It
 cannot be interrupted.  Command substitution supports multiple commands and
 conditions,  but  not cycles or backward s.  Report bugs at preferably with
 fixes.  If you want to help maintain and test tcsh,  add  yourself  to  the
 mailing list in