Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ ksh(1) — NEWS-os 5.0.1

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

cat(1)

cd(1)

chmod(1)

cut(1)

echo(1)

env(1)

paste(1)

stty(1)

test(1)

umask(1)

vi(1)

dup(2)

exec(2)

fork(2)

ioctl(2)

lseek(2)

pipe(2)

nal(2)

umask(2)

ulimit(2)

wait(2)

rand(3C)

ksh(1)

newgrp(1M)

a.out(4)

profile(4)

environ(4)



ksh(1)                   USER COMMANDS                     ksh(1)



NAME
     ksh, rksh - KornShell,  a  standard/restricted  command  and
     programming language

SYNOPSIS
     ksh [ +aefhikmnprstuvx ] [ +o option ] ... [ -c string  ]  [
     arg ... ]
     rksh [ +aefhikmnprstuvx ] [ +o option ] ... [ -c string ]  [
     arg ... ]

DESCRIPTION
     Ksh is a command and programming language that executes com-
     mands  read from a terminal or a file.  Rksh is a restricted
     version of the command interpreter ksh; it is used to set up
     login  names  and  execution environments 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.  Identifiers are used as names for functions and
     variables.   A word is a sequence of characters separated by
     one or more non-quoted metacharacters.

     A command is a sequence of characters in the syntax  of  the
     shell  language.   The  shell reads each command and carries
     out the  desired  action  either  directly  or  by  invoking
     separate  utilities.  A special command is a command that is
     carried out by the shell without creating  a  separate  pro-
     cess.  Except for documented side effects, most special com-
     mands can be implemented as separate utilities.

  Commands.
     A simple-command is a  sequence  of  blank  separated  words
     which  may  be  preceded  by a variable 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 invoked  com-
     mand.   The  command  name  is  passed  as  argument  0 [see
     exec(2)].  The value of a simple-command is its exit  status
     if  it terminates normally, or (octal) 200+status if it ter-
     minates 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



                                                                1





ksh(1)                   USER COMMANDS                     ksh(1)



     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 output of the  spawned
     command  can be written to and read from by the parent Shell
     using the -p option of the special commands read  and  print
     described later.  The symbol && (||) causes the list follow-
     ing it to be executed only if the preceding pipeline returns
     a  zero  (non-zero) value.  An arbitrary number of new-lines
     may appear in a list, instead of a semicolon, to  delimit  a
     command.

     A command is either a simple-command or one of  the  follow-
     ing.   Unless otherwise stated, the value returned by a com-
     mand is that of the last simple-command executed in the com-
     mand.

     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 omitted, then the for command executes the
          do  list once for each positional parameter that is set
          (see Parameter  Substitution  below).   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  posi-
          tional  parameters are used instead (see Parameter Sub-
          stitution 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  parameter identifier is set to the word
          corresponding to this number.  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 variable REPLY.  The list is executed  for  each
          selection until a break or end-of-file is encountered.




                                                                2





ksh(1)                   USER COMMANDS                     ksh(1)



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

     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.   Otherwise, 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 exe-
          cuted.  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  ter-
          minates.   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 adjacent open parentheses are needed for nesting, a
          space must be inserted to avoid  arithmetic  evaluation
          as described below.

     { list;}
          list is simply executed.  The { must be followed  by  a
          space.   Note that unlike the metacharacters ( and ), {
          and } are reserved words  and  must  be  typed  at  the
          beginning  of a line or after a ; in order to be recog-
          nized.

     [[expression]]
          Evaluates expression and returns  a  zero  exit  status
          when  expression  is true.  See Conditional Expressions
          below, for a description of expression.

     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).  The { must be
          followed by a space.

     time pipeline
          The pipeline is executed and the elapsed time  as  well



                                                                3





ksh(1)                   USER COMMANDS                     ksh(1)



          as  the  user  and  system time are printed on standard
          error.

     The following reserved words  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  {  }
     function select time [[ ]]

  Comments.
     A word beginning with # causes that word and all the follow-
     ing characters 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.  An alias
     name consists of any number of  characters  excluding  meta-
     characters,  quoting  characters, file expansion characters,
     parameter and command substitution characters  and  =.   The
     replacement  string  can  contain  any  valid  Shell  script
     including the metacharacters listed above.  The  first  word
     of  each  command  in the replaced text, other than any that
     are in the process of being replaced,  will  be  tested  for
     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
     special builtin commands but cannot be used to redefine  the
     reserved  words  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 scripts invoked by name, but  must  be  reini-
     tialized  for separate invocations of the Shell (see Invoca-
     tion below).

     Aliasing is performed when scripts are read, not while  they
     are  executed.   Therefore,  for an alias to take effect the
     alias definition command has to be executed before the  com-
     mand 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 automatically 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  corresponding  command  is  looked up 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  com-
     piled  into  the  shell.   The  -h option of the set command
     makes each referenced command name into a tracked alias.





                                                                4





ksh(1)                   USER COMMANDS                     ksh(1)



     The following exported aliases are compiled into  the  shell
     but can be unset or redefined:
                         autoload='typeset -fu'
                         false='let 0'
                         functions='typeset -f'
                         hash='alias -t'
                         history='fc -l'
                         integer='typeset -i'
                         nohup='nohup '
                         r='fc -e -'
                         true=':'
                         type='whence -v'

  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  login  direc-
     tory  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 $HOME.  A ~ followed by a + or - is replaced by $PWD  and
     $OLDPWD respectively.

     In addition, tilde substitution is attempted when the  value
     of a variable assignment begins with a ~.

  Command Substitution.
     The standard output from a command enclosed  in  parentheses
     preceded by a dollar sign ( $() ) or a pair of grave accents
     (``) may be used as part or all of  a  word;  trailing  new-
     lines are removed.  In the second (archaic) form, the string
     between the quotes is processed for special quoting  charac-
     ters  before  the  command  is executed (see Quoting below).
     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 pro-
     cess.

     An arithmetic expression enclosed in double parentheses  and
     preceded  by  a dollar sign [$(())] is replaced by the value
     of the arithmetic expression within the double parentheses.

  Parameter Substitution.
     A parameter is an identifier, one or more digits, or any  of
     the  characters  *,  @,  #,  ?,  -, $, and !.  A variable (a
     parameter denoted by an identifier) has a value and zero  or
     more  attributes.   Variables  can  be  assigned  values and
     attributes by using the typeset special command.  The attri-
     butes  supported  by  the Shell are described later with the



                                                                5





ksh(1)                   USER COMMANDS                     ksh(1)



     typeset special command.  Exported  parameters  pass  values
     and attributes to the environment.

     The shell supports a  one-dimensional  array  facility.   An
     element  of  an array variable is referenced by a subscript.
     A subscript is denoted by a [,  followed  by  an  arithmetic
     expression  (see  Arithmetic Evaluation below) followed by a
     ].  To assign values to an array, use set -A name  value ...
     .   The  value  of  all subscripts must be in the range of 0
     through 1023.  Arrays need not be declared.   Any  reference
     to  a  variable with a valid subscript is legal and an array
     will be created if necessary.  Referencing an array  without
     a subscript is equivalent to referencing the element zero.

     The value of a variable 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  parame-
     ters.
     ${parameter}
          The shell reads all  the  characters  from  ${  to  the
          matching } as part of the same word even if it contains
          braces or metacharacters.  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 variable is subscripted.  If parameter is one or
          more digits then it is a positional parameter.  A posi-
          tional  parameter  of  more  than  one  digit  must  be
          enclosed  in  braces.  If parameter is * or @, then all
          the positional parameters, starting with $1,  are  sub-
          stituted  (separated  by  a field separator character).
          If an array identifier with subscript * or @  is  used,
          then  the value for each of the elements is substituted
          (separated by a field separator character).
     ${#parameter}
          If parameter is * or @, the number of positional param-
          eters  is  substituted.   Otherwise,  the length of the
          value of the parameter is substituted.
     ${#identifier[*]}
          The number of elements in the array identifier is  sub-
          stituted.
     ${parameter:-word}
          If parameter is set and is non-null then substitute its
          value; otherwise substitute word.
     ${parameter:=word}



                                                                6





ksh(1)                   USER COMMANDS                     ksh(1)



          If parameter is not set or is null then set it to word;
          the  value of the parameter is then substituted.  Posi-
          tional parameters 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 omitted then a standard message is printed.
     ${parameter:+word}
          If parameter is set and  is  non-null  then  substitute
          word; otherwise substitute nothing.
     ${parameter#pattern}
     ${parameter##pattern}
          If the Shell pattern matches the beginning of the value
          of  parameter,  then  the value of this substitution is
          the value of the parameter  with  the  matched  portion
          deleted;  otherwise the value of this parameter is sub-
          stituted.  In the first form the smallest matching pat-
          tern  is  deleted  and  in  the second 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 this substitution is the
          value of the parameter with the matched  part  deleted;
          otherwise  substitute  the  value of parameter.  In the
          first form the smallest matching pattern is deleted and
          in  the  second  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 exam-
     ple, 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.
              Initially, the value  is an absolute pathname  of
               the  shell  or  script being executed as passed in
               the environment.  Subsequently it is assigned  the
               last  argument  of  the  previous  command.   This
               parameter is not set for commands which are  asyn-
               chronous.  This parameter is also used to hold the



                                                                7





ksh(1)                   USER COMMANDS                     ksh(1)



               name of the matching MAIL file when  checking  for
               mail.
          !    The process number of the last background  command
               invoked.
          ERRNO
               The value of errno as set  by  the  most  recently
               failed  system  call.  This value is system depen-
               dent and is intended for debugging purposes.
          LINENO
               The line number of the  current  line  within  the
               script or function being executed.
          OLDPWD
               The previous working directory set by the cd  com-
               mand.
          OPTARG
               The value of the last option argument processed by
               the getopts special command.
          OPTIND
               The index of the last option argument processed by
               the getopts special command.
          PPID The process number of the parent of the shell.
          PWD  The present working directory set by the  cd  com-
               mand.
          RANDOM
               Each time this variable is  referenced,  a  random
               integer,   uniformly  distributed  between  0  and
               32767,  is  generated.   The  sequence  of  random
               numbers  can be initialized by assigning a numeric
               value to RANDOM.
          REPLY
               This variable is set by the select  statement  and
               by  the read special command when no arguments are
               supplied.
          SECONDS
               Each time this variable is referenced, the  number
               of seconds since shell invocation is returned.  If
               this variable is assigned a value, then the  value
               returned upon reference will be the value that was
               assigned plus the  number  of  seconds  since  the
               assignment.

     The following variables 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 vi  and  the
               VISUAL variable is not set, then the corresponding
               option (see Special Command  set  below)  will  be



                                                                8





ksh(1)                   USER COMMANDS                     ksh(1)



               turned on.
          ENV  If this variable is set, then parameter  substitu-
               tion  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.
          FPATH
               The search path for  function  definitions.   This
               path  is  searched  when  a  function  with the -u
               attribute is referenced and when a command is  not
               found.  If an executable file is found, then it is
               read and executed in the current environment.
          IFS  Internal field separators,  normally  space,  tab,
               and  new-line  that  is  used  to separate command
               words which result from command or parameter  sub-
               stitution  and  for separating words with the spe-
               cial command read.  The first character of the IFS
               variable  is  used  to  separate arguments for the
               "$*" substitution (see Quoting below).
          HISTFILE
               If this variable 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 below).
          HISTSIZE
               If this variable is set when the shell is invoked,
               then  the  number  of  previously entered commands
               that are accessible 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.
          LINES
               If this variable is set,  the  value  is  used  to
               determine  the  column  length for printing select
               lists.  Select lists will print  vertically  until
               about two-thirds of LINES lines are filled.
          MAIL If this variable is set to the name of a mail file
               and  the  MAILPATH  variable  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  variables.   The  default  value  is 600
               seconds.  When the time has elapsed the shell will
               check before issuing the next prompt.
          MAILPATH
               A colon ( :  ) separated list of file  names.   If



                                                                9





ksh(1)                   USER COMMANDS                     ksh(1)



               this  variable  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 substitution with the vari-
               able,  $ 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 rksh (except in .profile).
          PS1  The value of this variable is expanded for parame-
               ter  substitution  to  define  the  primary prompt
               string which by default is ``$ ''.  The  character
               !  in the primary prompt string is replaced by the
               command number (see Command Re-entry below).
          PS2  Secondary prompt string, by default ``> ''.
          PS3  Selection prompt string used within a select loop,
               by default ``#? ''.
          PS4  The value of this variable is expanded for parame-
               ter substitution and precedes each line of an exe-
               cution trace.  If  omitted,  the  execution  trace
               prompt is ``+ ''.
          SHELL
               The pathname of the shell is kept in the  environ-
               ment.   At  invocation,  if  the  basename of this
               variable matches the pattern *r*sh, then the shell
               becomes restricted.
          TMOUT
               If set to a value greater  than  zero,  the  shell
               will  terminate if a command is not entered within
               the prescribed number of seconds after issuing the
               PS1  prompt.  (Note that the shell can be compiled
               with a maximum bound for this value  which  cannot
               be exceeded.)
          VISUAL
               If the value of this variable ends in 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.  HOME, MAIL and SHELL are 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.  Explicit null arguments
     ("" or '') are retained.   Implicit  null  arguments  (those
     resulting from parameters that have no values) are removed.




                                                               10





ksh(1)                   USER COMMANDS                     ksh(1)



  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 characters appears then the word is regarded
     as  a  pattern.  The word is replaced with lexicographically
     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 specially.

          *    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 following the opening "[ "
               is a  "!"  then  any  character  not  enclosed  is
               matched.  A - can be included in the character set
               by putting it as the first or last character.
     A pattern-list is a list of one or more  patterns  separated
     from  each other with a |.  Composite patterns can be formed
     with one or more of the following:
          ?(pattern-list)
               Optionally matches any one of the given patterns.
          *(pattern-list)
               Matches zero or more occurrences of the given pat-
               terns.
          +(pattern-list)
               Matches one or more occurrences of the given  pat-
               terns.
          @(pattern-list)
               Matches exactly one of the given patterns.
          !(pattern-list)
               Matches anything, except one  of  the  given  pat-
               terns.

  Quoting.
     Each of the metacharacters  listed  above  (see  Definitions
     above)  has a special meaning to the shell and causes termi-
     nation 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  removed.   All  characters  enclosed
     between  a  pair  of single quote marks (''), are quoted.  A
     single quote cannot appear  within  single  quotes.   Inside
     double  quote marks (""), parameter and command substitution
     occurs and \ quotes the characters \,  `,  ",  and  $.   The
     meaning  of  $*  and $@ is identical when not quoted or when
     used as a variable assignment  value  or  as  a  file  name.



                                                               11





ksh(1)                   USER COMMANDS                     ksh(1)



     However, when used as a command argument, "$*" is equivalent
     to "$1d$2d...", where d is the first character  of  the  IFS
     variable,   whereas  "$@"  is  equivalent  to  "$1"d"$2"d...
     Inside grave quote marks (``) \ quotes the characters \,  `,
     and  $.  If the grave quotes occur within double quotes then
     \ also quotes the character ".

     The special meaning of reserved  words  or  aliases  can  be
     removed  by quoting any character of the reserved word.  The
     recognition of  function  names  or  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.  Constants 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 arithmetic expression uses the same  syntax,  precedence,
     and  associativity of expression of the C language.  All the
     integral operators, other than ++, --, ?:, and  ,  are  sup-
     ported.   Variables  can  be  referenced  by  name within an
     arithmetic expression without using the parameter  substitu-
     tion  syntax.   When  a variable is referenced, its value is
     evaluated as an arithmetic expression.

     An internal integer representation  of  a  variable  can  be
     specified with the -i option of the typeset special command.
     Arithmetic evaluation is performed  on  the  value  of  each
     assignment  to  a variable with the -i attribute.  If you do
     not specify an arithmetic base, the first assignment to  the
     variable  determines the arithmetic base.  This base is 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 pre-
     cisely, ((...))  is equivalent to let "...".

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

  Conditional Expressions.
     A conditional expression is used with the [[  compound  com-
     mand  to  test  attributes  of files and to compare strings.



                                                               12





ksh(1)                   USER COMMANDS                     ksh(1)



     Word splitting and file name generation are not performed on
     the  words  between  [[ and ]].  Each expression can be con-
     structed from one or more of the following unary  or  binary
     expressions:
     -a file   True, if file exists.
     -b file   True, if file exists and is a block special file.
     -c file   True, if file exists and is  a  character  special
               file.
     -d file   True, if file exists and is a directory.
     -f file   True, if file exists and is an ordinary file.
     -g file   True, if file exists and is  has  its  setgid  bit
               set.
     -k file   True, if file exists and is  has  its  sticky  bit
               set.
     -n string True, if length of string is non-zero.
     -o option True, if option named option is on.
     -p file   True, if file exists and is a fifo special file or
               a pipe.
     -r file   True, if file exists and is  readable  by  current
               process.
     -s file   True, if file exists and  has  size  greater  than
               zero.
     -t fildes True, if file descriptor number fildes is open and
               associated with a terminal device.
     -u file   True, if file exists and is  has  its  setuid  bit
               set.
     -w file   True, if file exists and is  writable  by  current
               process.
     -x file   True, if file exists and is executable by  current
               process.   If file exists and is a directory, then
               the current process has permission  to  search  in
               the directory.
     -z string True, if length of string is zero.
     -L file   True, if file exists and is a symbolic link.
     -O file   True, if file exists and is owned by the effective
               user id of this process.
     -G file   True, if file exists and  its  group  matches  the
               effective group id of this process.
     -S file   True, if file exists and is a socket.
     file1 -nt file2
               True, if file1 exists and is newer than file2.
     file1 -ot file2
               True, if file1 exists and is older than file2.
     file1 -ef file2
               True, if file1 and file2 exist and  refer  to  the
               same file.
     string = pattern
               True, if string matches pattern.
     string != pattern
               True, if string does not match pattern.
     string1 < string2
               True, if string1 comes  before  string2  based  on



                                                               13





ksh(1)                   USER COMMANDS                     ksh(1)



               ASCII value of their characters.
     string1 > string2
               True, if string1  comes  after  string2  based  on
               ASCII value of their characters.
     exp1 -eq exp2
               True, if exp1 is equal to exp2.
     exp1 -ne exp2
               True, if exp1 is not equal to exp2.
     exp1 -lt exp2
               True, if exp1 is less than exp2.
     exp1 -gt exp2
               True, if exp1 is greater than exp2.
     exp1 -le exp2
               True, if exp1 is less than or equal to exp2.
     exp1 -ge exp2
               True, if exp1 is greater than or equal to exp2.

     In each of the above expressions, if file  is  of  the  form
     /dev/fd/n,  where  n is an integer, then the test applied to
     the open file whose descriptor number is n.

     A compound expression can be constructed from  these  primi-
     tives  by  using  any of the following, listed in decreasing
     order of precedence.
     (expression)
          True, if expression is true.   Used  to  group  expres-
          sions.
     ! expression
          True if expression is false.
     expression1 && expression2
          True, if expression1 and expression2 are both true.
     expression1 || expression2
          True, if either expression1 or expression2 is true.

  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  pat-
     tern  matches  a single file and blank interpretation is not
     performed.

     <word         Use file word as standard input (file descrip-
                   tor 0).

     >word         Use  file  word  as  standard   output   (file
                   descriptor  1).   If  the  file does not exist
                   then it is created.  If the file exists, is  a
                   regular  file, and the noclobber option is on,



                                                               14





ksh(1)                   USER COMMANDS                     ksh(1)



                   this causes an error; otherwise, it  is  trun-
                   cated to zero length.

     >|word        Sames as  >,  except  that  it  overrides  the
                   noclobber option.

     >>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        Open file word  for  reading  and  writing  as
                   standard input.

     <<[-]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 interpre-
                   tation  is  placed  upon the characters of the
                   document;  otherwise,  parameter  and  command
                   substitution occurs, \new-line is ignored, and
                   \ must be used to quote the characters  \,  $,
                   `,  and  the first character 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 >&-.

     <&p           The input from  the  co-process  is  moved  to
                   standard input.

     >&p           The output to the co-process is moved to stan-
                   dard output.

     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.





                                                               15





ksh(1)                   USER COMMANDS                     ksh(1)



     The order in which redirections are  specified  is  signifi-
     cant.   The shell evaluates each redirection in terms of the
     (file descriptor, file) association at the time  of  evalua-
     tion.  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  redirec-
     tions  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  execu-
     tion  of  a  command  contains  the  file descriptors of the
     invoking shell as modified by input/output specifications.

  Environment.
     The environment [see environ(5)] 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 variable for each
     name found, giving it the corresponding value and marking it
     export  . Executed commands inherit the environment.  If the
     user modifies the values of these variables or  creates  new
     ones,  using  the  export or typeset -x commands they become
     part of the environment.  The environment seen by  any  exe-
     cuted  command is thus composed of any name-value pairs ori-
     ginally inherited by the shell, whose values may be modified
     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 variable assign-
     ments.  A variable assignment 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 con-
     cerned  except  for commands listed with one or two daggers,
     †, in the Special Commands section).

     If the -k flag is set, all variable assignment arguments are
     placed in the environment, even if they occur after the com-
     mand name.  The following first prints a=b c and then c:



                                                               16





ksh(1)                   USER COMMANDS                     ksh(1)



          echo a=b c
          set -k
          echo a=b c
     This feature is intended for use with  scripts  written  for
     early  versions  of  the shell and its use in new scripts is
     strongly discouraged.  It is likely to disappear someday.

  Functions.
     The function reserved word, described in the  Commands  sec-
     tion  above, is used to define shell functions.  Shell func-
     tions are read in and stored internally.   Alias  names  are
     resolved  when the function is read.  Functions are executed
     like commands with the arguments passed as positional param-
     eters (see Execution below).

     Functions execute in the same  process  as  the  caller  and
     share  all  files  and  present  working  directory with the
     caller.  Traps caught by  the  caller  are  reset  to  their
     default  action  inside the function.  A trap condition that
     is not caught or ignored by the function causes the function
     to  terminate  and  the  condition  to  be  passed on to the
     caller.  A trap on EXIT set inside a  function  is  executed
     after  the  function  completes  in  the  environment of the
     caller.  Ordinarily, variables are shared between  the  cal-
     ling program and the function.  However, the typeset special
     command used within a function defines local variables whose
     scope  includes  the  current  function and all functions it
     calls.

     The special command return is used to return  from  function
     calls.   Errors  within  functions  return  control  to  the
     caller.

     Function identifiers can be listed with the -f or +f  option
     of  the  typeset special command.  The text of functions may
     also be listed with -f.  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  specified in the ENV file with the -xf option of
     typeset.

  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  numbers.   When a job is
     started asynchronously with &, the shell prints a line which



                                                               17





ksh(1)                   USER COMMANDS                     ksh(1)



     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 key ^Z (ctrl-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 manipulate 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 immedi-
     ately and is like an interrupt in that  pending  output  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  giv-
     ing  the  command  ``stty  tostop''.   If  you  set this tty
     option, then background jobs will stop when they try to pro-
     duce output like they do when they try to read input.

     There are several ways to refer to jobs in the shell.  A job
     can  be  referred to by the process id of any process of the
     job or by one of the following:
     %number
          The job with the given number.
     %string
          Any job whose command line begins with string.
     %?string
          Any job whose command line contains string.
     %%   Current job.
     %+   Equivalent to %%.
     %-   Previous 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 the monitor mode is on, each background job  that  com-
     pletes triggers any trap set for CHLD.

     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



                                                               18





ksh(1)                   USER COMMANDS                     ksh(1)



     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  command  is followed by & and job monitor option is
     not active.  Otherwise, signals have the values inherited by
     the  shell  from  its  parent (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 command name is checked to see if
     it matches one of the user defined functions.  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
     command or a user defined function, a process is created and
     an attempt is made to execute the command via exec(2).

     The shell variable PATH defines  the  search  path  for  the
     directory  containing  the  command.   Alternative directory
     names are separated by a colon (:).   The  default  path  is
     /usr/bin:  (specifying /usr/bin and the current directory in
     that order).  The current directory can be specified by  two
     or  more  adjacent colons, or by a colon at the beginning or
     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 directory 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 variables, are removed in this case.
     A  parenthesized  command is executed in a sub-shell without
     removing non-exported quantities.

  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/.shhistory is used if the file denoted by  the  HIST-
     FILE  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 portion of 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



                                                               19





ksh(1)                   USER COMMANDS                     ksh(1)



     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  variable  FCEDIT  is used.  If FCEDIT is not
     defined then /usr/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 variable of the
     form old=new can be used to modify the command before execu-
     tion.  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 first occurrence of
     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 the vi option is active, the user can edit
     the  command  line.   To  be  in  this  edit mode set the vi
     option.  An editing option is  automatically  selected  each
     time  the VISUAL or EDITOR variable is assigned a value end-
     ing 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 overwrite  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 mode implements 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.

     The search commands in each edit mode provide access to  the
     history  file.   Only  strings  are  matched,  not patterns,
     although a leading ^ in the string restricts  the  match  to
     begin at the first character in the line.

  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.




                                                               20





ksh(1)                   USER COMMANDS                     ksh(1)



     When in vi mode on most  systems,  canonical  processing  is
     initially  enabled  and  the command will be echoed again if
     the speed is 1200 baud or greater and it contains  any  con-
     trol  characters  or  less than one second has elapsed since
     the prompt was printed.  The ESC character terminates canon-
     ical  processing  for  the  remainder of the command and the
     user can then modify the command line.  This scheme has  the
     advantages of canonical processing with the type-ahead echo-
     ing of raw mode.

     If the option viraw is also set, the  terminal  will  always
     have canonical processing disabled.

       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]|  Cursor to column count.
          [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.
          [count];  Repeats count times, the last single  charac-
                    ter find command, f, F, t, or T.
          [count],  Reverses the last single character find  com-
                    mand count times.
          0         Cursor to start of line.
          ^         Cursor to first non-blank character in line.



                                                               21





ksh(1)                   USER COMMANDS                     ksh(1)



          $         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  previ-
                    ous  command  containing  string.   String is
                    terminated by a "RETURN" or  "NEW LINE".   If
                    string  is  preceded by a ^, the matched line
                    must begin with string.  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  previ-
                    ous / 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  charac-
                    ter  that motion would move 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.  Equivalent to d$.
          [count]dmotion
          d[count]motion
                    Delete current character through the  charac-
                    ter  that motion would move to.  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.



                                                               22





ksh(1)                   USER COMMANDS                     ksh(1)



                    Equivalent to 0i.
          [count]P  Place the previous text  modification  before
                    the cursor.
          [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.
          [count]rc Replace the count  character(s)  starting  at
                    the  current  cursor  position  with  c,  and
                    advance the cursor.
          [count]x  Delete current character.
          [count]X  Delete preceding character.
          [count].  Repeat the previous  text  modification  com-
                    mand.
          [count]~  Invert the case  of  the  count  character(s)
                    starting  at  the current cursor position 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.  Other-
                    wise,  the  word  is replaced by the matching
                    pattern and input mode is entered.
          \         Filename completion.   Replaces  the  current
                    word  with  the  longest common prefix of all
                    filenames matching the current word  with  an
                    asterisk appended.  If the match is unique, a
                    / is appended if the file is a directory  and
                    a  space  is  appended  if  the file is not a
                    directory.
       Other Edit Commands
          Miscellaneous commands.
          [count]ymotion
          y[count]motion
                    Yank current character through character that
                    motion would move the cursor to and puts them
                    into the delete buffer.  The text and  cursor
                    are unchanged.
          Y         Yanks from current position to end  of  line.
                    Equivalent to y$.
          u         Undo the last text modifying command.
          U         Undo all the  text  modifying  commands  per-
                    formed 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.



                                                               23





ksh(1)                   USER COMMANDS                     ksh(1)



          ^J        (New line) Execute the current line,  regard-
                    less of mode.
          ^M        (Return) Execute the current line, regardless
                    of mode.
          #         Sends the line after inserting a #  in  front
                    of  the line.  Useful for causing the current
                    line to be inserted in  the  history  without
                    being executed.
          =         List the file names that  match  the  current
                    word if an asterisk were appended it.
          @letter   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
                    input queue for processing.

  Special Commands.
     The following simple-commands are executed in the shell pro-
     cess.  Input/Output redirection is permitted.  Unless other-
     wise indicated, the output is written on file  descriptor  1
     and the exit status, when there is no syntax error, is zero.
     Commands that are preceded by one or two † are treated  spe-
     cially in the following ways:
     1.   Variable assignment lists preceding the command  remain
          in effect when the command completes.
     2.   I/O redirections are processed after  variable  assign-
          ments.
     3.   Errors cause a script that contains them to abort.
     4.   Words, following a command preceded by †† that  are  in
          the  format of a variable assignment, are expanded with
          the same rules as a variable  assignment.   This  means
          that  tilde  substitution is performed after the = sign
          and word splitting and file  name  generation  are  not
          performed.

     † : [ arg ... ]
          The command only expands parameters.

     † . file [ arg ... ]
          Read the complete file then execute the commands.   The
          commands are executed in the current Shell environment.
          The search path specified by PATH is used to  find  the
          directory  containing  file.   If any arguments arg are
          given, they become the positional  parameters.   Other-
          wise the positional parameters are unchanged.  The exit
          status is the exit status of the last command executed.

     †† 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



                                                               24





ksh(1)                   USER COMMANDS                     ksh(1)



          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 remain 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  for  scripts  invoked  by
          name.   The exit status is non-zero if a name is given,
          but no value, for which no alias has been defined.

     bg [ job... ]
          This command is only on systems that support  job  con-
          trol.   Puts  each  specified  job into the background.
          The current job is put in the background if job is  not
          specified.  See Jobs for a description of the format of
          job.

     † 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 enclosing 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  directory  is  changed  to  the  previous
          directory.  The shell variable HOME is the default arg.
          The variable PWD is set to the current directory.   The
          shell  variable  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 directory is specified by a null path name,
          which can appear immediately 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 rksh.

     echo [ arg ... ]



                                                               25





ksh(1)                   USER COMMANDS                     ksh(1)



          See echo(1) for usage and description.

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

     † exec [ arg ... ]
          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 current process.  If no arguments are given
          the effect of this command is to modify  file  descrip-
          tors  as  prescribed  by  the  input/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 except for a shell which has
          the ignoreeof option (see set below) turned on.

     †† export [ name[=value] ] ...
          The given names are marked for automatic export to  the
          environment 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  selected 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 recent command start-
          ing  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 stan-
          dard output.  Otherwise, the editor  program  ename  is
          invoked  on  a file containing these keyboard commands.
          If ename is not supplied, then the value of  the  vari-
          able  FCEDIT  (default /usr/bin/ed) is used as the edi-
          tor.  When editing is complete, the  edited  command(s)
          is  executed.  If 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... ]



                                                               26





ksh(1)                   USER COMMANDS                     ksh(1)



          This command is only on systems that support  job  con-
          trol.  Each job specified is brought to the foreground.
          Otherwise, the current job is brought  into  the  fore-
          ground.   See  Jobs  for a description of the format of
          job.

     getopts optstring name [ arg ... ]
          Checks arg for legal options.  If arg is  omitted,  the
          positional  parameters  are  used.   An option argument
          begins with a + or a -.  An option not beginning with +
          or  -  or  the argument -- ends the options.  optstring
          contains the letters that  getopts  recognizes.   If  a
          letter  is  followed by a :, that option is expected to
          have an argument.  The options can  be  separated  from
          the argument by blanks.

          getopts places the next option letter it  finds  inside
          variable  name  each  time  it  is  invoked  with  a  +
          prepended when arg begins with a +.  The index  of  the
          next  arg is stored in OPTIND.  The option argument, if
          any, gets stored in OPTARG.

          A leading :  in optstring causes getopts to  store  the
          letter  of an invalid option in OPTARG, and to set name
          to ?  for an unknown option and to :  when  a  required
          option  is missing.  Otherwise, getopts prints an error
          message.  The exit status is non-zero when there are no
          more options.

     jobs [ -lnp ] [ job ... ]
          Lists information about each given job; or  all  active
          jobs  if job is omitted.  The -l flag lists process ids
          in addition to the normal  information.   The  -n  flag
          only  displays  jobs  that have stopped or exited since
          last notified.  The -p flag  causes  only  the  process
          group  to be listed.  See Jobs for a description of the
          format of job.

     kill [ -sig ] job ...
     kill -l
          Sends either the TERM (terminate) signal or the  speci-
          fied  signal  to the specified jobs or processes.  Sig-
          nals are either given by number or by names  (as  given
          in   /usr/include/signal.h,   stripped  of  the  prefix
          ``SIG'').  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
          job  can  the  process  id  of  a process that is not a
          member of one of the  active  jobs.   See  Jobs  for  a
          description  of the format of job.  In the second form,
          kill -l, the signal numbers and names are listed.




                                                               27





ksh(1)                   USER COMMANDS                     ksh(1)



     let arg ...
          Each arg is a  separate  arithmetic  expression  to  be
          evaluated.   See  Arithmetic  Evaluation  above,  for a
          description of arithmetic expression evaluation.

          The exit status is 0 if the value of the  last  expres-
          sion is non-zero, and 1 otherwise.

     † newgrp [ arg ... ]
          Equivalent to exec /usr/bin/newgrp arg ....

     print [ -Rnprsu[n ] ] [ arg ... ]
          The shell output mechanism.  With no flags or with flag
          - or -- 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  |&
          instead  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 output.

     pwd  Equivalent to print -r - $PWD

     read [ -prsu[ n ] ] [ name?prompt ] [ name ... ]
          The shell input mechanism.  One line  is  read  and  is
          broken  up  into  fields using the characters in IFS as
          separators.  In raw mode, -r, a \ at the end of a  line
          does not signify line continuation.  The first field is
          assigned to the first name, the  second  field  to  the
          second name, etc., with leftover fields 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 using |&.  If the -s flag 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 descriptor can
          be opened with the exec special command.   The  default
          value of n is 0.  If name is omitted then REPLY is used
          as the default name.  The exit status 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 on stan-
          dard  error  when  the  shell is interactive.  The exit
          status is 0 unless an end-of-file is encountered.

     †† readonly [ name[=value] ] ...



                                                               28





ksh(1)                   USER COMMANDS                     ksh(1)



          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 return status is that of the last com-
          mand  executed.   If  return  is invoked while not in a
          function or a script, then it is the same as an exit.

     set [ +aefhkmnpstuvx ] [ +o option ]... [ +A name ]  [ arg ... ]
          The flags for this command have meaning as follows:
          -A   Array assignment.  Unset  the  variable  name  and
               assign  values sequentially from the list arg.  If
               +A is used, the variable name is not unset first.
          -a   All subsequent  variables  that  are  defined  are
               automatically exported.
          -e   If a command has a non-zero exit  status,  execute
               the ERR trap, if set, and exit.  This mode is dis-
               abled while reading profiles.
          -f   Disables file name generation.
          -h   Each command becomes a tracked  alias  when  first
               encountered.
          -k   All variable assignment arguments  are  placed  in
               the environment 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 automatically for  interac-
               tive shells.
          -n   Read commands and check them  for  syntax  errors,
               but  do not execute them.  Ignored for interactive
               shells.
          -o   The following argument can be one of the following
               option names:
               allexport    Same as -a.
               errexit      Same as -e.
               bgnice       All background  jobs  are  run  at  a
                            lower  priority.  This is the default
                            mode.
               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.
               noclobber    Prevents redirection > from  truncat-
                            ing  existing  files.   Require >| to
                            truncate a file when turned on.



                                                               29





ksh(1)                   USER COMMANDS                     ksh(1)



               noexec       Same as -n.
               noglob       Same as -f.
               nolog        Do not save function  definitions  in
                            history file.
               nounset      Same as -u.
               privileged   Same as -p.
               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 set-
                            tings are printed.
          -p   Disables processing of the $HOME/.profile file and
               uses the file /etc/suidprofile instead of the ENV
               file.  This mode is on whenever the effective  uid
               (gid) is not equal to the real uid (gid).  Turning
               this off causes the effective uid and  gid  to  be
               set to the real uid and gid.
          -s   Sort the positional parameters lexicographically.
          -t   Exit after reading and executing one command.
          -u   Treat unset parameters as an error when substitut-
               ing.
          -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
          $-.   Unless  -A  is specified, the remaining arguments
          are positional parameters and are assigned,  in  order,
          to $1 $2 ....  If no arguments are given then the names
          and values of all variables 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 expression that evaluates to a  non-negative
          number less than or equal to $#.




                                                               30





ksh(1)                   USER COMMANDS                     ksh(1)



     † 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 executed in order of  signal
          number.  Any attempt to set a trap on a signal that was
          ignored on entry to the current shell  is  ineffective.
          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
          status.  sig is DEBUG then arg will be  executed  after
          each  command.  If sig is 0 or EXIT and the trap state-
          ment is executed inside the body of  a  function,  then
          the  command  arg  is  executed after the function com-
          pletes.  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 [ +HLRZfilrtux[n] ]  [ name[ =value ]  ] ...
          Sets attributes and values for shell  variables.   When
          invoked  inside a function, a new instance of the vari-
          able name is created.  The parameter value and type are
          restored  when  the  function completes.  The following
          list of attributes may be specified:
          -H   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 assignment.  When the variable
               is assigned to, it is filled  on  the  right  with
               blanks or truncated, if necessary, 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  variable 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



                                                               31





ksh(1)                   USER COMMANDS                     ksh(1)



               defines  the  width  of the field, otherwise it is
               determined by the width  of  the  value  of  first
               assignment.
          -f   The names refer  to  function  names  rather  than
               variable  names.   No  assignments can be made and
               the only other valid flags are -t, -u and -x.  The
               flag  -t turns on execution tracing for this func-
               tion.  The flag -u  causes  this  function  to  be
               marked  undefined.   The  FPATH  variable  will be
               searched to find the function definition when  the
               function  is  referenced.   The flag -x allows the
               function definition to  remain  in  effect  across
               shell procedures invoked by name.
          -i   Variable 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.
          -r   The given names  are  marked  readonly  and  these
               names cannot be changed by subsequent assignment.
          -t   Tags the variables.  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
          specified, a list of names (and optionally the  values)
          of the variables which have these flags set is printed.
          (Using + rather than -  keeps  the  values  from  being
          printed.)   If  no names and flags are given, the names
          and attributes of all variables are printed.

     ulimit [ -[HS][a | cdfnstv] ]

     ulimit [ -[HS][c | d | f | n | s | t | v] ] limit
          ulimit prints or sets hard  or  soft  resource  limits.
          These limits are described in getrlimit(2).

          If limit is not present, ulimit  prints  the  specified
          limits.   Any  number  of  limits may be printed at one
          time.  The -a option prints all limits.

          If limit is present, ulimit sets the specified limit to
          limit.  The string unlimited requests the largest valid
          limit.  Limits may be set for only one  resource  at  a
          time.  Any user may set a soft limit to any value below
          the hard limit.  Any user may lower a hard limit.  Only



                                                               32





ksh(1)                   USER COMMANDS                     ksh(1)



          a super-user may raise a hard limit; see su(1).

          The -H option specifies a hard limit.   The  -S  option
          specifies  a  soft  limit.  If neither option is speci-
          fied, ulimit will set both limits and  print  the  soft
          limit.

          The following options specify the resource whose limits
          are  to  be printed or set.  If no option is specified,
          the file size limit is printed or set.

          -c   maximum core file size (in 512-byte blocks)

          -d   maximum size of data segment or heap (in kbytes)

          -f   maximum file size (in 512-byte blocks)

          -n   maximum file descriptor plus 1

          -s   maximum size of stack segment (in kbytes)

          -t   maximum CPU time (in seconds)

          -v   maximum size of virtual memory (in kbytes)

          If no option is given, -f is assumed.

     umask [ mask ]
          The  user  file-creation  mask  is  set  to  mask  [see
          umask(2)].   mask  can  either  be an octal number or a
          symbolic value as described in chmod(1). If a  symbolic
          value  is  given, the new umask value is the complement
          of the result of applying mask to the complement of the
          previous  umask value.  If mask is omitted, the current
          value of the mask is printed.

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

     unset [ -f ] name ...
          The variables given by the  list  of  names  are  unas-
          signed,  i. e., their values and attributes are erased.
          Read-only variables cannot be unset.  If the flag,  -f,
          is set, then the names refer to function names.  Unset-
          ting ERRNO, LINENO, MAILCHECK, OPTARG, OPTIND,  RANDOM,
          SECONDS,  TMOUT,  and    causes  removes their special
          meaning even if they are subsequently assigned to.

     † wait [ job ]
          Wait for the specified job and report  its  termination
          status.   If job is not given then all currently active



                                                               33





ksh(1)                   USER COMMANDS                     ksh(1)



          child processes are waited for.  The exit  status  from
          this  command  is  that of the process waited for.  See
          Jobs for a description of the format of job.

     whence [ -pv ] name ...
          For each name, indicate how it would be interpreted  if
          used as a command name.

          -v   produces a more verbose report.

          -p   does a path search for name even  if  name  is  an
               alias, a function, or a reserved word.

  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 commands are read  from  /etc/profile  and
     then  from  either  .profile  in  the  current  directory or
     $HOME/.profile, if either file exists.  Next,  commands  are
     read  from  the file named by performing parameter substitu-
     tion on the value of the environment  variable  ENV  if  the
     file exists.  If the -s flag is not present and arg is, then
     a path search is performed on the first arg to determine the
     name  of  the  script  to execute.  The script arg must have
     read permission and any setuid and setgid settings  will  be
     ignored.   Commands  are  then  read as described below; the
     following flags are interpreted 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  commands  are read from the standard
               input.  Shell output, except for the output 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
               ioctl(2)) then this shell is interactive.  In this
               case TERM is ignored (so that kill 0 does not kill
               an interactive  shell)  and  INTR  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  res-
               tricted shell.

     The remaining flags and arguments are  described  under  the
     set command above.

  Rksh Only.
     Rksh is used to set up login names  and  execution  environ-
     ments  whose  capabilities are more controlled than those of



                                                               34





ksh(1)                   USER COMMANDS                     ksh(1)



     the standard shell.  The actions of rksh  are  identical  to
     those of sh, except that the following are disallowed:
          changing directory [see cd(1)],
          setting the value of SHELL, ENV, 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  pro-
     cedure,  rksh invokes ksh to execute it.  Thus, it is possi-
     ble to provide to the end-user shell  procedures  that  have
     access to the full power of the standard shell, while impos-
     ing a limited menu of commands; this scheme assumes 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 perform-
     ing guaranteed setup actions and  leaving  the  user  in  an
     appropriate directory (probably not the login directory).

     The system administrator often sets up a directory  of  com-
     mands (i.e., /usr/rbin) that can be safely invoked by rksh.

EXIT STATUS
     Errors detected by the shell, such as syntax  errors,  cause
     the  shell to return a non-zero exit status.  Otherwise, the
     shell returns the exit status of the last  command  executed
     (see  also  the  exit command above).  If the shell is being
     used non-interactively then execution of the shell  file  is
     abandoned.   Run  time  errors  detected  by  the  shell are
     reported by printing the command or function  name  and  the
     error condition.  If the line number that the error occurred
     on is greater than one, then the line number is also printed
     in square brackets ([]) after the command or function name.

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

SEE ALSO
     cat(1), cd(1), chmod(1), cut(1), echo(1), env(1),  paste(1),
     stty(1), test(1), umask(1), and vi(1).
     dup(2), exec(2), fork(2), ioctl(2), lseek(2), pipe(2),  sig-
     nal(2),  umask(2),  ulimit(2),  wait(2), and rand(3C) in the
     Programmer's Reference Manual.



                                                               35





ksh(1)                   USER COMMANDS                     ksh(1)



     newgrp(1M), a.out(4), profile(4), and environ(4) in the Sys-
     tem Administrator's Reference Manual.

     Morris I. Bolsky and David G. Korn,  The  KornShell  Command
     and Programming Language, Prentice Hall, 1989.

NOTES
     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 before the directory where the original com-
     mand was found, the shell will continue to exec the original
     command.  Use the -t option of the alias command to  correct
     this situation.

     Some very old shell scripts contain a ^ as a synonym for the
     pipe character.  |.

     Using the fc built-in command within a compound command will
     cause the whole command to disappear from the history file.

     The built-in command . file reads the whole file before  any
     commands  are  executed.   Therefore, alias and unalias com-
     mands in the file will not apply to any functions defined in
     the file.

     Traps are not processed while a job is waiting for  a  fore-
     ground  process.   Thus,  a  trap  on CHLD won't be executed
     until the foreground job terminates.



























                                                               36



Typewritten Software • bear@typewritten.org • Edmonds, WA 98026