glenda.party
term% ls -F
term% pwd
$home/manuals/unix_v8/1/ksh
term% cat index.txt
SH(1)                       General Commands Manual                      SH(1)

NAME
       ksh - Korn shell, the not standard command programming language

SYNOPSIS
       ksh [ -acefhikmnorstuvx ] [ -o option ] ...  [ arg  ... ]

DESCRIPTION
       Ksh  is a command programming language that executes commands read from
       a terminal or a file.  Rsh is a restricted version of the standard com‐
       mand interpreter sh; it is used to set up login names and execution en‐
       vironments whose capabilities are more controlled  than  those  of  the
       standard  shell.   See Invocation below for the meaning of arguments to
       the shell.

   Definitions.
       A metacharacter is one of the following characters:
              ;   &   (   )   ⎪   <   >   new-line   space   tab
       A blank is a tab or a space.  An identifier is a sequence  of  letters,
       digits,  or  underscores starting with a letter or underscore.  Identi‐
       fiers are used as names for aliases, functions, and  named  parameters.
       A  word is a sequence of characters separated by one or more non-quoted
       metacharacters.

   Commands.
       A simple-command is a sequence of blank separated words  which  may  be
       preceded by a parameter assignment list.  (See Environment below).  The
       first word specifies the name of the command to be executed.  Except as
       specified below, the remaining words are passed as arguments to the in‐
       voked command.  The command name is passed as argument 0 (see exec(2)).
       The  value of a simple-command is its exit status if it terminates nor‐
       mally, or (octal) 200+status if it terminates abnormally (see signal(2)
       for a list of status values).
       A pipeline is a sequence of one or more commands separated by  ⎪.   The
       standard  output of each command but the last is connected by a pipe(2)
       to the standard input of the next command.  Each command is  run  as  a
       separate  process;  the  shell waits for the last command to terminate.
       The exit status of a pipeline is the exit status of the last command.
       A list is a sequence of one or more pipelines separated by ;, &, &&, or
       ⎪⎪, and optionally terminated by ;, &, or ⎪&.  Of these  five  symbols,
       ;,  &, and ⎪& have equal precedence, which is lower than that of && and
       ⎪⎪.  The symbols && and ⎪⎪ also have equal precedence.  A semicolon (;)
       causes sequential execution of the preceding pipeline; an ampersand (&)
       causes asynchronous execution of  the  preceding  pipeline  (i.e.,  the
       shell does not wait for that pipeline to finish).  The symbol ⎪& causes
       asynchronous execution of the preceding command or pipeline with a two-
       way  pipe established to the parent shell.  The standard input and out‐
       put of the spawned command can be written to and read from by the  par‐
       ent  Shell  using  the -p option of the special commands read and print
       described later.  Only one such command can  be  active  at  any  given
       time.   The  symbol && (⎪⎪) causes the list following it to be executed
       only if the preceding pipeline returns a zero (non-zero) value.  An ar‐
       bitrary number of new-lines may appear in  a  list,  instead  of  semi‐
       colons, to delimit commands.
       A  command  is either a simple-command or one of the following.  Unless
       otherwise stated, the value returned by a command is that of  the  last
       simple-command executed in the command.

       for identifier [ in word ... ] do list done
              Each  time  a  for command is executed, identifier is set to the
              next word taken from the in word list.  If in word ...  is omit‐
              ted, then the for command executes the do list once for each po‐
              sitional parameter that is set (see Parameter  Substitution  be‐
              low).  Execution ends when there are no more words in the list.

       select identifier [ in word ... ] do list done
              A  select  command prints on standard error (file descriptor 2),
              the set of words, each preceded by a number.  If in word ...  is
              omitted, then the positional parameters are  used  instead  (see
              Parameter  Substitution below).  The PS3 prompt is printed and a
              line is read from the standard input.  If this line consists  of
              the number of one of the listed words, then the value of the pa‐
              rameter identifier is set to the word corresponding to this num‐
              ber.  If this line is empty the selection list is printed again.
              Otherwise  the value of the parameter identifier is set to null.
              The contents of the line read from standard input  is  saved  in
              the  parameter  REPLY.   The list is executed for each selection
              until a break or end-of-file is encountered.

       case word in [ pattern [ ⎪ pattern ] ... ) list ;; ] ... esac
              A case command executes the list associated with the first  pat‐
              tern that matches word.  The form of the patterns is the same as
              that used for file-name generation (see File Name Generation be‐
              low).

       if list then list [ elif list then list ] ... [ else list ] fi
              The list following if is executed and, if it returns a zero exit
              status,  the  list following the first then is executed.  Other‐
              wise, the list following elif is executed and, if its  value  is
              zero,  the  list  following  the next then is executed.  Failing
              that, the else list is executed.  If no else list or  then  list
              is executed, then the if command returns a zero exit status.

       while list do list done
       until list do list done
              A  while  command repeatedly executes the while list and, if the
              exit status of the last command in the list  is  zero,  executes
              the  do  list; otherwise the loop terminates.  If no commands in
              the do list are executed, then the while command returns a  zero
              exit  status;  until may be used in place of while to negate the
              loop termination test.

       (list)
              Execute list in a separate environment.  Note, that if two adja‐
              cent open parentheses are needed for nesting, a  space  must  be
              inserted to avoid arithmetic evaluation as described below.

       { list;}
              list  is simply executed.  Note that { is a keyword and requires
              a blank in order to be recognized.

       function identifier  { list ;}
       identifier  () { list ;}
              Define a function which is referenced by identifier.   The  body
              of  the  function is the list of commands between { and }.  (See
              Functions below).

       time pipeline
              The pipeline is executed and the elapsed time  as  well  as  the
              user and system time are printed on standard error.
              The  following keywords are only recognized as the first word of
              a command and when not quoted:
              if then else elif fi case esac for while until do done { } func‐
              tion select time

   Comments.
       A word beginning with # causes that word and all the following  charac‐
       ters up to a new-line to be ignored.

   Aliasing.
       The  first  word of each command is replaced by the text of an alias if
       an alias for this word has been defined.  The  first  character  of  an
       alias  name can be any printable character, but the rest of the charac‐
       ters must be the same as  for  a  valid  identifier.   The  replacement
       string  can contain any valid Shell script including the metacharacters
       listed above.  The first word of each command of the replaced text will
       not be tested for additional aliases.  If the  last  character  of  the
       alias  value  is a blank then the word following the alias will also be
       checked for alias substitution.  Aliases can be used to  redefine  spe‐
       cial  builtin  commands  but  cannot  be  used to redefine the keywords
       listed above.  Aliases can be created, listed, and  exported  with  the
       alias  command  and  can be removed with the unalias command.  Exported
       aliases remain in effect for sub-shells but must be  reinitialized  for
       separate invocations of the Shell (See Invocation below).
       Aliasing  is  performed  when scripts are read, not while they are exe‐
       cuted.  Therefore, for an alias to take effect the alias command has to
       be executed before the command which references the alias is read.
       Aliases are frequently used as a short hand for full  path  names.   An
       option to the aliasing facility allows the value of the alias to be au‐
       tomatically  set  to  the  full  pathname of the corresponding command.
       These aliases are called tracked aliases.  The value of a tracked alias
       is defined the first time the identifier is read and becomes  undefined
       each  time the PATH variable is reset.  These aliases remain tracked so
       that the next subsequent reference will redefine  the  value.   Several
       tracked  aliases are compiled into the shell.  The -h option of the set
       command makes each command name which is an identifier into  a  tracked
       alias.
       The  following  exported aliases are compiled into the shell but can be
       unset or redefined:
                           echo=′print -′
                           false=′let 0′
                           functions=′typeset -f′
                           history=′fc -l′
                           integer=′typeset -i′
                           nohup=′nohup ′
                           pwd=′print - $PWD′
                           r=′fc -e -′
                           true=′:′
                           type=′whence -v′
                           hash=′alias -t′

   Tilde Substitution.
       After alias substitution is performed, each word is checked to  see  if
       it  begins  with an unquoted ∼.  If it does, then the word up to a / is
       checked to see if it matches a user name in the /etc/passwd file.  If a
       match is found, the ∼ and the matched login name is replaced by the lo‐
       gin directory of the matched user.  This is called  a  tilde  substitu‐
       tion.   If no match is found, the original text is left unchanged.  A ∼
       by itself, or in front of a /, is replaced by the value of the HOME pa‐
       rameter.  A ∼ followed by a + or - is replaced by the value of the  pa‐
       rameter PWD and OLDPWD respectively.
       In  addition,  the value of each keyword parameter is checked to see if
       it begins with a ∼ or if a ∼ appears after a :.   In  either  of  these
       cases a tilde substitution is attempted.

   Command Substitution.
       The  standard output from a command enclosed in a pair of grave accents
       (``) may be used as part or all of a word; trailing new-lines  are  re‐
       moved.   The  command  substitution  `cat  file` can be replaced by the
       equivalent but faster `<file`.  Command substitution  of  most  special
       commands  that  do not perform input/output redirection are carried out
       without creating a separate process.

   Parameter Substitution.
       A parameter is an identifier, a digit, or any of the characters  ∗,  @,
       #,  ?, -, $, and !.  A named parameter (a parameter denoted by an iden‐
       tifier) has a value and zero or more attributes.  Named parameters  can
       be assigned values and attributes by using the typeset special command.
       The attributes supported by the Shell  are  described  later  with  the
       typeset  special  command.  Exported parameters pass values and attrib‐
       utes to sub-shells but only values to the environment.
       The shell supports a limited one-dimensional array facility.   An  ele‐
       ment  of  an array parameter is referenced by a subscript.  A subscript
       is denoted by a [, followed by an arithmetic expression (see Arithmetic
       evaluation below) followed by a ].  The value of all subscripts must be
       in the range of 0 through 511.  Arrays need not be declared.  Any  ref‐
       erence  to a named parameter with a valid subscript is legal and an ar‐
       ray will be created if necessary.  Referencing an array without a  sub‐
       script is equivalent to referencing the first element.
       The value of a named parameter may also be assigned by writing:
              name=value [ name=value ] ...
       If  the  integer attribute, -i, is set for name the value is subject to
       arithmetic evaluation as described below.
       Positional parameters, parameters denoted by a number, may be  assigned
       values with the set special command.  Parameter $0 is set from argument
       zero when the shell is invoked.
       The character $ is used to introduce substitutable parameters.
       ${parameter}
              The  value, if any, of the parameter is substituted.  The braces
              are required when parameter is followed by a letter,  digit,  or
              underscore  that is not to be interpreted as part of its name or
              when a named parameter is subscripted.  If parameter is a  digit
              then it is a positional parameter.  If parameter is ∗ or @, then
              all the positional parameters, starting with $1, are substituted
              (separated  by spaces).  If an array identifier with subscript ∗
              or @ is used, then the value for each of the elements is substi‐
              tuted (separated by spaces).
       ${#parameter}
              If parameter is not ∗, the length of the value of the  parameter
              is  substituted.  Otherwise, the number of positional parameters
              is substituted.
       ${#identifier[*]}
              The number of elements in the array identifier is substituted.
       ${parameter:-word}
              If parameter is set and is non-null then substitute  its  value;
              otherwise substitute word.
       ${parameter:=word}
              If  parameter  is  not  set  or is null then set it to word; the
              value of the parameter is then substituted.  Positional  parame‐
              ters may not be assigned to in this way.
       ${parameter:?word}
              If  parameter  is set and is non-null then substitute its value;
              otherwise, print word and exit from the shell.  If word is omit‐
              ted then a standard message is printed.
       ${parameter:+word}
              If parameter is set and is non-null then substitute word; other‐
              wise substitute nothing.
       ${parameter#pattern}
       ${parameter##pattern}
              If the Shell pattern matches the beginning of the value of para‐
              meter, then the value of this substitution is the value  of  the
              parameter  with the matched portion deleted; otherwise the value
              of this parameter is substituted.  In the first form the  small‐
              est  matching  pattern  is  deleted  and  in the latter form the
              largest matching pattern is deleted.

       ${parameter%pattern}
       ${parameter%%pattern}
              If the Shell pattern matches the end of the value of  parameter,
              then  the value of parameter with the matched part deleted; oth‐
              erwise substitute the value of parameter.  In the first form the
              smallest matching pattern is deleted and in the latter form  the
              largest matching pattern is deleted.
              In  the  above, word is not evaluated unless it is to be used as
              the substituted string, so that, in the following  example,  pwd
              is executed only if d is not set or is null:
              echo ${d:-`pwd`}
       If  the  colon  (  :  ) is omitted from the above expressions, then the
       shell only checks whether parameter is set or not.
       The following parameters are automatically set by the shell:
              #      The number of positional parameters in decimal.
              -      Flags supplied to the shell on invocation or by  the  set
                     command.
              ?      The decimal value returned by the last executed command.
              $      The process number of this shell.
              _      The  last argument of the previous command.  This parame‐
                     ter is not set for commands which are asynchronous.
              !      The process number of the  last  background  command  in‐
                     voked.
              PPID   The process number of the parent of the shell.
              PWD    The present working directory set by the cd command.
              OLDPWD The previous working directory set by the cd command.
              RANDOM Each  time this parameter is referenced, a random integer
                     is generated.  The sequence of random numbers can be ini‐
                     tialized by assigning a numeric value to RANDOM.
              REPLY  This parameter is set by the select statement and by  the
                     read special command when no arguments are supplied.
       The following parameters are used by the shell:
              CDPATH The search path for the cd command.
              COLUMNS
                     If  this variable is set, the value is used to define the
                     width of the edit window for the shell edit modes and for
                     printing select lists.
              EDITOR If the value of this variable ends in emacs, gmacs, or vi
                     and the VISUAL variable is not set, then the  correspond‐
                     ing option (see Special Command set below) will be turned
                     on.
              ENV    If  this parameter is set, then parameter substitution is
                     performed on the value to generate the  pathname  of  the
                     script  that  will be executed when the shell is invoked.
                     (See Invocation below.)  This file is typically used  for
                     alias and function definitions.
              FCEDIT The default editor name for the fc command.
              IFS    Internal  field separators, normally space, tab, and new-
                     line that is used to separate command words which  result
                     from command or parameter substitution and for separating
                     words with  the special command read.
              HISTFILE
                     If  this parameter is set when the shell is invoked, then
                     the value is the  pathname of the file that will be  used
                     to  store the command history.  (See Command re-entry be‐
                     low.)
              HISTSIZE
                     If this parameter is set when the shell is invoked,  then
                     the number of previously entered commands that are acces‐
                     sible by this shell will be greater than or equal to this
                     number.  The default is 128.
              HOME   The default argument (home directory) for the cd command.
              MAIL   If  this  parameter is set to the name of a mail file and
                     the MAILPATH parameter is not set, then the shell informs
                     the user of arrival of mail in the specified file.
              MAILCHECK
                     This variable specifies how often (in seconds) the  shell
                     will check for changes in the modification time of any of
                     the  files  specified by the MAILPATH or MAIL parameters.
                     The default value is 600 seconds.  If set to 0, the shell
                     will check before each prompt.
              MAILPATH
                     A colon ( : ) separated list of file names.  If this  pa‐
                     rameter  is  set  then  the shell informs the user of any
                     modifications to the specified files that  have  occurred
                     within the last MAILCHECK seconds.  Each file name can be
                     followed by a ?  and a message that will be printed.  The
                     message  will  undergo parameter and command substitution
                     with the parameter, $_ defined as the name  of  the  file
                     that  has  changed.  The default message is you have mail
                     in $_.
              PATH   The search path for commands (see Execution below).   The
                     user  may  not change PATH if executing under rsh (except
                     in .profile ).
              PS1    The value of this parameter is expanded for paramter sub‐
                     stitution to define the primary prompt  string  which  by
                     default  is  ‘‘$  ''.   The  character  !  in the primary
                     prompt string is replaced by the command number (see Com‐
                     mand Re-entry below).
              PS2    Secondary prompt string, by default ‘‘> ''.
              PS3    Selection prompt string used within a select loop, by de‐
                     fault ‘‘#? ''.
              SHELL  The pathname of the shell is kept in the environment.  At
                     invocation, if the value of this variable contains  an  r
                     in the basename, then the shell becomes restricted.
              TMOUT  If  set to a value greater than zero, the shell will ter‐
                     minate if a command is not entered within the  prescribed
                     number  of seconds.  (Note that the shell can be compiled
                     with a maximum bound for this value which cannot  be  ex‐
                     ceeded.)
              VISUAL If the value of this variable ends in emacs, gmacs, or vi
                     then  the  corresponding  option (see Special Command set
                     below) will be turned on.
       The shell gives default values to PATH, PS1, PS2, MAILCHECK, TMOUT  and
       IFS, while HOME, SHELL ENV and MAIL are not set at  all  by  the  shell
       (although HOME is set by login(1)).  On some systems MAIL and SHELL are
       also set by login(1)).

   Blank Interpretation.
       After  parameter and command substitution, the results of substitutions
       are scanned for the field separator characters ( those found in  IFS  )
       and split into distinct arguments where such characters are found.  Ex‐
       plicit null arguments ("" or (fm(fm) are retained.  Implicit null argu‐
       ments  (those  resulting  from  parameters that have no values) are re‐
       moved.

   File Name Generation.
       Following substitution, each command word is scanned for the characters
       ∗, ?, and [ unless the -f option has been set.  If one of these charac‐
       ters appears then the word is regarded as a pattern.  The word  is  re‐
       placed  with  alphabetically  sorted file names that match the pattern.
       If no file name is found that matches the pattern,  then  the  word  is
       left  unchanged.   When a pattern is used for file name generation, the
       character .  at the start of a file name or immediately following a  /,
       as  well  as  the  character  / itself, must be matched explicitly.  In
       other instances of pattern matching the / and .  are not  treated  spe‐
       cially.
              ∗      Matches any string, including the null string.
              ?      Matches any single character.
              [...]  Matches  any  one  of the enclosed characters.  A pair of
                     characters separated by - matches any character lexically
                     between the pair, inclusive.  If the first character fol‐
                     lowing the opening "[ " is a "! " then any character  not
                     enclosed  is matched.  A - can be included in the charac‐
                     ter set by putting it as the first or last character.

   Quoting.
       Each of the metacharacters listed above (See Definitions above).  has a
       special meaning to the shell and cause termination  of  a  word  unless
       quoted.   A character may be quoted (i.e., made to stand for itself) by
       preceding it with a \.  The pair \new-line is ignored.  All  characters
       enclosed  between  a  pair  of single quote marks (′′), except a single
       quote, are quoted.  Inside double quote marks (""), parameter and  com‐
       mand  substitution  occurs  and \ quotes the characters \, ′, ", and $.
       "$∗" is equivalent to "$1 $2 ...", whereas "$@" is equivalent  to  "$1"
       "$2" ....
       The special meaning of keywords can be removed by quoting any character
       of  the keyword.  The recognition of special command names listed below
       cannot be altered by quoting them.

   Arithmetic Evaluation.
       An ability to perform integer arithmetic is provided with  the  special
       command  let.   Evaluations  are performed using long arithmetic.  Con‐
       stants are of the form [base#]n where base is a decimal number  between
       two  and  thirty-six representing the arithmetic base and n is a number
       in that base.  If base is omitted then base 10 is used.
       An internal integer representation of a named parameter can  be  speci‐
       fied  with the -i option of the typeset special command.  When this at‐
       tribute is selected the first assignment to  the  parameter  determines
       the arithmetic base to be used when parameter substitution occurs.
       Since  many of the arithmetic operators require quoting, an alternative
       form of the let command is provided.  For any command which begins with
       a ((, all the characters until a matching )) are treated  as  a  quoted
       expression.  More precisely, (( ...  )) is equivalent to let " ...".

   Prompting.
       When used interactively, the shell prompts with the value of PS1 before
       reading  a command.  If at any time a new-line is typed and further in‐
       put is needed to complete a command, then the secondary  prompt  (i.e.,
       the value of PS2) is issued.

   Input/Output.
       Before  a  command  is executed, its input and output may be redirected
       using a special notation interpreted by the shell.  The  following  may
       appear  anywhere in a simple-command or may precede or follow a command
       and are not passed on to the invoked command.   Command  and  parameter
       substitution occurs before word or digit is used except as noted below.
       File  name  generation occurs only if the pattern matches a single file
       and blank interpretation is not performed.

       <word         Use file word as standard input (file descriptor 0).

       >word         Use file word as standard output (file descriptor 1).  If
                     the file does not exist then it is created; otherwise, it
                     is truncated to zero length.

       >>word        Use file word as standard output.   If  the  file  exists
                     then  output  is  appended to it (by first seeking to the
                     end-of-file); otherwise, the file is created.

       <<[-]word     The shell input is read up to a line that is the same  as
                     word,  or  to an end-of-file.  No parameter substitution,
                     command substitution or file name generation is performed
                     on word.  The resulting document, called a here-document,
                     becomes the standard input.  If any character of word  is
                     quoted, then no interpretation is placed upon the charac‐
                     ters  of  the  document; otherwise, parameter and command
                     substitution occurs, \new-line is ignored, and \ must  be
                     used to quote the characters \, $, `, and the first char‐
                     acter  of word.  If - is appended to <<, then all leading
                     tabs are stripped from word and from the document.

       <&digit       The standard input is  duplicated  from  file  descriptor
                     digit  (see  dup(2)).   Similarly for the standard output
                     using >& digit.

       <&-           The standard input is closed.  Similarly for the standard
                     output using >&-.
                     If one of the above is preceded by a digit, then the file
                     descriptor number referred to is that  specified  by  the
                     digit (instead of the default 0 or 1).  For example:
                     ... 2>&1
       means  file  descriptor 2 is to be opened for writing as a duplicate of
       file descriptor 1.
       The order in which redirections  are  specified  is  significant.   The
       shell  evaluates  each  redirection  in  terms of the (file descriptor,
       file) association at the time of evaluation.  For example:
                     ... 1>fname 2>&1
       first associates file descriptor 1 with file fname.  It then associates
       file descriptor 2 with the file associated with file descriptor 1 (i.e.
       fname).  If the order of redirections were reversed, file descriptor  2
       would  be  associated with the terminal (assuming file descriptor 1 had
       been) and then file descriptor 1 would be associated with file fname.
       If a command is followed by & and job control is not active,  then  the
       default  standard  input  for  the command is the empty file /dev/null.
       Otherwise, the environment for the execution of a command contains  the
       file  descriptors  of  the  invoking  shell as modified by input/output
       specifications.

   Environment.
       The environment (see environ(7)) is a list of name-value pairs that  is
       passed  to  an  executed  program  in the same way as a normal argument
       list.  The names must be  identifiers  and  the  values  are  character
       strings.  The shell interacts with the environment in several ways.  On
       invocation, the shell scans the environment and creates a parameter for
       each  name  found, giving it the corresponding value and marking it ex‐
       port .  Executed commands inherit the environment.  If the  user  modi‐
       fies  the values of these parameters or creates new ones, using the ex‐
       port or typeset -x commands they become part of the  environment.   The
       environment  seen by any executed command is thus composed of any name-
       value pairs originally inherited by the shell, whose values may be mod‐
       ified by the current shell, plus any additions which must be  noted  in
       export or typeset -x commands.
       The  environment for any simple-command or function may be augmented by
       prefixing it with one or more parameter assignments.  A  parameter  as‐
       signment argument is a word of the form identifier=value.  Thus:
              TERM=450 cmd args                  and
              (export TERM; TERM=450; cmd args)
       are equivalent (as far as the above execution of cmd is concerned).
       If the -k flag is set, all parameter assignment arguments are placed in
       the  environment,  even if they occur after the command name.  The fol‐
       lowing first prints a=b c and then c:
              echo a=b c
              set -k
              echo a=b c

   Functions.
       The function keyword, described in the Commands section above, is  used
       to  define shell functions.  Shell functions are read in and stored in‐
       ternally.  Alias names are resolved when the function is  read.   Func‐
       tions  are  executed  like  commands with the arguments passed as posi‐
       tional parameters.  (See Execution below).
       Functions execute in the same process  as  the  caller  and  share  all
       files,  traps  ( other than EXIT and ERR) and present working directory
       with the caller.  A trap set on EXIT inside a function is executed  af‐
       ter  the  function completes.  Ordinarily, variables are shared between
       the calling program and the function.   However,  the  typeset  special
       command  used within a function defines local variables whose scope in‐
       cludes the current function and all functions it calls.
       The special command return is used to return from function calls.   Er‐
       rors within functions return control to the caller.
       Function  identifiers  can  be listed with the -f option of the typeset
       special command.  The text of functions will also be listed.   Function
       can be undefined with the -f option of the unset special command.
       Ordinarily, functions are unset when the shell executes a shell script.
       The  -xf option of the typeset command allows a function to be exported
       to scripts that are executed  without  a  separate  invocation  of  the
       shell.   Functions  that need to be defined across separate invocations
       of the shell should be placed in the ENV file.

   Jobs.
       If the monitor option of the set command is turned on,  an  interactive
       shell associates a job with each pipeline.  It keeps a table of current
       jobs,  printed by the jobs command, and assigns them small integer num‐
       bers.  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.
       This  paragraph  and the next require features that are not in all ver‐
       sions of UNIX and may not apply.  If you are running a job and wish  to
       do something else you may hit the key ^Z (control-Z) which sends a STOP
       signal  to the current job.  The shell will then normally indicate that
       the job has been ‘Stopped', and print another prompt.  You can then ma‐
       nipulate the state of this job, putting it in the background  with  the
       bg  command,  or  run some other commands and then eventually bring the
       job back into the foreground with the  foreground  command  fg.   A  ^Z
       takes  effect immediately and is like an interrupt in that pending out‐
       put and unread input are discarded when it is typed.
       A job being run in the background will stop 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 ‘‘stty tostop''.  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 %1 .  Jobs can also be named by prefixes of the string typed
       in to kill or restart them.  Thus, on systems that support job control,
       ‘fg  %ed' would normally restart a suspended ed(1) job, if there were a
       suspended job whose name began with the string ‘ed'.
       The shell maintains a notion of the current and previous jobs.  In out‐
       put pertaining to jobs, the current job is marked with a + and the pre‐
       vious job with a -.  The abbreviation %+ refers to the current job  and
       %-  refers  to  the previous job.  %% is also a synonym for the current
       job.
       This 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 just before it prints a prompt.  This is
       done so that it does not otherwise disturb your work.
       When you try to leave the shell while jobs are running or stopped,  you
       will  be warned that ‘You have stopped(running) jobs.'  You may use the
       jobs 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
       stopped jobs will be terminated.

   Signals.
       The INT and QUIT signals for an invoked command are ignored if the com‐
       mand is followed by & and job monitor option is not active.  Otherwise,
       signals have the values inherited by the shell from  its  parent,  with
       the exception of signal 11 (but see also the trap command below).

   Execution.
       Each  time  a  command is executed, the above substitutions are carried
       out.  If the command name matches one of the  Special  Commands  listed
       below, it is executed within the current shell process.  Next, the com‐
       mand name is checked to see if it matches one of the user defined func‐
       tions.   If it does, the positional parameters are saved and then reset
       to the arguments of the function call.  When the function completes  or
       issues a return, the positional parameter list is restored and any trap
       set  on  EXIT within the function is executed.  The value of a function
       is the value of the last command executed.  A function is also executed
       in the current shell process.  If a command name is not a special  com‐
       mand or a user defined function, a process is created and an attempt is
       made to execute the command via exec(2).
       The shell parameter PATH defines the search path for the directory con‐
       taining  the  command.   Alternative directory names are separated by a
       colon (:).  The default path is :/bin:/usr/bin (specifying the  current
       directory,  /bin,  and /usr/bin, in that order).  Note that the current
       directory is specified by a null path name, which  can  appear  immedi‐
       ately  after the equal sign, between colon delimiters, or at the end of
       the path list.  If the command name contains a / then the  search  path
       is  not used.  Otherwise, each directory in the path is searched for an
       executable file.  If the file has execute permission but is not  a  di‐
       rectory  or  an a.out file, it is assumed to be a file containing shell
       commands.  A  sub-shell  is  spawned  to  read  it.   All  non-exported
       aliases,  functions,  and named parameters are removed in this case.  A
       parenthesized command is also executed in a sub-shell.

   Command Re-entry.
       The text of the last HISTSIZE (default 128)  commands  entered  from  a
       terminal device is saved in a history file.  The file $HOME/.history is
       used  if  the HISTFILE variable is not set or is not writable.  A shell
       can access the commands of all interactive shells which  use  the  same
       named  HISTFILE.  The special command fc is used to list or edit a por‐
       tion this file.  The portion of the file to be edited or listed can  be
       selected  by  number  or by giving the first character or characters of
       the command.  A single command or range of commands can  be  specified.
       If  you  do not specify an editor program as an argument to fc then the
       value of the parameter FCEDIT is used.  If FCEDIT is not  defined  then
       /bin/ed is used.  The edited command(s) is printed and re-executed upon
       leaving  the  editor.   The  editor  name - is used to skip the editing
       phase and to re-execute the command.  In this case a substitution para‐
       meter of the form old=new can be used to modify the command before exe‐
       cution.  For example, if r is aliased to  ′fc  -e  -′  then  typing  ‘r
       bad=good  c'  will re-execute the most recent command which starts with
       the letter c, replacing the string bad with the string good.

   In-line Editing Options
       Normally, each command line entered from a terminal  device  is  simply
       typed  followed by a new-line (‘RETURN' or ‘LINE FEED').  If either the
       emacs, gmacs, or vi option is active, the user  can  edit  the  command
       line.   To  be  in either of these edit modes set the corresponding op‐
       tion.  An editing option is automatically selected each time the VISUAL
       or EDITOR variable is assigned a value ending in either of these option
       names.
       The editing features require that the user's terminal  accept  ‘RETURN'
       as  carriage  return without line feed and that a space (‘ ' must over‐
       write the current character on the screen.  ADM terminal  users  should
       set  the  "space - advance"  switch to ‘space'.  Hewlett-Packard series
       2621 terminal users should set the straps to ‘bcGHxZ etX'.
       The editing modes implement a concept where the user is looking through
       a window at the current line.  The window width is the value of COLUMNS
       if it is defined, otherwise 80.  If the line is longer than the  window
       width minus two, a mark is displayed at the end of the window to notify
       the  user.   As  the cursor moves and reaches the window boundaries the
       window will be centered about the cursor.  The mark is a > ( <,  *)  if
       the line extends on the right (left, both) side(s) of the window.

   Emacs Editing Mode
       This mode is entered by enabling either the emacs or gmacs option.  The
       only  difference between these two modes is the way they handle ^T.  To
       edit, the user moves the cursor to the  point  needing  correction  and
       then inserts or deletes characters or words as needed.  All the editing
       commands  are control characters or escape sequences.  The notation for
       control characters is caret ( ^ ) followed by the character.  For exam‐
       ple, ^F is the notation for control F.  This is entered  by  depressing
       ‘f'  while  holding  down the ‘CTRL' (control) key.  The ‘SHIFT' key is
       not depressed.  (The notation ^?  indicates the DEL (delete) key.)
       The notation for escape sequences is M- followed by a  character.   For
       example,  M-f  (pronounced  Meta f) is entered by depressing ESC (ascii
       033 ) followed by ‘f'.  ( M-F would be the notation for ESC followed by
       ‘SHIFT' (capital) ‘F'.)
       All edit commands operate from any place on the line (not just  at  the
       beginning).   Neither  the  "RETURN" nor the "LINE FEED" key is entered
       after edit commands except when noted.
       ^F        Move cursor forward (right) one character.
       M-f       Move cursor forward one word.  (The editor's idea of  a  word
                 is  a string of characters consisting of only letters, digits
                 and underscores.)
       ^B        Move cursor backward (left) one character.
       M-b       Move cursor backward one word.
       ^A        Move cursor to start of line.
       ^E        Move cursor to end of line.
       ^]char    Move cursor to character char on current line.
       ^X^X      Interchange the cursor and mark.
       erase     (User defined erase character as defined by the stty command,
                 usually ^H or #.)  Delete previous character.
       ^D        Delete current character.
       M-d       Delete current word.
       M-^H      (Meta-backspace) Delete previous word.
       M-h       Delete previous word.
       M-^?      (Meta-DEL) Delete previous word (if your interrupt  character
                 is ^?  (DEL, the default) then this command will not work).
       ^T        Transpose  current  character  with  next  character in emacs
                 mode.  Transpose two previous characters in gmacs mode.
       ^C        Capitalize current character.
       M-C       Capitalize current word.
       ^K        Kill from the cursor to the end of the line.  If given a  pa‐
                 rameter  of zero then kill from the start of line to the cur‐
                 sor.
       ^W        Kill from the cursor to the mark.
       M-p       Push the region from the cursor to the mark on the stack.
       kill      (User defined kill character as defined by the stty  command,
                 usually ^G or @.)  Kill the entire current line.  If two kill
                 characters  are  entered  in  succession, all kill characters
                 from then on cause a line feed (useful when using paper  ter‐
                 minals).
       ^Y        Restore  last  item removed from line. (Yank item back to the
                 line.)
       ^L        Line feed and print current line.
       ^@        (Null character) Set mark.
       M-        (Meta space) Set mark.
       ^J        (New line)  Execute the current line.
       ^M        (Return)  Execute the current line.
       eof       End-of-file character, normally ^D, will terminate the  shell
                 if the current line is null.
       ^P        Fetch previous command.  Each time ^P is entered the previous
                 command back in time is accessed.
       M-<       Fetch the least recent (oldest) history line.
       M->       Fetch the most recent (youngest) history line.
       ^N        Fetch next command.  Each time ^N is entered the next command
                 forward in time is accessed.
       ^Rstring  Reverse search history for a previous command line containing
                 string.   If  a parameter of zero is given the search is for‐
                 ward.  String is terminated by a "RETURN" or "NEW LINE".
       ^O        Operate - Execute the current line and fetch  the  next  line
                 relative to current line from the history file.
       M-digits  (Escape)  Define numeric parameter, the digits are taken as a
                 parameter to the next command.  The commands  that  accept  a
                 parameter are ^F, ^B, erase, ^D, ^K, ^R, ^P and ^N.
       M-letter  Soft-key  -  Your  alias list is searched for an alias by the
                 name _letter and if an alias of this  name  is  defined,  its
                 value  will  be inserted on the line.  The letter must not be
                 one of the above meta-functions.
       M-_       The last parameter of the previous command is inserted on the
                 line.
       M-.       The last parameter of the previous command is inserted on the
                 line.
       M-*       Attempt file name generation on the current word.
       ^U        Multiply parameter of next command by 4.
       \         Escape next character.  Editing characters, the user's erase,
                 kill and interrupt (normally ^?  ) characters may be  entered
                 in  a  command line or in a search string if preceded by a \.
                 The \ removes the next character's editing features (if any).
       ^V        Display version of the shell.

   Vi Editing Mode
       There are two typing modes.  Initially, when you enter  a  command  you
       are in the input mode.  To edit, the user enters control mode by typing
       ESC  (  033  ) and moves the cursor to the point needing correction and
       then inserts or deletes characters or words as  needed.   Most  control
       commands accept an optional repeat count prior to the command.
       When  in vi mode on most systems, canonical processing is initially en‐
       abled and the command will be echoed again if the speed is 1200 baud or
       greater and it contains any control characters or less than one  second
       has elapsed since the prompt was printed.  The ESC character terminates
       canonical  processing for the remainder of the command and the user can
       than modify the command line.  This scheme has the advantages of canon‐
       ical processing with the type-ahead echoing of raw mode.
       If the option viraw is also set, the terminal will always have  canoni‐
       cal processing disabled.  This mode is implicit for systems that do not
       support  two  alternate  end of line delimiters, and may be helpful for
       certain terminals.

        Input Edit Commands
              By default the editor is in input mode.
              erase     (User defined erase character as defined by  the  stty
                        command, usually ^H or #.)  Delete previous character.
              ^W        Delete the previous blank separated word.
              ^D        Terminate the shell.
              ^V        Escape next character.  Editing characters, the user's
                        erase  or  kill characters may be entered in a command
                        line or in a search string if preceded by a  ^V.   The
                        ^V  removes  the next character's editing features (if
                        any).
              \         Escape the next erase or kill character.
        Motion Edit Commands
              These commands will move the cursor.
              [count]l  Cursor forward (right) one character.
              [count]w  Cursor forward one alpha-numeric word.
              [count]W  Cursor to the beginning of the next word that  follows
                        a blank.
              [count]e  Cursor to end of word.
              [count]E  Cursor to end of the current blank delimited word.
              [count]h  Cursor backward (left) one character.
              [count]b  Cursor backward one word.
              [count]B  Cursor to preceding blank separated word.
              [count]fc Find the next character c in the current line.
              [count]Fc Find the previous character c in the current line.
              [count]tc Equivalent to f followed by h.
              [count]Tc Equivalent to F followed by l.
              ;         Repeats  the last single character find command, f, F,
                        t, or T.
              ,         Reverses the last single character find command.
              0         Cursor to start of line.
              ^         Cursor to first non-blank character in line.
              $         Cursor to end of line.
        Search Edit Commands
              These commands access your command history.
              [count]k  Fetch previous command.  Each time k  is  entered  the
                        previous command back in time is accessed.
              [count]-  Equivalent to k.
              [count]j  Fetch  next  command.  Each time j is entered the next
                        command forward in time is accessed.
              [count]+  Equivalent to j.
              [count]G  The command number count is fetched.  The  default  is
                        the least recent history command.
              /string   Search backward through history for a previous command
                        containing string.  String is terminated by a "RETURN"
                        or  "NEW LINE".  If string is null the previous string
                        will be used.
              ?string   Same as / except that search will be  in  the  forward
                        direction.
              n         Search  for  next  match of the last pattern to / or ?
                        commands.
              N         Search for next match of the last pattern to /  or  ?,
                        but  in  reverse  direction.   Search  history for the
                        string entered by the previous / command.
        Text Modification Edit Commands
              These commands will modify the line.
              a         Enter input mode and  enter  text  after  the  current
                        character.
              A         Append text to the end of the line.  Equivalent to $a.
              [count]cmotion
              c[count]motion
                        Delete  current character through the character motion
                        moves the cursor to and enter input mode.   If  motion
                        is  c,  the entire line will be deleted and input mode
                        entered.
              C         Delete the current character through the end  of  line
                        and enter input mode.  Equivalent to c$.
              S         Equivalent to cc.
              D         Delete the current character through the end of line.
              [count]dmotion
              d[count]motion
                        Delete  current character through the character motion
                        moves the cursor to.  Equivalent to d$.  If motion  is
                        d , the entire line will be deleted.
              i         Enter  input  mode  and insert text before the current
                        character.
              I         Insert text before the beginning of the line.  Equiva‐
                        lent to the two character sequence ^i.
              [count]P  Place the previous text modification before  the  cur‐
                        sor.
              [count]p  Place the previous text modification after the cursor.
              R         Enter  input mode and replace characters on the screen
                        with characters you type overlay fashion.
              rc        Replace the current character with c.
              [count]x  Delete current character.
              [count]X  Delete preceding character.
              [count].  Repeat the previous text modification command.
              ∼         Invert the case of the current character  and  advance
                        the cursor.
              [count]_  Causes  the  count  word of the previous command to be
                        appended and input mode entered.   The  last  word  is
                        used if count is omitted.
              *         Causes  an  *  to  be appended to the current word and
                        file name generation attempted.  If no match is found,
                        it rings the bell.  Otherwise, the word is replaced by
                        the matching pattern and input mode is entered.
        Other Edit Commands
              Miscellaneous commands.
              u         Undo the last text modifying command.
              U         Undo all the text modifying commands performed on  the
                        line.
              [count]v  Returns  the  command  fc  -e ${VISUAL:-${EDITOR:-vi}}
                        count in the input buffer.  If count is omitted,  then
                        the current line is used.
              ^L        Line  feed and print current line.  Has effect only in
                        control mode.
              ^J        (New line)  Execute the current  line,  regardless  of
                        mode.
              ^M        (Return)   Execute  the  current  line,  regardless of
                        mode.
              Equivalent to
                        I#<cr>.  Useful for causing the current line to be in‐
                        serted in the history without being executed.

   Special Commands.
       The following simple-commands are executed in the shell  process.   In‐
       put/Output  redirection is permitted.  File descriptor 1 is the default
       output location.  Parameter assignment lists preceding the  command  do
       not remain in effect when the command completes unless noted.

       : [ arg ... ]
              Parameter  assignments  remain  in effect after the command com‐
              pletes.  The command only expands parameters.  A zero exit  code
              is returned.

       . file [ arg ... ]
              Parameter  assignments  remain  in effect after the command com‐
              pletes.  Read and execute commands from file  and  return.   The
              commands  are  executed  in  the current Shell environment.  The
              search path specified by PATH is used to find the directory con‐
              taining file.  If any arguments arg are given, they  become  the
              positional  parameters.  Otherwise the positional parameters are
              unchanged.

       alias [ -tx ] [ name[ =value ]  ... ]
              Alias with no arguments prints the list of aliases in  the  form
              name=value  on  standard  output.   An alias is defined for each
              name whose value is given.  A trailing space in value causes the
              next word to be checked for alias substitution.  The -t flag  is
              used  to  set  and list tracked aliases.  The value of a tracked
              alias is the full pathname corresponding to the given name.  The
              value becomes undefined when the value of PATH is reset but  the
              aliases remained tracked.  Without the -t flag, for each name in
              the  argument  list  for  which  no value is given, the name and
              value of the alias is printed.  The -x flag is used  to  set  or
              print  exported  aliases.   An  exported alias is defined across
              sub-shell environments.  Alias returns true  unless  a  name  is
              given for which no alias has been defined.

       bg [ %job ]
              This  command  is only built-in on systems that support job con‐
              trol.  Puts the specified job into the background.  The  current
              job is put in the background if job is not specified.

       break [ n ]
              Exit  from the enclosing for while until or select loop, if any.
              If n is specified then break n levels.

       continue [ n ]
              Resume the next iteration of the enclosing for  while  until  or
              select  loop.  If n is specified then resume at the n-th enclos‐
              ing loop.

       cd [ arg ]
       cd  old new
              This command can be in either of two forms.  In the  first  form
              it changes the current directory to arg.  If arg is - the direc‐
              tory  is changed to the previous directory.  The shell parameter
              HOME is the default arg.  The parameter PWD is set to  the  cur‐
              rent  directory.   The shell parameter CDPATH defines the search
              path for the directory containing  arg.   Alternative  directory
              names  are separated by a colon (:).  The default path is <null>
              (specifying the current directory).  Note that the  current  di‐
              rectory is specified by a null path name, which can appear imme‐
              diately  after  the  equal  sign or between the colon delimiters
              anywhere else in the path list.  If arg begins with a / then the
              search path is not used.  Otherwise, each directory in the  path
              is searched for arg.
              The  second form of cd substitutes the string new for the string
              old in the current directory name, PWD and tries  to  change  to
              this new directory.
              The cd command may not be executed by rsh.

       eval [ arg ... ]
              The  arguments  are read as input to the shell and the resulting
              command(s) executed.

       exec [ arg ... ]
              Parameter assignments remain in effect after  the  command  com‐
              pletes.  If arg is given, the command specified by the arguments
              is  executed  in  place  of  this  shell  without creating a new
              process.  Input/output arguments may appear and affect the  cur‐
              rent process.  If no arguments are given the effect of this com‐
              mand  is  to  modify  file  descriptors as prescribed by the in‐
              put/output redirection list.  In this case, any file  descriptor
              numbers  greater  than 2 that are opened with this mechanism are
              closed when invoking another program.

       exit [ n ]
              Causes the shell to exit with the exit status  specified  by  n.
              If n is omitted then the exit status is that of the last command
              executed.   An end-of-file will also cause the shell to exit ex‐
              cept for a shell which has the ignoreeof option (See set  below)
              turned on.

       export [ name ... ]
              The  given names are marked for automatic export to the environ‐
              ment of subsequently-executed commands.

       fc [ -e ename  ] [ -nlr ] [ first ] [ last ]
       fc -e -  [ old=new ] [ command ]
              In the first form, a range of commands from first to last is se‐
              lected from the last HISTSIZE commands that were  typed  at  the
              terminal.   The  arguments  first and last may be specified as a
              number or as a string.  A string is used to locate the most  re‐
              cent  command starting with the given string.  A negative number
              is used as an offset to the current command number.  If the flag
              -l, is selected, the commands are  listed  on  standard  output.
              Otherwise,  the  editor  program ename is invoked on a file con‐
              taining these keyboard commands.  If ename is not supplied, then
              the value of the parameter FCEDIT (default /bin/ed) is  used  as
              the  editor.  When editing is complete, the edited command(s) is
              executed.  last is not specified then it will be set  to  first.
              If  first  is  not specified the default is the previous command
              for editing and -16 for listing.  The flag -r reverses the order
              of the commands and the flag -n suppresses command numbers  when
              listing.   In  the  second form the command is re-executed after
              the substitution old=new is performed.

       fg [ %job ]
              This command is only built-in on systems that support  job  con‐
              trol.  If job is specified it brings it to the foreground.  Oth‐
              erwise, the current job is brought into the foreground.

       jobs [ -l ]
              Lists  the  active jobs; given the -l options lists process id's
              in addition to the normal information.

       kill [ -sig ] process ...
              Sends either the TERM (terminate) signal or the specified signal
              to the specified jobs or processes.  Signals are either given by
              number or by names (as given in /usr/include/signal.h,  stripped
              of  the  prefix  ‘‘SIG'').   The signal names are listed by kill
              -l'.  There is no default, saying just ‘kill' 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  will  be
              sent  a  CONT  (continue) signal if it is stopped.  The argument
              process can be either a process id or a job.

       let  arg ...
              Each arg is an arithmetic expression to be evaluated.  All  cal‐
              culations are done as long integers and no check for overflow is
              performed.   Expressions consist of constants, named parameters,
              and operators.  The following set of operators, listed in  order
              of decreasing precedence, have been implemented:
              -      unary minus
              !      logical negation
              *  /  %
                     multiplication, division, remainder
              +  -   addition, subtraction
              <=  >=  <  >
                     comparison
              ==  !=
                     equality  inequality
              =      arithmetic replacement
                     Sub-expressions in parentheses () are evaluated first and
                     can  be used to override the above precedence rules.  The
                     evaluation within a precedence group  is  from  right  to
                     left  for  the  = operator and from left to right for the
                     others.
                     A parameter name must be a valid identifier.  When a  pa‐
                     rameter is encountered, the value associated with the pa‐
                     rameter name is substituted and expression evaluation re‐
                     sumes.  Up to nine levels of recursion are permitted.
                     The  return code is 0 if the value of the last expression
                     is non-zero, and 1 otherwise.

       newgrp [ arg ... ]
              Equivalent to exec newgrp arg ....

       print [ -Rnprsu[n ]  ] [ arg ... ]
              The shell output mechanism.  With no flags or with flag  -,  the
              arguments  are  printed  on  standard  output  as  described  by
              echo(1).  In raw mode, -R or -r, the escape conventions of  echo
              are  ignored.  The -R option will print all subsequent arguments
              and options other than -n.  The -p option causes  the  arguments
              to  be  written onto the pipe of the process spawned with ⎪& in‐
              stead of standard output.  The -s option causes the arguments to
              be written onto the history file  instead  of  standard  output.
              The  -u  flag can be used to specify a one digit file descriptor
              unit number n on which the output will be placed.   The  default
              is  1.  If the flag -n is used, no new-line is added to the out‐
              put.

       read [ -prsu[ n ] ] [ name?prompt ] [ name ... ]
              The shell input mechanism.  One line is read and  is  broken  up
              into  words  using  the characters in IFS as separators.  In raw
              mode, -r, a \ at the end of a line does not signify line contin‐
              uation.  The first word is assigned to the first name, the  sec‐
              ond  word to the second name, etc., with leftover words assigned
              to the last name.  The -p option causes the  input  line  to  be
              taken  from the input pipe of a process spawned by the shell us‐
              ing ⎪&.  If the -s fag is present, the input will be saved as  a
              command in the history file.  The flag -u can be used to specify
              a  one  digit  file  descriptor unit to read from.  The file de‐
              scriptor can be opened with the exec special command.   The  de‐
              fault value of n is 0.  If name is omitted then REPLY is used as
              the default name.  The return code is 0 unless an end-of-file is
              encountered.   An  end-of-file with the -p option causes cleanup
              for this process so that another can be spawned.  If  the  first
              argument  contains  a ?, the remainder of this word is used as a
              prompt when the shell is interactive.  If  the  given  file  de‐
              scriptor  is  open for writing and is a terminal device then the
              prompt is placed on this unit.  Otherwise the prompt  is  issued
              on  file  descriptor  2.  The return code is 0 unless an end-of-
              file is encountered.

       readonly [ name ... ]
              The given names are marked readonly and these  names  cannot  be
              changed by subsequent assignment.

       return [ n ]
              Causes  a  shell  function to return to the invoking script with
              the return status specified by n.  If n is omitted then the  re‐
              turn  status is that of the last command executed.  If return is
              invoked while not in a function then it is the same as an exit.

       set [ -aefhkmnostuvx ] [ -o option ... ] [ arg ... ]
              The flags for this command have meaning as follows:
              -a      All subsequent parameters that are defined are automati‐
                      cally exported.
              -e      If the shell is non-interactive and if a command  fails,
                      execute  the  ERR  trap,  if  set, and exit immediately.
                      This mode is disabled while reading profiles.
              -f      Disables file name generation.
              -h      Each command whose  name  is  an  identifier  becomes  a
                      tracked alias when first encountered.
              -k      All parameter assignment arguments are placed in the en‐
                      vironment for a command, not just those that precede the
                      command name.
              -m      Background jobs will run in a separate process group and
                      a  line  will print upon completion.  The exit status of
                      background jobs is reported in a completion message.  On
                      systems with job control, this flag is turned  on  auto‐
                      matically for interactive shells.
              -n      Read commands but do not execute them.
              -o      The  following  argument can be one of the following op‐
                      tion names:
                      allexport
                              Same as -a.
                      errexit Same as -e.
                      emacs   Puts you in an emacs style  in-line  editor  for
                              command entry.
                      gmacs   Puts  you  in  a  gmacs style in-line editor for
                              command entry.
                      ignoreeof
                              The shell will not  exit  on  end-of-file.   The
                              command exit must be used.
                      keyword Same as -k.
                      markdirs
                              All  directory  names  resulting  from file name
                              generation have a trailing / appended.
                      monitor Same as -m.
                      noexec  Same as -n.
                      noglob  Same as -f.
                      nounset Same as -u.
                      verbose Same as -v.
                      trackall
                              Same as -h.
                      vi      Puts you in insert mode of a  vi  style  in-line
                              editor until you hit escape character 033.  This
                              puts you in move mode.  A return sends the line.
                      viraw   Each character is processed as it is typed in vi
                              mode.
                      xtrace  Same as -x.
                      If no option name is supplied then the current option
                      settings are printed.
              -s      Sort the positional parameters.
              -t      Exit after reading and executing one command.
              -u      Treat unset parameters as an error when substituting.
              -v      Print shell input lines as they are read.
              -x      Print commands and their arguments as they are executed.
              -       Turns  off -x and -v flags and stops examining arguments
                      for flags.
              --      Do not change any of the flags; useful in setting $1  to
                      a  value  beginning with -.  If no arguments follow this
                      flag then the positional parameters are unset.
                      Using + rather than - causes these flags  to  be  turned
                      off.   These  flags  can also be used upon invocation of
                      the shell.  The current set of flags may be found in $-.
                      The remaining arguments are  positional  parameters  and
                      are assigned, in order, to $1, $2, ....  If no arguments
                      are  given  then  the values of all names are printed on
                      the standard output.

       shift [ n ]
              The positional parameters from $n+1 ...  are renamed  $1  ...  ,
              default  n  is 1.  The parameter n can be any arithmetic expres‐
              sion that evaluates to a non-negative number less than or  equal
              to $#.

       test [ expr ]
              Evaluate conditional expression expr.  See test(1) for usage and
              description.   The  arithmetic  comparison operators are not re‐
              stricted to integers.  They  allow  any  arithmetic  expression.
              Four additional primitive expressions are allowed:
              -L file
                     True if file is a symbolic link.
              file1 -nt file2
                     True if file1 is newer than file2.
              file1 -ot file2
                     True if file1 is older than file2.
              file1 -ef file2
                     True  if  file1  has the same device and i-node number as
                     file2.

       times
              Print the accumulated user and system times for  the  shell  and
              for processes run from the shell.

       trap [ arg ] [ sig ] ...
              arg is a command to be read and executed when the shell receives
              signal(s)  sig.  (Note that arg is scanned once when the trap is
              set and once when the trap is taken.)  Each sig can be given  as
              a  number  or as the name of the signal.  Trap commands are exe‐
              cuted in order of signal number.  Any attempt to set a trap on a
              signal that was ignored on entry to the current shell  is  inef‐
              fective.   An  attempt  to trap on signal 11 (memory fault) pro‐
              duces an error.  If arg is omitted or is -, then all trap(s) sig
              are reset to their original values.  If arg is the  null  string
              then  this signal is ignored by the shell and by the commands it
              invokes.  If sig is ERR then arg will  be  executed  whenever  a
              command has a non-zero exit code.  This trap is not inherited by
              functions.   If  sig is 0 or EXIT and the trap statement is exe‐
              cuted inside the body of a function, then the command arg is ex‐
              ecuted after the function completes.  If sig is 0 or EXIT for  a
              trap  set  outside any function then the command arg is executed
              on exit from the shell.  The  trap  command  with  no  arguments
              prints a list of commands associated with each signal number.

       typeset [ -FLRZefilprtux[n ] [ name[ =value ]  ]  ... ]
              Parameter  assignments  remain  in effect after the command com‐
              pletes.  When invoked inside a function, a new instance  of  the
              parameter name is created.  The parameter value and type are re‐
              stored  when  the function completes.  The following list of at‐
              tributes may be specified:
              -F     This flag provides UNIX to host-name file mapping on non-
                     UNIX machines.
              -L     Left justify and remove leading blanks from value.  If  n
                     is  non-zero it defines the width of the field, otherwise
                     it is determined by the width of the value of  first  as‐
                     signment.   When  the  parameter  is  assigned  to, it is
                     filled on the right with blanks or truncated,  if  neces‐
                     sary,   to fit into the field.  Leading zeros are removed
                     if the -Z flag is also set.  The -R flag is turned off.
              -R     Right justify and fill with leading blanks.  If n is non-
                     zero it defines the width of the field, otherwise  it  is
                     determined by the width of the value of first assignment.
                     The  field  is  left filled with blanks or truncated from
                     the end if the parameter is reassigned.  The  L  flag  is
                     turned off.
              -Z     Right  justify  and  fill with leading zeros if the first
                     non-blank character is a digit and the -L  flag  has  not
                     been  set.   If n is non-zero it defines the width of the
                     field, otherwise it is determined by  the  width  of  the
                     value of first assignment.
              -e     Tag  the  parameter as having an error.  This tag is cur‐
                     rently unused by the shell and can be set or  cleared  by
                     the user.
              -f     The  names  refer to function names rather than parameter
                     names.  No assignments can be made  and  the  only  other
                     valid flag is -x.
              -i     Parameter  is  an integer.  This makes arithmetic faster.
                     If n is non-zero it defines the output  arithmetic  base,
                     otherwise  the  first  assignment  determines  the output
                     base.
              -l     All upper-case characters converted to  lower-case.   The
                     upper-case flag, -u is turned off.
              -p     The  output of this command, if any,  is written onto the
                     two-way pipe
              -r     The given names are marked readonly and these names  can‐
                     not be changed by subsequent assignment.
              -t     Tags  the  named parameters.  Tags are user definable and
                     have no special meaning to the shell.
              -u     All lower-case characters  are  converted  to  upper-case
                     characters.  The lower-case flag, -l is turned off.
              -x     The  given  names  are marked for automatic export to the
                     environment of subsequently-executed commands.
                     Using + rather than - causes these  flags  to  be  turned
                     off.  If no name arguments are given but flags are speci‐
                     fied, a list of names (and optionally the values ) of the
                     parameters which have these flags set is printed.  (Using
                     +  rather  than - keeps the values to be printed.)  If no
                     names and flags are given, the names  and  attributes  of
                     all parameters are printed.

       ulimit [ -cdfmpt ] [ n ]
              -c     imposes  a  size  limit  of  n blocks on the size of core
                     dumps (BSD only).
              -d     imposes a size limit of n blocks on the size of the  data
                     area (BSD only).
              -f     imposes  a  size  limit  of  n blocks on files written by
                     child processes (files of any size may be read).
              -m     imposes a soft limit of n blocks on the size of  physical
                     memory (BSD only).
              -p     changes the pipe size to n (UNIX/RT only).
              -t     imposes  a  time  limit  of  n seconds to be used by each
                     process (BSD only).
                     If no option is given, -f is assumed.  If n is not  given
                     the current limit is printed.

       umask [ nnn ]
              The  user  file-creation  mask is set to nnn (see umask(2)).  If
              nnn is omitted, the current value of the mask is printed.

       unalias name ...
              The parameters given by the list of names are removed  from  the
              alias list.

       unset [ -f ] name ...
              The parameters given by the list of names are unassigned, i. e.,
              their values and attributes are erased.  Readonly variables can‐
              not  be unset.  If the flag, -f, is set, then the names refer to
              function names.

       wait [ n ]
              Wait for the specified process and report its  termination  sta‐
              tus.   If  n  is  not  given  then  all  currently  active child
              processes are waited for.  The return code from this command  is
              that of the process waited for.

       whence [ -v ] name ...
              For each name, indicate how it would be interpreted if used as a
              command name.
              The flag, -v, produces a more verbose report.

   Invocation.
       If the shell is invoked by exec(2), and the first character of argument
       zero  ($0) is -, then the shell is assumed to be a login shell and com‐
       mands are read from /etc/profile and then from either .profile  in  the
       current directory or $HOME/.profile, if either file exists.  Next, com‐
       mands are read from the file named by performing parameter substitution
       on the value of the environment parameter ENV if the file exists.  Com‐
       mands  are then read as described below; the following flags are inter‐
       preted by the shell when it is invoked:
       -c string If the -c flag is present then commands are read from string.
       -s        If the -s flag is present or if no arguments remain then com‐
                 mands are read from the standard input.  Shell output, except
                 for the output of some of the Special commands listed  above,
                 is written to file descriptor 2.
       -i        If  the  -i  flag is present or if the shell input and output
                 are attached to a terminal (as told  by  gtty(2))  then  this
                 shell  is interactive.  In this case TERMINATE is ignored (so
                 that kill 0 does not kill an interactive shell) and INTERRUPT
                 is caught and ignored (so that wait  is  interruptible).   In
                 all cases, QUIT is ignored by the shell.
       -r        If the -r flag is present the shell is a restricted shell.
                 The remaining flags and arguments are described under the set
                 command above.

   Rsh Only.
       Rsh  is used to set up login names and execution environments whose ca‐
       pabilities are more controlled than those of the standard  shell.   The
       actions  of rsh are identical to those of sh, except that the following
       are disallowed:
              changing directory (see cd(1)),
              setting the value of SHELL or PATH,
              specifying path or command names containing /,
              redirecting output (> and >>).
       The restrictions above are enforced after .profile and  the  ENV  files
       are interpreted.
       When a command to be executed is found to be a shell procedure, rsh in‐
       vokes  sh  to  execute it.  Thus, it is possible to provide to the end-
       user shell procedures that have access to the full power of  the  stan‐
       dard  shell, while imposing a limited menu of commands; this scheme as‐
       sumes that the end-user does not have write and execute permissions  in
       the same directory.
       The  net  effect  of these rules is that the writer of the .profile has
       complete control over user actions, by performing guaranteed setup  ac‐
       tions  and  leaving  the user in an appropriate directory (probably not
       the login directory).
       The system administrator often sets up a directory of  commands  (i.e.,
       /usr/rbin)  that  can be safely invoked by rsh.  Some systems also pro‐
       vide a restricted editor red.

EXIT STATUS
       Errors detected by the shell, such as syntax errors, cause the shell to
       return a non-zero exit status.  If the shell is being used non-interac‐
       tively then execution of the shell file is abandoned.   Otherwise,  the
       shell  returns  the  exit status of the last command executed (see also
       the exit command above).

FILES
       /etc/passwd
       /etc/profile
       $HOME/.profile
       /tmp/sh∗
       /dev/null

SEE ALSO
       cat(1), cd(1), echo(1), emacs(1), env(1), gmacs(1), newgrp(1), test(1),
       umask(1), vi(1), dup(2), exec(2), fork(2), gtty(2), pipe(2), signal(2),
       umask(2), ulimit(2),  wait(2),  rand(3),  a.out(5),  profile(5),  envi‐
       ron(7).

CAVEATS
       If  a  command which is a tracked alias is executed, and then a command
       with the same name is installed in a directory in the search  path  be‐
       fore the directory where the original command was found, the shell will
       continue  to exec the original command.  Use the -t option of the alias
       command to correct this situation
       If you move the current directory or one above it, pwd may not give the
       correct response.  Use the cd command with a full path name to  correct
       this situation.
       Some very old shell scripts contain a ^ as a synonym for the pipe char‐
       acter ⎪.

                                                                         SH(1)