User Commands                                               sh(1)


NAME

     sh, jsh - standard and job control shell and command  inter-
     preter


SYNOPSIS

     /usr/bin/sh   [-acefhikmnprstuvxP] [argument]...

     /usr/bin/jsh  [-acefhikmnprstuvxP] [argument]...


DESCRIPTION

     The /usr/bin/sh utility is a  command  programming  language
     that executes commands read from a terminal or a file.

     The jsh utility is an interface to the shell  that  provides
     all  of the functionality of sh and enables job control (see
     Job Control section below).

     Arguments to the shell are listed in the Invocation  section
     below.

  Definitions
     A blank is a tab or a space. A name is a sequence  of  ASCII
     letters,  digits, or underscores, beginning with a letter or
     an underscore. A parameter is a name, a digit, or any of the
     characters *, @, #, ?, -, $, and !.

  Invocation
     If the shell is invoked through exec(2) and the first  char-
     acter  of  argument  zero  is -, commands are initially read
     from /etc/profile and from  $HOME/.profile,  if  such  files
     exist.  Next, for interactive shells, commands are read from
     /etc/sh.shrc and from the file with a name that results from
     doing Parameter Substitution on the environment variable ENV
     if the  file  exists.   Thereafter,  commands  are  read  as
     described  below,  which  is also the case when the shell is
     invoked as /usr/bin/sh.


OPTIONS

     The options below are interpreted by the shell on invocation
     only.   Note:  Unless  the -c or -s option is specified, the
     first argument is assumed to be the name of a file  contain-
     ing  commands,  and  the  remaining  arguments are passed as
     positional parameters to that command file:

     -c string   If the -c option is present  commands  are  read
                 from  string.   The  remaining  arguments become

Schily Bourne Shell  Last change: 2012/07/03                    1


User Commands                                               sh(1)

                 positional parameters starting at $0.

     -i          If the -i option is  present  or  if  the  shell
                 input  and  output  are  attached to a terminal,
                 this shell is interactive.  In this  case,  TER-
                 MINATE  is ignored (so that kill 0 does not kill
                 an interactive shell) and  INTERRUPT  is  caught
                 and  ignored (so that wait is interruptible). In
                 all cases, QUIT is ignored by the shell.

     -p          If the -p option is present, the shell does  not
                 set the effective user and group IDs to the real
                 user and group IDs.

     -r          If the -r option is present the shell is a  res-
                 tricted shell (see rsh(1M)).

     -s          If the -s option is present or if  no  arguments
                 remain,  commands  are  read  from  the standard
                 input. Any remaining arguments specify the posi-
                 tional parameters. Shell output (except for Spe-
                 cial Commands) is written to file descriptor 2.

     -version    Print the current Bourne Shell version and exit.

     Using + rather than -  causes  the  related  options  to  be
     turned   off.   The  remaining  options  and  arguments  are
     described under the set command below.


USAGE

  Commands
     A simple-command is a sequence of non-blank words  separated
     by blanks.  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 command. The
     command name is passed as argument  0  (see  exec(2)).   The
     value  of  a  simple-command  is  its exit status if it ter-
     minates normally, or (octal)  200+status  if  it  terminates
     abnormally. See signal.h(3HEAD) for a list of status values.

     A pipeline is a sequence of one or more  commands  separated
     by  |.   The standard output of each command but the last is
     connected by a pipe(2) to the standard  input  of  the  next
     command.   Each  command  is  run as a separate process. The
     shell waits for the last  command  to  terminate.  The  exit
     status  of a pipeline is the exit status of the last command
     in the pipeline.

Schily Bourne Shell  Last change: 2012/07/03                    2


User Commands                                               sh(1)

     A list is a sequence of one or more pipelines  separated  by
     ;,  &,  &&,  or ||, and optionally terminated by ; or &.  Of
     these four 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,  that is, the shell
     waits for the pipeline to finish before executing  any  com-
     mands following the semicolon. An ampersand (&) causes asyn-
     chronous execution of the preceding pipeline, that  is,  the
     shell  does not wait for that pipeline to finish. The symbol
     && (||) causes the list following it to be executed only  if
     the  preceding  pipeline  returns  a  zero  (non-zero)  exit
     status. An arbitrary number of  newlines  can  appear  in  a
     list, instead of semicolons, to delimit commands.

     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 name [ in word ... ] do list done
          Each time a for command is executed, name 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 section below).  Execution  ends
          when there are no more words in the list.

     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  section),  except  that a
          slash, a leading dot, or a dot immediately following  a
          slash need not be matched explicitly.

     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  exe-
          cuted and, if its value is zero, the list following the
          next then is executed. Failing that, the else  list  is
          executed.  If  no  else  list or then list is executed,
          then the if command returns a zero exit status.

     while list do list done
     until list do list done
          A while command repeatedly executes the while list and,
          if  the  exit status of the last command in the list is

Schily Bourne Shell  Last change: 2012/07/03                    3


User Commands                                               sh(1)

          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  can be used in place of while to negate the loop
          termination test.

     (list)
          Execute list in a sub-shell.

     { list;}
          list is executed  in  the  current  (that  is,  parent)
          shell. The { must be followed by a space.

     name () { list;}
          Define a function which is  referenced  by  name.   The
          body  of the function is the list of commands between {
          and }.  The { must be followed by a space. Execution of
          functions  is  described below (see Execution section).
          The { and } are unnecessary if the body of the function
          is a command as defined above, under Commands.

     The following 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  { }

  Comments Lines
     A word beginning with # causes that word and all the follow-
     ing characters up to a newline to be ignored.

  Alias Substitution
     After a token has been recognized, but before  applying  the
     grammatical  rules,  a  resulting word that is identified as
     the command name of a simple command is examined whether  it
     is  an  unquoted  valid  alias  name.  A valid alias name is
     replaced by the value of  the  alias.   The  shell  prevents
     infinite  alias  loops  by not expanding the same alias name
     more than once for the same word.

     Alias expansion is performed when the commands are read, not
     when they are executed.

     Aliases can be used to redefine built-in commands but cannot
     be  used  to  redefine the reserved words listed in the Com-
     mands section. Aliases can be created and  listed  with  the
     alias command and removed with the unalias command.

     POSIX compliant temporary alias definitions are  not  inher-
     ited by separate invocations of the shell or when interpret-
     ing scripts.

Schily Bourne Shell  Last change: 2012/07/03                    4


User Commands                                               sh(1)

     The Bourne Shell implements enhanced alias  features  beyond
     the POSIX alias definition. Enhanced alias features are dis-
     abled by default. They need to be turned on (see set command
     below)  to  make them operational.  The following additional
     alias features are available:

     persistent aliases
          If turned on by set -o globalaliases, persistent global
          aliases  are  automatically  loaded  by all interactive
          shells.

     local aliases
          If turned on by set -o localaliases,  persistent  local
          aliases  are  automatically  loaded  by all interactive
          shells as a result of the cd  command.   Local  aliases
          are  specific  to  the  current  working directory. The
          local aliases definitions  from  the  previous  working
          directory  are  automatically disabled when the working
          directory is changed to a different  directory.   Local
          aliases have higher precedence than global aliases.

  Command Substitution
     The shell reads commands from the string between  two  grave
     accents (``) and the standard output from these commands can
     be used as all or part of a word. Trailing newlines from the
     standard output are removed.

     No interpretation is done on the string before the string is
     read,  except to remove backslashes (\) used to escape other
     characters.  Backslashes can  be  used  to  escape  a  grave
     accent  (`)  or another backslash (\) and are removed before
     the command string is read.  Escaping grave  accents  allows
     nested  command  substitution.  If  the command substitution
     lies within a pair of double quotes (" ...` ...` ...  "),  a
     backslash  used  to  escape  a double quote (\") is removed.
     Otherwise, it is left intact.

     If a backslash is used to escape a newline character  (\new-
     line),  both  the backslash and the newline are removed (see
     the later section on  Quoting).   In  addition,  backslashes
     used  to  escape  dollar  signs  (\$)  are removed. Since no
     parameter substitution is done on the command string  before
     it  is  read,  inserting a backslash to escape a dollar sign
     has no effect. Backslashes  that  precede  characters  other
     than  \,  `, ", newline, and $ are left intact when the com-
     mand string is read.

  Parameter Substitution
     The character $ is used to introduce  substitutable  parame-
     ters.   There  are  two  types of parameters, positional and

Schily Bourne Shell  Last change: 2012/07/03                    5


User Commands                                               sh(1)

     keyword. If parameter is a digit, it is a positional parame-
     ter.  Positional  parameters  can be assigned values by set.
     Keyword parameters (also known as variables) can be assigned
     values by writing:

     name=value [ name=value ] ...

     The evaluation of the assignments is done from the  left  to
     the right in this shell.

     Pattern-matching is not performed on value.  There cannot be
     a function and a variable with the same name.

     ${parameter}             The value, if any, of the parameter
                              is   substituted.  The  braces  are
                              required  only  when  parameter  is
                              followed  by  a  letter,  digit, or
                              underscore that is not to be inter-
                              preted  as  part  of  its  name. If
                              parameter is * or @, all the  posi-
                              tional  parameters,  starting  with
                              $1, are substituted  (separated  by
                              spaces).  Parameter  $0 is set from
                              argument zero  when  the  shell  is
                              invoked.

     ${parameter:-word}       Use Default Values. If parameter is
                              unset  or  null,  the  expansion of
                              word is substituted; otherwise, the
                              value of parameter is substituted.

     ${parameter:=word}       Assign Default Values. If parameter
                              is  unset or null, the expansion of
                              word is assigned to parameter.   In
                              all   cases,  the  final  value  of
                              parameter  is   substituted.   Only
                              variables,  not  positional parame-
                              ters or special parameters, can  be
                              assigned in this way.

     ${parameter:?word}       If parameter is  set  and  is  non-
                              null,  substitute its value; other-
                              wise, print word and exit from  the
                              shell. If word is omitted, the mes-
                              sage "parameter null or not set" is
                              printed.

Schily Bourne Shell  Last change: 2012/07/03                    6


User Commands                                               sh(1)

     ${parameter:+word}       If parameter is  set  and  is  non-
                              null,  substitute  word;  otherwise
                              substitute nothing.

     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, 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.

     n       The n-th positional parameter.  The parameter name n
             is in the range from 1 to $#.

     0       Parameter $0 is set  from  argument  zero  when  the
             shell  is  invoked.   If running a script, $0 is the
             name of the script.

     *       All positional parameters starting  from  $1.   "$*"
             expands to one argument that contains all positional
             parameters separated by spaces.

     @       All positional parameters starting  from  $1.   "$@"
             expands to $# arguments.

     -       Flags supplied to the shell on invocation or by  the
             set command.

     ?       The decimal value returned by the last synchronously
             executed command.

     $       The process number of this shell.

     !       The process number of the  last  background  command
             invoked.

     The following parameters are used by the shell. The  parame-
     ters  in  this  section  are also referred to as environment
     variables.

Schily Bourne Shell  Last change: 2012/07/03                    7


User Commands                                               sh(1)

     HOME         The default argument (home directory)  for  the
                  cd  command,  set to the user's login directory
                  by  login(1)  from  the  password   file   (see
                  passwd(4)).

     PATH         The search path  for  commands  (see  Execution
                  section   below).   If  PATH  is  not  set,  it
                  defaults to /usr/bin:.

     CDPATH       The search path for the cd command.

     ENV          This variable is used when  and  only  when  an
                  interactive shell is invoked.  It is subject to
                  Parameter Substitution by the  shell,  and  the
                  resulting  value  is  used as the pathname of a
                  script that  is  executed  when  the  shell  is
                  invoked.  This file is typically used to define
                  function definitions and transient alias defin-
                  itions  or to turn on persistent alias features
                  or   jobcontrol.    The   default   value    is
                  $HOME/.shrc.   If  the  result of the Parameter
                  Substitution starts with /./  or  ./  the  file
                  /etc/sh.shrc is not executed.

     IGNOREEOF    If set to on, the shell will not exit if  a  ^D
                  is  typed and the cursor is on an empty command
                  line.   The  default  is  not  to  ignore  EOF.
                  IGNOREEOF  is only supported if sh was compiled
                  with support for history editing.

     HISTORY      The maximum number of lines to keep in the com-
                  mand  history  editor.   The default is to keep
                  100 lines of command history.  HISTORY is  only
                  supported  if  sh was compiled with support for
                  history editing.

     MAIL         If this parameter is set to the name of a  mail
                  file and the MAILPATH parameter is not set, the
                  shell informs the user of the arrival  of  mail
                  in the specified file.

     MAILCHECK    This parameter specifies how often (in seconds)
                  the shell checks for the arrival of mail in the
                  files specified by the MAILPATH or MAIL parame-
                  ters.  The  default  value  is  600 seconds (10

Schily Bourne Shell  Last change: 2012/07/03                    8


User Commands                                               sh(1)

                  minutes). If set to 0, the shell checks  before
                  each prompt.

     MAILPATH     A colon-separated list of file names.  If  this
                  parameter is set, the shell informs the user of
                  the arrival of mail in  any  of  the  specified
                  files.  Each file name can be followed by % and
                  a message that is e printed when the  modifica-
                  tion  time changes. The default message is, you
                  have mail.

     OLDPWD       The previous working directory, set by the  cd,
                  the  pushd and the popd command.  OLDPWD is not
                  set before the first cd, pushd or popd command.

     OPTARG       This variable is used by getopts to  store  the
                  argument if an option is using arguments.

     OPTIND       This variable is used by getopts as  the  index
                  of the next argument to be processed.

     PS1          Primary prompt string, by default " $ ".

     PS2          Secondary prompt string, by default " > ".

     PWD          The present working directory set  by  the  cd,
                  the pushd and the popd command.  For efficiency
                  and to avoid NFS based hangs, PWD  is  not  set
                  before  the first cd, dirs, pushd, popd, or pwd
                  command.  As it may  have  been  imported  with
                  invalid  content  from  the  environment of the
                  calling process, it is recommended to call  pwd
                  or cd . before depending on the content of PWD.

     IFS          Internal field separators, normally space, tab,
                  and newline (see Blank Interpretation section).

     SAVEHISTORY  If set to on, the current history is  saved  in
                  the  file $HOME/.history when this shell exits.
                  The  default  is  not  to  save  the   history.
                  SAVEHISTORY  is  only  supported if sh was com-
                  piled with support for history editing.

Schily Bourne Shell  Last change: 2012/07/03                    9


User Commands                                               sh(1)

     SHACCT       If this parameter is set to the name of a  file
                  writable  by  the  user,  the  shell  writes an
                  accounting record in the file  for  each  shell
                  procedure executed.

     SHELL        When  the  shell  is  invoked,  it  scans   the
                  environment (see Environment section below) for
                  this name.

     TERM         Used to determine  the  name  of  the  terminal
                  type.   If  this  variable is unset or null, an
                  unspecified  default  terminal  type  is  used.
                  TERM  is only supported if sh was compiled with
                  support for history editing.

     TERMCAP      This  variable  holds  either   a   precompiled
                  termcap  entry  or  the  pathname to be used to
                  find a termcap database file.  If  it  holds  a
                  precompiled  entry that does not match the TERM
                  environment, the termcap database is parsed  as
                  if the TERMCAP environment is not set.  TERMCAP
                  is automatically exported after filling it with
                  a  precompiled  entry to speed up termcap based
                  applications.  TERMCAP is only supported if  sh
                  was compiled with support for history editing.

     TERMPATH     If TERMCAP  is  empty  or  not  set,  then  the
                  TERMPATH  environment  is scanned for pathnames
                  of files that contain a termcap  database.   It
                  holds  a  list of filenames separated by colons
                  or spaces (i.e.,  ":" or " ").  If the TERMPATH
                  symbol is not set, the files $HOME/.termcap and
                  /etc/termcap are scanned in that order.   If  a
                  pathname  in  TERMPATH  does  not  start with a
                  slash  ("/"),  then  the  HOME  environment  is
                  prepended  to  the name.  TERMPATH is only sup-
                  ported if sh was compiled with support for his-
                  tory editing.

     See environ(5) for descriptions of the following environment
     variables  that  affect  the execution of sh:  LANG, LC_ALL,
     LC_CTYPE and LC_MESSAGES.

     The shell gives default values to PATH, PS1, PS2, MAILCHECK,
     HISTORY,  and IFS.  Default values for HOME and MAIL are set

Schily Bourne Shell  Last change: 2012/07/03                   10


User Commands                                               sh(1)

     by login(1).

  Blank Interpretation
     After parameter and command  substitution,  the  results  of
     substitution  are scanned for internal field separator char-
     acters (those found in IFS) and split  into  distinct  argu-
     ments  where  such characters are found. Explicit null argu-
     ments ("" or  '')  are  retained.  Implicit  null  arguments
     (those  resulting  from  parameters that have no values) are
     removed.

     The IFS parameter is applied to any unquoted word. Thus.

          IFS=X
          echoXfoo

     executes the `echo' command with the argument `foo'.

  Input/Output Redirection
     A command's input and output can be redirected using a  spe-
     cial  notation  interpreted  by the shell. The following can
     appear anywhere in a simple-command or can precede or follow
     a  command and are not passed on as arguments to the invoked
     command.  Note: Parameter and  command  substitution  occurs
     before word or digit is used.

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

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

     >>word          Use file word as  standard  output.  If  the
                     file  exists,  output  is  appended to it by
                     first seeking to the  EOF.   Otherwise,  the
                     file is created.

     <>word          Open file word for reading  and  writing  as
                     standard input.

     <<[-]word       After parameter and command substitution  is
                     done  on word, the shell input is read up to
                     the first line that  literally  matches  the
                     resulting  word, or to an EOF.  If, however,
                     the hyphen (-) is appended to <<:

Schily Bourne Shell  Last change: 2012/07/03                   11


User Commands                                               sh(1)

                         1.   leading tabs are stripped from word
                              before the shell input is read (but
                              after parameter and command substi-
                              tution is done on word);

                         2.   leading tabs are stripped from  the
                              shell  input  as  it  is  read  and
                              before each line is  compared  with
                              word; and

                         3.   shell input is read up to the first
                              line  that  literally  matches  the
                              resulting word, or to an EOF.
                     If any character  of  word  is  quoted  (see
                     Quoting  section  later), no additional pro-
                     cessing is done to the shell  input.  If  no
                     characters of word are quoted:

                         1.   parameter and command  substitution
                              occurs;

                         2.   (escaped)  \newlines  are  removed;
                              and

                         3.   \ must be used to quote the charac-
                              ters \, $, and `.
                     The resulting document becomes the  standard
                     input.

     <&digit         Use the file associated with file descriptor
                     digit  as standard input.  Similarly for the
                     standard output using >&digit.

     <&-             The standard input is closed. Similarly  for
                     the standard output using >&-.

     If any of the  above  is  preceded  by  a  digit,  the  file
     descriptor  which is associated with the file is that speci-
     fied by the digit (instead of the  default  0  or  1).   For
     example:

       ... 2>&1

     associates file descriptor 2 with the file currently associ-
     ated with file descriptor 1.

Schily Bourne Shell  Last change: 2012/07/03                   12


User Commands                                               sh(1)

     The order in which redirections are  specified  is  signifi-
     cant.  The  shell  evaluates redirections left-to-right. For
     example:

       ... 1>xxx 2>&1

     first associates file descriptor 1 with file xxx.  It  asso-
     ciates  file descriptor 2 with the file associated with file
     descriptor 1 (that is, xxx).  If the order  of  redirections
     were  reversed,  file  descriptor 2 would be associated with
     the terminal (assuming file descriptor 1 had been) and  file
     descriptor 1 would be associated with file xxx.

     Using the terminology introduced on the  first  page,  under
     Commands,  if  a  command is composed of several simple com-
     mands, redirection  is  evaluated  for  the  entire  command
     before  it  is  evaluated for each simple command.  That is,
     the shell evaluates redirection for the  entire  list,  then
     each pipeline within the list, then each command within each
     pipeline, then each list within each command.

     If a command is followed by & and job control (see  set  -m)
     is not active, the default standard input for the command is
     the empty file, /dev/null.  Otherwise, the  environment  for
     the  execution of a command contains the file descriptors of
     the invoking shell as modified  by  input/output  specifica-
     tions.

  File Name Generation
     Before a command is executed, each command word  is  scanned
     for  the characters *, ?, and [.  If one of these characters
     appears the word is regarded as  a  pattern.   The  word  is
     replaced  with  alphabetically  sorted file names that match
     the pattern. If no file name is found that matches the  pat-
     tern,  the  word  is  left unchanged. The character . at the
     start of a file name or immediately following a /,  as  well
     as the character / itself, must be matched explicitly.

     *            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,

Schily Bourne Shell  Last change: 2012/07/03                   13


User Commands                                               sh(1)

                  inclusive.   If  the  first character following
                  the  opening  [  is  a  !,  any  character  not
                  enclosed is matched.

     Notice that  all  quoted  characters  (see  below)  must  be
     matched explicitly in a filename.

  Quoting
     The following characters have a special meaning to the shell
     and cause termination of a word unless quoted:

     ;  &  (  )  |  ^  <  >  newline  space  tab

     A character can be  quoted  (that  is,  made  to  stand  for
     itself) by preceding it with a backslash (\) or inserting it
     between a pair of quote marks ('' or ""). During processing,
     the  shell can quote certain characters to prevent them from
     taking on a special meaning.  Backslashes used  to  quote  a
     single  character  are removed from the word before the com-
     mand is executed. The pair \newline is removed from  a  word
     before command and parameter substitution.

     All characters enclosed between a pair of single quote marks
     (''),  except  a  single  quote,  are  quoted  by the shell.
     Backslash has no special meaning inside  a  pair  of  single
     quotes. A single quote can be quoted inside a pair of double
     quote marks (for example, "'"), but a single quote  can  not
     be quoted inside a pair of single quotes.

     Inside a pair of double quote marks (""), parameter and com-
     mand substitution occurs and the shell quotes the results to
     avoid blank interpretation and file name generation.  If  $*
     is within a pair of double quotes, the positional parameters
     are substituted and quoted, separated by quoted spaces  ("$1
     $2  ..."). However, if $@ is within a pair of double quotes,
     the  positional  parameters  are  substituted  and   quoted,
     separated  by unquoted spaces ("$1""$2" ... ).  \ quotes the
     characters \, `, , (comma), and $.   The  pair  \newline  is
     removed  before  parameter  and  command  substitution. If a
     backslash precedes characters other than \, `, , (comma), $,
     and  newline,  then  the  backslash  itself is quoted by the
     shell.

  Prompting
     When used interactively, the shell prompts with the value of
     PS1  before  reading  a command. If at any time a newline is

Schily Bourne Shell  Last change: 2012/07/03                   14


User Commands                                               sh(1)

     typed and further input is needed to complete a command, the
     secondary prompt (that is, the value of PS2) is issued.

  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  shell  interacts  with  the
     environment  in several ways. On invocation, the shell scans
     the environment and creates a parameter for each name found,
     giving  it the corresponding value. If the user modifies the
     value of any of these parameters or creates new  parameters,
     none of these affects the environment unless the export com-
     mand is used to bind the shell's parameter to  the  environ-
     ment (see also set -a).  A parameter can be removed from the
     environment with the unset command.  The environment seen by
     any  executed  command  is  thus  composed of any unmodified
     name-value pairs originally inherited by  the  shell,  minus
     any  pairs removed by unset, plus any modifications or addi-
     tions, all of which must be noted in export commands.

     The environment for any simple-command can be  augmented  by
     prefixing  it  with  one  or more assignments to parameters.
     Thus:

       TERM=450 command

     and

       (export TERM; TERM=450; command)

     are equivalent as far as the execution of  command  is  con-
     cerned  if command is not a Special Command. If command is a
     Special Command, then

       TERM=450 command

     modifies the TERM variable in the current shell.

     If the -k flag is set, all keyword arguments are  placed  in
     the  environment, even if they occur after the command name.
     The following example first prints a=b c and c:

Schily Bourne Shell  Last change: 2012/07/03                   15


User Commands                                               sh(1)

       echo a=b  c

       a=b  c

       set  -k

       echo a=b  c

       c

  Signals
     The INTERRUPT and QUIT signals for an  invoked  command  are
     ignored if the command is followed by &.  Otherwise, signals
     have the values inherited by the shell from its parent, with
     the  exception  of  signal 11 (but see also the trap command
     below).

  Execution
     Each time a command is executed, the  command  substitution,
     parameter  substitution,  blank interpretation, input/output
     redirection, and filename generation listed above  are  car-
     ried  out. If the command name matches the name of a defined
     function, the function is  executed  in  the  shell  process
     (note  how  this  differs from the execution of shell script
     files, which require a sub-shell  for  invocation).  If  the
     command  name does not match the name of a defined function,
     but matches one of the Special Commands listed below, it  is
     executed in the shell process.

     The positional parameters $1, $2, ... are set to  the  argu-
     ments of the function. If the command name matches neither a
     Special Command nor the name of a defined  function,  a  new
     process  is  created  and  an attempt is made to execute the
     command via exec(2).

     The shell parameter PATH defines the  search  path  for  the
     directory  containing  the  command.  Alternative  directory
     names are separated by a colon (:).   The  default  path  is
     /usr/bin:.   The  current  directory  is specified by a null
     path name, which can  appear  immediately  after  the  equal
     sign,  between  two  colon  delimiters  anywhere in the path
     list, or at the end of the path list. If  the  command  name
     contains  a  /  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 an a.out file, it
     is assumed to be a file containing shell  commands.  A  sub-
     shell is spawned to read it. A parenthesized command is also
     executed in a sub-shell.

Schily Bourne Shell  Last change: 2012/07/03                   16


User Commands                                               sh(1)

     The location in the search path where a command was found is
     remembered  by  the  shell  (to help avoid unnecessary execs
     later). If the command was found in  a  relative  directory,
     its  location  must  be  re-determined  whenever the current
     directory changes. The shell forgets  all  remembered  loca-
     tions  whenever  the PATH variable is changed or the hash -r
     command is executed (see below).

  Special Commands
     Input/output redirection is now  permitted  for  these  com-
     mands.  File  descriptor  1  is the default output location.
     When Job Control is enabled, additional Special Commands are
     added  to  the  shell's environment (see Job Control section
     below).

     :

         No effect; the command does nothing. A zero exit code is
         returned.

     . filename

         Read and execute commands from filename and return.  The
         search path specified by PATH is used to find the direc-
         tory containing filename.

     [ [expr] ]

         See test builtin below.

     alias [ options ] [alias-name[=value]...]

         The alias command creates, redefines or  lists  existing
         alias  definitions.   An  alias  definition  provides  a
         string value that replaces a command  name  when  it  is
         encountered on the command line.

         The alias command in the Bourne Shell supports temporary
         aliases  (POSIX  aliases)  that  affect only the current
         execution environment as well as persistent aliases that
         affect  all  interactive  shells that are called after a
         persistent alias definition was entered or modified.

         An argument in the form alias-name causes alias to  list
         the  related  alias  on stdout.  An argument in the form
         alias-name=value causes alias to define or  redefine  an
         alias  or  to  push an alias definition on top of an old
         one.  If no argument was given, alias lists all  current
         alias definitions.

Schily Bourne Shell  Last change: 2012/07/03                   17


User Commands                                               sh(1)

         Alias definitions must be written with appropriate quot-
         ing.

         When operating on temporary aliases (i.e.  when  neither
         -g nor -l have been specified), the alias command always
         pushes new definitions on top of older ones.  This makes
         such  alias  definitions temporary in the global aliases
         name space by default, as required by  the  POSIX  stan-
         dard.   The  following  options  may  be  used to modify
         operation:

         -a   Define an alias definition that is expanded on  all
              arguments  of  a command line and not only for com-
              mand names. Use with care.

         -e   List the  everlasting  version  of  the  persistent
              alias  definitions instead of listing the currently
              active definitions that may have been pushed on top
              of the persistent definitions.

         -g   Define or list persistent global aliases  that  are
              stored  in  the  file  $HOME/.globals  and  read by
              interactive shells.  When defining an alias with -g
              in  effect,  alias  by default modifies the current
              top level definition for global aliases.  If  there
              was  no push operation before on the related alias,
              the current definition is made persistent by  writ-
              ing  the definitions to $HOME/.globals.  The option
              -g is not permitted if  persistent  global  aliases
              are disabled (see set command below).

         -l   Define or list persistent directory  local  aliases
              that  are stored in the file .locals in the current
              directory and read  by  interactive  shells.   When
              defining  an  alias  with  -l  in  effect, alias by
              default modifies the current top  level  definition
              for  local aliases.  If there was no push operation
              before on the related alias, the current definition
              is  made  persistent  by writing the definitions to
              .locals in the current directory.  The option -l is
              not  permitted if persistent local aliases are dis-
              abled (see set command below).

         -p   When defining or redefining aliases, enforce a push
              operation  even  if  the  option  -g or -l has been
              specified.  In push mode, the new alias  definition
              is  pushed  temporarily  on top of existing defini-
              tions instead of modifying the current definition.

              When listing aliases, this option implements compa-
              tibility  to  bash/ksh93  and  outputs aliases in a
              form that can be used as  input  to  the  shell  to

Schily Bourne Shell  Last change: 2012/07/03                   18


User Commands                                               sh(1)

              recreate the current aliases.  With -p in effect in
              list mode, the persistent definition and all pushed
              definitions  are listed; otherwise only the current
              active definitions are listed.

         -r   Reload  persistent  aliases  after   removing   all
              current  aliases.   If  persistent aliases are dis-
              abled, the effect  is  the  same  as  with  calling
              unalias  -a.   No  arguments  are allowed with this
              option.

         --raw
              Output the listing in the raw format that  is  used
              in  the  persistent definition files $HOME/.globals
              and .locals.  This  increases  readability  as  the
              quoting needed for defining an alias with the alias
              command is omitted.

         Aliases are often used together with the dosh builtin in
         order to run small parameterized shell scripts.

     alloc

         In case sh has been compiled with storage debugging sup-
         port,  the  alloc  command  prints information about the
         curren state of the storage subsystem;  otherwise  alloc
         is a dummy command.  The alloc command was not supported
         in older versions of sh.

     bg [%jobid ...]

         When Job Control is enabled, the bg command is added  to
         the  user's  environment to manipulate jobs. Resumes the
         execution of a stopped job in the background. If  %jobid
         is omitted the current job is assumed.  (See Job Control
         section below for more detail.)

     break [ n ]

         Exit from the enclosing for or while loop, if any. If  n
         is specified, break n levels.

     cd [ argument ]

         Change the current directory  to  argument.   The  shell
         parameter  HOME  is  the  default  argument.   The shell
         parameter CDPATH defines the search path for the  direc-
         tory  containing  argument.  Alternative directory names

Schily Bourne Shell  Last change: 2012/07/03                   19


User Commands                                               sh(1)

         are separated by a  colon  (:).   The  default  path  is
         <null>  (specifying  the  current directory).  Note: 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 argument begins with a / the search path is not
         used. Otherwise, each directory in the path is  searched
         for argument.

         The previous working directory  is  kept  in  the  shell
         parameter  OLDPWD,  the new working directory is kept in
         the shell parameter PWD.  The top of the directory stack
         is replaced by the new working directory.

     chdir [ dir ]

         chdir changes the shell's working directory to directory
         dir.  If no argument is given, change to the home direc-
         tory of the user. If dir  is  a  relative  pathname  not
         found  in  the  current directory, check for it in those
         directories listed in the CDPATH variable. If dir is the
         name  of  a  shell variable whose value starts with a /,
         change to the directory named by that value.

     continue [ n ]

         Resume the next iteration of the enclosing for or  while
         loop.  If  n  is specified, resume at the n-th enclosing
         loop.

     dirs

         Print the content of the directory stack.   The  top  of
         the  stack is the leftmost element which has the logical
         offset 0.  The next element to the right has the logical
         offset 1.  The logical offset of a directory may be used
         as argument to the pushd and the popd command.  If there
         is  no  directory  stack, the result is the same as with
         calling pwd.  The dirs  command  was  not  supported  in
         older versions of sh.

     dosh command_string [[ command_name ] [ args ]]

         The dosh command executes commands  from  command_string
         with  new  positional  parameters  as if the commands in
         command_string were read from a shell  script.   If  the
         optional  parameter command_name is present, it replaces
         the positional parameter $0.  Additional  arguments  are

Schily Bourne Shell  Last change: 2012/07/03                   20


User Commands                                               sh(1)

         set  up  as  positional  parameters  for the commands in
         command_string, starting with $1.  The dosh command thus
         behaves like sh -c command_string, but does not launch a
         new shell.  Calling return returns  from  command_string
         as  if returning from a function.  Calling exit does not
         exit the shell but returns from the command_string.  The
         dosh  command  is often used together with aliases.  The
         dosh command was not supported in older versions of sh.

     echo [ arguments ... ]

         The words in arguments are written to the shell's  stan-
         dard  output, separated by space characters. See echo(1)
         for fuller usage and description.

         If /usr/ucb appears before any other system directory in
         PATH and the first argument is -n, echo does not print a
         final new-line and does not interpret backslashed escape
         characters.   Otherwise, -n is treated as a normal argu-
         ment.  If the $SYSV3 variable  is  set  in  the  initial
         environment passed to the shell, the -n argument is also
         interpreted,  but  escape  sequences  are  processed  as
         usual.

         The following character sequences are recognized  within
         any of the arguments:

         \a   Alert character.
         \b   Backspace.
         \c   Print line without new-line. All characters follow-
              ing the \c in the argument are ignored.
         \f   Form-feed.
         \n   New-line.
         \r   Carriage return.
         \t   Tab.
         \v   Vertical tab.
         \\   Backslash.
         \0n  Where n is the 8-bit character whose ASCII code  is
              the  1-,  2-  or  3-digit octal number representing
              that character.

     eval [ argument ... ]

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

     exec [ argument ... ]

         The command specified by the arguments  is  executed  in

Schily Bourne Shell  Last change: 2012/07/03                   21


User Commands                                               sh(1)

         place  of  this  shell  without  creating a new process.
         Input/output arguments can appear and, if no other argu-
         ments  are  given,  cause  the  shell input/output to be
         modified.

     exit [ n ]

         Causes the calling shell or shell script  to  exit  with
         the  exit  status  specified  by n.  If n is omitted the
         exit status is that of the last command executed (an EOF
         also causes the shell to exit.)

     export [ name ... ]

         The given names are marked for automatic export  to  the
         environment  of  subsequently  executed  commands. If no
         arguments are  given,  variable  names  that  have  been
         marked  for  export during the current shell's execution
         are listed. (Variable names exported from a parent shell
         are  listed only if they have been exported again during
         the current shell's execution.) Function names  are  not
         exported.

     fg [%jobid ...]

         When Job Control is enabled, the fg command is added  to
         the  user's environment to manipulate jobs. This command
         resumes the execution of a stopped job in the foreground
         and  also  moves  an  executing  background job into the
         foreground. If %jobid is omitted,  the  current  job  is
         assumed.   (See  Job  Control  section  below  for  more
         detail.)

     getopts optstring name [arg...]

         Use in shell scripts to support command syntax standards
         (see  Intro(1)).  This command parses positional parame-
         ters and checks for legal options. See getoptcvt(1)  for
         usage and description.

         The getopts builtin command parses its args or the  glo-
         bal args of the current shell, using optstring as option
         definition.  Each time it is invoked, it places the next
         option  into the variable name and the index of the next
         argument to be  processed  into  OPTIND.   Whenever  the
         shell  or  a shell script is invoked, OPTIND is initial-
         ized to 1.  Calling getopts repeatedly causes one option
         to be retrieved per call.

Schily Bourne Shell  Last change: 2012/07/03                   22


User Commands                                               sh(1)

         When an  option  requires  an  option-argument,  getopts
         places it in the shell variable OPTARG.

         If an illegal option is  encountered,  ?  is  placed  in
         name.   If  optstring starts with a colon and a required
         option-argument is missing, a colon is placed in name.

         When the end of options is  encountered,  getopts  exits
         with  a non-zero exit status.  The special arg -- can be
         used to delimit the end of the options.

         optstring must contain the option  letters  the  command
         using  getopts  recognizes. If a letter is followed by a
         colon, the option is expected to have  an  argument,  or
         group  of  arguments, which must be separated from it by
         white space.

         Unless optstring starts with a colon, getopts prints  an
         error  message  on the standard error when it encounters
         an option letter not included in optstring.

         getopts supports one or more long options as an alias to
         a  short  option.   You  must  enclose  each long option
         equivalent in parentheses, as follows:

           getopts "f:(file)(input-file)o:(output-file)"

         In the above example, both --file and  --input-file  are
         the   equivalent   of   -f,  and  --output-file  is  the
         equivalent of -o.

     hash [ -r ] [ name ... ]

         For each name, the location in the search  path  of  the
         command  specified  by name is determined and remembered
         by the shell. The -r option causes the shell  to  forget
         all  remembered  locations.  If  no arguments are given,
         information  about  remembered  commands  is  presented.
         Hits  is  the number of times a command has been invoked
         by the shell process.  Cost is a  measure  of  the  work
         required  to  locate  a command in the search path. If a
         command is found in a "relative" directory in the search
         path, after changing to that directory, the stored loca-
         tion of that command is recalculated. Commands for which
         this  are done are indicated by an asterisk (*) adjacent
         to the hits information.  Cost is incremented  when  the
         recalculation is done.

Schily Bourne Shell  Last change: 2012/07/03                   23


User Commands                                               sh(1)

     history

         Print the current command history.  The history  command
         is  only  supported  if sh was compiled with support for
         history editing.  The history command was not  supported
         in older versions of sh.

     jobs [-p|-l] [%jobid ...]
     jobs -x command [arguments]

         Reports all jobs that are stopped or  executing  in  the
         background.  If  %jobid  is  omitted,  all jobs that are
         stopped or running in the background are reported.  (See
         Job Control section below for more detail.)

     kill [ -sig ] %job ...
     kill -l

         Sends either the TERM (terminate) signal or  the  speci-
         fied  signal to the specified jobs or processes. Signals
         are either given by number or  by  names  (as  given  in
         signal.h(3HEAD)  stripped  of  the prefix "SIG" with the
         exception that SIGCHD is named  CHLD).   If  the  signal
         being sent is TERM (terminate) or HUP (hangup), then the
         job or process is sent a CONT (continue) signal if it is
         stopped.  The  argument  job  can be the process id of a
         process that is not a member of one of the active  jobs.
         See  Job  Control section below for a description of the
         format of job.  In the second form, kill -l, the  signal
         numbers and names are listed. (See kill(1)).

     login [ argument ... ]

         Equivalent to `exec login argument....' See login(1) for
         usage and description.

     map
     map -r
     map map_from map_to [ comment ]
     map -u map_from

         Handle history editor input mapping.  Input  mapping  in
         the  history editor is automatically managed via TERMCAP
         for the cursor keys and via  manual  maps  in  the  file
         $HOME/.bshmap.   The map command is only supported if sh
         was compiled with support for history editing.

Schily Bourne Shell  Last change: 2012/07/03                   24


User Commands                                               sh(1)

         If the map  command  is  called  without  arguments,  it
         prints the current input mapping.

         If map is called  with  -r,  all  current  mappings  are
         removed and the default mapping is reloaded from TERMCAP
         and $HOME/.bshmap.  Call map  -r  after  changing  TERM,
         TERMCAP  or  TERMPATH  or  when a change was made in the
         file $HOME/.bshmap.

         It map is called with two or three arguments, a new map-
         ping  is set up.  The parameters map_from and map_to may
         need quoting to  be  correctly  passed  to  the  mapping
         engine.

         Call map -u map_from to unmap an existing mapping.   The
         parameter  map_from  needs  quoting  for  both the input
         mapper and the shell to be correctly passed to the  map-
         ping engine.

         For more information and for escape sequences  known  by
         the  mapper  see  the section History Editing Input Map-
         pings below.  The map command was not supported in older
         versions of sh.

     newgrp [ argument ]

         Equivalent to exec newgrp argument.  See  newgrp(1)  for
         usage and description.

     popd [ -offset ]

         Calling popd without argument removes  the  current  top
         directory  stack  element  from  the directory stack and
         then performs a cd to the new top directory  stack  ele-
         ment.   Calling popd with an offset argument removes the
         current the top directory stack element from the  direc-
         tory  stack,  them  removes  the directory stack element
         named by offset from the current directory stack,  makes
         it the new top directory stack element and performs a cd
         to this directory.  If the new directory stack has  more
         than one element, it is printed.  See dirs for an expla-
         nation of offset.  The popd command was not supported in
         older versions of sh.

     pushd [ name ]
     pushd [ -offset ]

         The pushd command is similar to the cd command,  but  it
         keeps  the  previous  working directory on the directory

Schily Bourne Shell  Last change: 2012/07/03                   25


User Commands                                               sh(1)

         stack.  If -offset is used instead of a directory  name,
         it exchanges the content of the top directory stack ele-
         ment with the directory stack element  named  by  offset
         and  then  performs  a cd to the new top directory stack
         element.  If the new directory stack has more  than  one
         element,  it is printed.  See dirs for an explanation of
         offset.  The pushd command was not  supported  in  older
         versions of sh.

     pwd

         Print the current  working  directory.  See  pwd(1)  for
         usage and description.  The current working directory is
         kept in the shell parameter PWD.

     read [ -r ] name ...

         One line is read from the standard input and, using  the
         internal  field  separator, IFS (normally space or tab),
         to delimit word boundaries, the first word  is  assigned
         to  the  first name, the second word to the second name,
         and so forth, with leftover words assigned to  the  last
         name.   Lines  can be continued using \newline.  Charac-
         ters other than newline can be quoted by preceding  them
         with  a  backslash. These backslashes are removed before
         words are assigned to names, and  no  interpretation  is
         done  on  the  character that follows the backslash. The
         return code is 0, unless an EOF is encountered.

         -r   Do not treat a backslash character in  any  special
              way.   Consider  each  backslash  to be part of the
              input line.  The option -r  was  not  supported  in
              older versions of sh.

     readonly [ name ... ]

         The given names are marked readonly and  the  values  of
         the these names can not be changed by subsequent assign-
         ment. If no arguments are given, a list of all  readonly
         names is printed.

     repeat [ -c count ] [ -d delay ] command [ args ]

         The command command is executed repeatedly as if it  was
         called  via  eval.  If the -c option is present, command
         is repeated count times, otherwise execution is repeated
         forever.   If  the  -d option is present, sh waits delay
         seconds before  command  is  executed  again,  otherwise

Schily Bourne Shell  Last change: 2012/07/03                   26


User Commands                                               sh(1)

         there  is  no delay between executions.  The repeat com-
         mand was not supported in older versions of sh.

     return [ n ]

         Causes a function to exit with the return  value  speci-
         fied  by  n.  If n is omitted, the return status is that
         of the last command executed.

     savehistory

         Save the current history  in  the  file  $HOME/.history.
         The  savehistory command was not supported in older ver-
         sions of sh.

     set [ -aefhkmntuvxP [ argument ... ] ]

         -a    Mark variables which are modified or  created  for
               export.

         -e    Exit immediately if a command exits  with  a  non-
               zero exit status.

         -f    Disable file name generation.

         -h    Locate and remember function commands as functions
               are   defined   (function  commands  are  normally
               located when the function is executed).

         -k    All keyword arguments are placed in  the  environ-
               ment  for  a  command, not just those that precede
               the command name.

         -m    Switch job control mode on.

         -n    Read commands but do not execute them.  Note  that
               this  cannot  be  undone as after setting -n, com-
               mands are no longer executed.  Setting  -n  in  an
               interactive  shell  removes  the  ability to leave
               this shell.

Schily Bourne Shell  Last change: 2012/07/03                   27


User Commands                                               sh(1)

         -t    Exit after reading and executing one command.

         -o [option]
               If option  is  not  specified,  list  the  current
               option  setting  to  stdout;  when invoked with +o
               instead of -o, the output is written in  a  format
               that  is  suitable  to  reinput  to  the  shell to
               restore the current setting. When invoked with  +o
               and  with  option  argument, the related option is
               cleared.  The +o option may be repeated to  enable
               or  disable  multiple options. The value of option
               must be one of the following:

               allexport      Equivalent to -a.
               errexit        Equivalent to -e.
               globalaliases  Enables/disables persistent  global
                              aliases that are read from the file
                              $HOME/.globals.  Changing the state
                              for  this  option first removes all
                              current global aliases.  If the new
                              state  is on, the persistent global
                              aliases are loaded.
               hashall        Equivalent to -h.
               interactive    Equivalent to -i.
               keyword        Equivalent to -k.
               localaliases   Enables/disables persistent  direc-
                              tory  local  aliases  that are read
                              from  the  file  .locals   in   the
                              current  directory.   Local aliases
                              are specific to the current working
                              directory.   Changing the state for
                              this  option  first   removes   all
                              current  local aliases.  If the new
                              state is on, the  persistent  local
                              aliases are loaded from the current
                              directory.
               monitor        Equivalent to -m.
               noexec         Equivalent to -n.
               noglob         Equivalent to -f.
               nounset        Equivalent to -u.
               onecmd         Equivalent to -t.
               pfsh           Equivalent to -P.
               privileged     Equivalent to -p.
               restricted     Equivalent to -r.
               stdin          Equivalent to -s.
               verbose        Equivalent to -v.
               xtrace         Equivalent to -x.

         -u    Treat unset variables as an error when  substitut-
               ing.

Schily Bourne Shell  Last change: 2012/07/03                   28


User Commands                                               sh(1)

         -v    Print shell input lines as they are read.

         -x    Print commands and their  arguments  as  they  are
               executed.

         -P    Switch profile mode on.  In this mode,  the  shell
               runs privilleged programs automatically in privil-
               leged mode.  See pfexec(1)  for  further  informa-
               tion.   This  feature is only supported on Solaris
               10 and above.  The option -P was not supported  in
               older versions of sh.

         -     Clear the -v and -x option.

         --    Stop option processing.   Further  parameters  are
               handled as normal args even when they start with a
               -.

         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 can be found in  $-.
         The  remaining  arguments  are positional parameters and
         are assigned, in order, to $1, $2, ... If  no  arguments
         are given, the values of all names are printed.

     shift [ n ]

         The positional parameters from $n+1 ... are  renamed  $1
         ... . If n is not given, it is assumed to be 1.

     stop pid ...

         Halt execution of the process number pid.  (see ps(1)).

     suspend

         Stops the execution of the current shell (but not if  it
         is the login shell).

     test [expr]

         Evaluate conditional expressions. See test(1) for  usage
         and description. If the value of the expression expr, is
         true then test returns zero exit  status;  otherwise,  a

Schily Bourne Shell  Last change: 2012/07/03                   29


User Commands                                               sh(1)

         non  zero  exit  status is returned.  test returns a non
         zero exit status if there are no arguments.

         The following primaries are used to  evaluate  a  condi-
         tion:

         -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  a  regular  file.
                   Alternatively,  if  Bourne Shell users specify
                   /usr/ucb  before  /usr/bin   in   their   PATH
                   environment  variable,  then test returns true
                   if file exists and is (not-a-directory).
         -g file   True if file exists and its set group ID  flag
                   is set.
         -h file   True if file exists and is a symbolic link.
         -k file   True if file exists and has its set sticky bit
                   set.
         -L file   True if file exists and is a symbolic link.
         -n string True if the length of string is non-zero.
         -p file   True if  file  exists  and  is  a  named  pipe
                   (FIFO).
         -r file   True if file exists and is readable.
         -s file   True if file exists and  has  a  size  greater
                   then zero.
         -t [file-descriptor]
                   True if the file whose file descriptor  number
                   is  file-descriptor  is open and is associated
                   with a terminal.  If  file-descriptor  is  not
                   specified, 1 is used as a default value.
         -u file   True if file exists and its set user  ID  flag
                   is set.
         -w file   True if file exists and is writable.
         -x file   True if file exists and is  executable.   True
                   indicates  only  that  the execute flag is on.
                   If file is a directory,  true  indicates  that
                   file can be searched.
         -z string True if the length of string is zero.

         string    True if string is not the null string.
         s1 = s2   True if the strings s1 and s2 are identical.
         s1 != s2  True if the strings s1 and s2 are not  identi-
                   cal.
         n1 -eq n2 True if the integers n1 and n2  are  algebrai-
                   cally equal.
         n1 -ne n2 True if the integers n1 and n2 are  not  alge-
                   braically equal.

Schily Bourne Shell  Last change: 2012/07/03                   30


User Commands                                               sh(1)

         n1 -gt n2 True  if  the  integer  n1  is   algebraically
                   greater than the integer n2.
         n1 -ge n2 True  if  the  integer  n1  is   algebraically
                   greater or equal to the integer n2.
         n1 -lt n2 True if the integer n1 is  algebraically  less
                   than the integer n2.
         n1 -le n2 True if the integer n1 is  algebraically  less
                   or equal to the integer n2.

         The primaries above may be combined with  the  following
         operators:

         ( expr )  Bracketing to group precedence.
         !         unary negation operator.
         -a        binary and operator.  The -a binary primary is
                   left  associative  and  has  higher precedence
                   than the -o binary primary.
         -o        binary or operator.  The -o binary primary  is
                   left associative.

     times

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

     trap [ argument n [ n2 ... ]]

         The command argument is to be read and executed when the
         shell   receives  numeric  or  symbolic  signal(s)  (n).
         (Note:  argument is scanned once when the  trap  is  set
         and once when the trap is taken.) Trap commands are exe-
         cuted in order of signal number  or  corresponding  sym-
         bolic  names. Any attempt to set a trap on a signal that
         was ignored on entry to the current  shell  is  ineffec-
         tive.  An  attempt  to  trap on signal 11 (memory fault)
         produces an error. If argument is absent, all trap(s)  n
         are  reset  to their original values. If argument is the
         null string, this signal is ignored by the shell and  by
         the commands it invokes. If n is 0, the command argument
         is executed on exit from the  shell.  The  trap  command
         with  no  arguments prints a list of commands associated
         with each signal number.

     type [ name ... ]

         For each name, indicate how it would be  interpreted  if
         used as a command name.

Schily Bourne Shell  Last change: 2012/07/03                   31


User Commands                                               sh(1)

     ulimit [ [-HS] [-a | -cdflmnstuv] ]
     ulimit [ [-HS] [-c|-d|-f|-l|-m|-n|-s|-t|-u|-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  can 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 that the current
         limit, if any, be removed. Any user can set a soft limit
         to  any  value less than or equal to the hard limit. Any
         user can lower a hard limit. Only a user with  appropri-
         ate  privileges  can  raise  or remove a hard limit. See
         getrlimit(2).

         The -H option specifies a  hard  limit.  The  -S  option
         specifies  a soft limit. If neither option is specified,
         ulimit sets 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)

         -l   maximum size of locked memory (in kbytes)

         -m   maximum resident set size (in kbytes)

         -n   maximum file descriptor plus 1

         -s   maximum size of stack segment (in kbytes)

         -t   maximum CPU time (in seconds)

         -u   maximum number of child processes

         -v   maximum size of virtual memory (in kbytes)

         Not all resources are supported on all platforms.

         Run the sysdef(1M) command to obtain the maximum  possi-
         ble  limits  for your system. The values reported are in
         hexadecimal, but can be translated into decimal  numbers
         using the bc(1) utility. See swap(1M).)

Schily Bourne Shell  Last change: 2012/07/03                   32


User Commands                                               sh(1)

         As an example of ulimit, to limit the  size  of  a  core
         file dump to 0 Megabytes, type the following:

           ulimit -c 0

     umask [ -S ] [ mask ]

         The  user  file-creation  mask  is  set  to  mask   (see
         umask(1)).   The mask may either be an octal numner or a
         symbolic notation (see chmod(1)).  If the symbolic nota-
         tion  for mask starts with a - sign, it must be preceded
         with -- to keep it from being interpreted as an  option.
         The  command  umask -- -w sets the file-creation mask so
         that subsequently created files  have  all  their  write
         bits cleared.

         If mask is omitted, the current value  of  the  mask  is
         printed.

         Do not use a symbolic mask or -S in Bourne Shell scripts
         that should be portable to older revisions.

         -S   Print the current file-creation  mask  in  symbolic
              form.   The  output is suitable as argument for the
              umask command.

         The symbolic mode was not supported in older versions of
         sh.

     unalias [ options ] [alias-name...]

         The unalias command removes existing alias definitions.

         The unalias command in the Bourne  Shell  supports  tem-
         porary  aliases  (POSIX  aliases)  that  affect only the
         current execution  environment  as  well  as  persistent
         aliases  that  affect  all  interactive  shells that are
         called after a persistent alias definition  was  entered
         or modified.

         When operating on temporary aliases (i.e.  when  neither
         -g  nor  -l  have been specified), all alias definitions
         for a specified alias-name are popped from the  existing
         global  definitions.  No alias definition for the speci-
         fied alias-name remains active, but the file  with  per-
         sistent  alias  definitions  is not touched.  This makes
         unalias compatible to the POSIX  standard  and  able  to

Schily Bourne Shell  Last change: 2012/07/03                   33


User Commands                                               sh(1)

         support  persistent  aliases at the same time.  The fol-
         lowing options may be used to modify operation:

         -a   Remove all alias definitions from the current shell
              execution  environment.  No arguments are permitted
              with this option.  As  the  persistent  definitions
              are  not  touched,  the  persistent  aliases may be
              restored by calling alias -r.

         -g   Pop a single alias definition for  alias-name  from
              the  global  aliases.  If the related alias defini-
              tion is the last for alias-name (use  alias  -p  -g
              alias-name  to  verify),  remove  it  from the per-
              sistent global aliases that are stored in the  file
              $HOME/.globals and read by interactive shells.

         -l   Pop a single alias definition for  alias-name  from
              the local aliases.  If the related alias definition
              is the last for alias-name (use alias -p -l  alias-
              name  to  verify),  remove  it  from the persistent
              local aliases that are stored in the  file  .locals
              in  the  current  directory and read by interactive
              shells.

         -p   When removing aliases, enforce a pop all  operation
              even if the option -g or -l has been specified.  In
              pop all mode, all alias definitions for a specified
              alias-name  are  popped  from  the existing defini-
              tions.  No  alias  definition  for  the   specified
              alias-name  remains  active, but the file with per-
              sistent alias definitions is not touched.

     unset [ name ... ]

         For each name,  remove  the  corresponding  variable  or
         function value. The variables PATH, PS1, PS2, MAILCHECK,
         and IFS cannot be unset.

     wait [ n ]

         Wait for your background process whose process id  is  n
         and  report its termination status. If n is omitted, all
         your shell's currently active background  processes  are
         waited for and the return code is zero.

  Job Control (jsh)
     When the shell is invoked as jsh, Job Control is enabled  in
     addition  to  all  of the functionality described previously
     for  sh.   Typically,  Job  Control  is  enabled   for   the

Schily Bourne Shell  Last change: 2012/07/03                   34


User Commands                                               sh(1)

     interactive  shell only. Non-interactive shells typically do
     not benefit from the added functionality of Job Control.

     With Job Control enabled, every command or pipeline the user
     enters  at  the terminal is called a job.  All jobs exist in
     one of the  following  states:  foreground,  background,  or
     stopped. These terms are defined as follows:

         1.   A job in the foreground has read and  write  access
              to the controlling terminal.

         2.   A job in the background is denied read  access  and
              has  conditional  write  access  to the controlling
              terminal (see stty(1)).

         3.   A stopped job is a job that has been  placed  in  a
              suspended  state,  usually as a result of a SIGTSTP
              signal (see signal.h(3HEAD)).

     Every job that the  shell  starts  is  assigned  a  positive
     integer,  called  a job number which is tracked by the shell
     and is used as an identifier to  indicate  a  specific  job.
     Additionally,  the shell keeps track of the current and pre-
     vious jobs. The current job is the most  recent  job  to  be
     started  or  restarted.  The  previous job is the first non-
     current job.

     The acceptable syntax for a Job Identifier is of the form:

     %jobid

     where jobid can be specified in any of  the  following  for-
     mats:

     % or +       For the current job.

     -            For the previous job.

     ?<string>    Specify the job  for  which  the  command  line
                  uniquely contains string.

     n            For job number n.

Schily Bourne Shell  Last change: 2012/07/03                   35


User Commands                                               sh(1)

     pref         Where pref is a unique prefix  of  the  command
                  name.  For  example,  if the command ls -l name
                  were running in the  background,  it  could  be
                  referred to as %ls.  pref cannot contain blanks
                  unless it is quoted.

     When Job Control is  enabled,  the  following  commands  are
     added to the user's environment to manipulate jobs:

     bg [%jobid ...]

         Resumes the execution of a  stopped  job  in  the  back-
         ground. If %jobid is omitted the current job is assumed.

     fg [%jobid ...]

         Resumes the execution of a  stopped  job  in  the  fore-
         ground,  also moves an executing background job into the
         foreground. If %jobid is  omitted  the  current  job  is
         assumed.

     jobs [-p|-l] [%jobid ...]
     jobs -x command [arguments]

         Reports all jobs that are stopped or  executing  in  the
         background.  If  %jobid  is  omitted,  all jobs that are
         stopped or running in the background  is  reported.  The
         following options modify/enhance the output of jobs:

         -l    Report the process group ID and working  directory
               of the jobs.

         -p    Report only the process group ID of the jobs.

         -x    Replace any jobid found in  command  or  arguments
               with  the corresponding process group ID, and then
               execute command passing it arguments.

     kill [ -signal ] %jobid

         Builtin version of kill to provide the functionality  of
         the kill command for processes identified with a jobid.

Schily Bourne Shell  Last change: 2012/07/03                   36


User Commands                                               sh(1)

     stop %jobid ...

         Stops the execution of a background job(s).

     suspend

         Stops the execution of the current shell (but not if  it
         is the login shell).

     wait [%jobid ...]

         wait builtin accepts a  job  identifier.  If  %jobid  is
         omitted  wait  behaves  as described above under Special
         Commands.

  Command History Editing
     If compiled with -DINTERACTIVE, the Bourne Shell includes  a
     command  line  history  and  a  command  line  editor.   The
     behavior of the command line editor is the  same  as  intro-
     duced  in  1984  with  bsh(1)  and  has been inspired by the
     behavior of the editor ved(1).

     The history is implemented as limited ring buffer.  The size
     of  the  ring  buffer is in HISTORY.  Command lines from the
     existing history may be retrieved with the cursor keys (Cur-
     sor  up  and Cursor down).  Typing <CR> or <LF> executes the
     command on the line with the cursor.

     Each new command is appended to the end of the history.   If
     the  maximum size of the history is reached, the oldest com-
     mand is removed.  Identical commands are avoided as  far  as
     possible.   If  an command is entered that is already in the
     history, it is moved to the end of the history.

  History Editing Commands
     The following commands allow to edit a command line:

     ^H        Move cursor one character to the left.

     ^F        Move cursor one character to the right.

     ^D        Erase the character under the cursor.

     DEL       Erase one character to the left of the cursor.

     ^U        Erase the whole line.

     ^^        Quote next character.

Schily Bourne Shell  Last change: 2012/07/03                   37


User Commands                                               sh(1)

     CR        Finish current line and execute it.

     NL        Finish current line and execute it.

     TAB       Do file name completion for the word to  the  left
               side of the cursor.  If more than one file matches
               the current partial filename, a BEEP is generated.
               Typing  a  second  TAB displays a list of matching
               names.

     ESC- ^H   Move cursor one word to the left.

     ESC- ^F   Move cursor one word to the right.

     ESC- ^D   Erase the word under the cursor to the right.

     ESC- DEL  Erase the word to the left of the cursor.

     The following commands are available to navigate within  the
     history:

     ^P        Move cursor to the previous history line.

     ^N        Move cursor to the next history line.

     ESC- ^P   Search backwards in  the  history.   The  user  is
               prompted  for  a  search  pattern.   The  previous
               search string is kept and may be edited.  To enter
               a new search string, first type ^U.

     ESC- ^N   Search forwards  in  the  history.   The  user  is
               prompted  for  a  search  pattern.   The  previous
               search string is kept and may be edited.  To enter
               a new search string, first type ^U.

     ESC- p    Search backwards in the history.   Clear  the  old
               search pattern first.

     ESC- n    Search forwards in the  history.   Clear  the  old
               search pattern first.

     ESC- CR   Return to the history line that was in use  before
               the last search command.

     Other characters are inserted into the  command  line  text.
     Characters that are listed above as being edit command char-
     acters need to be quoted using the quote character ^^.  If a
     line  is  entered  via CR or NL, the current position of the
     cursor is irrelevant.

     The command line editor remembers the  cursor  position  for
     each  command line in the history during the lifetime of the

Schily Bourne Shell  Last change: 2012/07/03                   38


User Commands                                               sh(1)

     shell process.

  History Editing Input Mappings
     The command line history editor maps input from the terminal
     into  mapped text before it is interpreted by the editor. If
     a match is found on the input from the terminal, the related
     input  text is directly replaced by it's replacement string.
     A mapping may be prevented by typing the map quote character
     which  is the nul character (^@), directly before the match-
     ing text is entered.

     At startup (directly before the first shell  command  prompt
     is  shown),  the  command line history editor first tries to
     initialize the terminal  setup  using  the  variables  HOME,
     TERM,  TERMCAP and TERMPATH.  Then it tries to read the file
     $HOME/.bshmap to retrieve additional mappings.

     If TERM is not set, the mapper establishes standard mappings
     for the cursor keys assuming an ANSI-compatible terminal.

     Each line in the file $HOME/.bshmap has the following struc-
     ture:

       map_from:map_to:comment

     map_from is the string that is going to be replaced  in  the
     input,  map_to  is  the  string  replacement  and comment is
     optional comment that is not used for  mapping  itself.   If
     both  map_from  and  map_to  are  empty, the related line is
     ignored by the mapper, so a line may contain:

       ::comment

     The maximum length of map_from is 16 characters, the maximum
     length  of  map_to  is  128  characters.   Each  entry takes
     exactly one line in the file.  A  nul  character  in  either
     map_from or map_to is currently not supported.

     Control characters may be  written  using  the  same  escape
     sequences as permitted with TERMCAP.

     The builtin map command may be used to enter additional maps
     at runtime.

     As the nul character is the quote character of  the  mapper,
     enter  two  nul  characters  to get one nul character in the
     edit input.  To enter a mapped string (such  as  cursor  key
     output), first enter the quote character of the command line
     history editor (^), then enter nul character and finally the
     otherwise mapped text.

Schily Bourne Shell  Last change: 2012/07/03                   39


User Commands                                               sh(1)

  Termcap
     The termcap data base is used to make  the  command  history
     editor  independent  from  the terminal capabilities. Cursor
     key output is retrieved from the data base and mapped to the
     cursor movement commands of the history editor.

     The following variables are used by termcap:

     HOME      To find the private files like $HOME/.termcap.

     TERM      A name representing the type of the current termi-
               nal.

     TERMCAP   This environment variable holds either  a  precom-
               piled  termcap entry or the pathname to be used to
               find a termcap  database  file.   If  it  holds  a
               precompiled  entry  that  does  not match the TERM
               environment, the termcap database is parsed as  if
               the  TERMCAP  environment is not set.  See section
               Parameter Substitution above for more information.

     TERMPATH  If TERMCAP is empty or not set, then the  TERMPATH
               environment is scanned for pathnames of files that
               contain a termcap database. It  holds  a  list  of
               filenames separated by colons or spaces (i.e., ":"
               or " ").  See section Parameter Substitution above
               for more information.

     The following escape sequences are understood by the termcap
     implementation used by sh:

     \\      The literal character \.
     \E      The ESC character (ASCII 033).
     \e      The ESC character (ASCII 033).
     \^      The literal character ^.
     \:      The literal character :.
     \,      The literal character ,.
     \b      The BACKSPACE character (ASCII 010).
     \f      The FORMFEED character (ASCII 014).
     \l      The LINEFEED character (ASCII 012).
     \n      The NEWLINE character (ASCII 012).
     \r      The CR character (ASCII 015).
     \s      The SPACE character (ASCII 040).
     \t      The TAB character (ASCII 007).
     \v      The VERTICAL TAB character (ASCII 013).
     ^c      Maps to control(c) for any appropriate c.
     ^?      The DEL character (ASCII 0177).
     \nnn    Maps to a character with  the  octal  representation
             nnn with 1..3 octal digits.
     \0      Maps to ASCII 0200.
     ^@      Maps to ASCII 00.

Schily Bourne Shell  Last change: 2012/07/03                   40


User Commands                                               sh(1)

     Mapping \0 to ASCII 0200 is required by the termcap documen-
     tation.  A real nul character created from (^@) is currently
     neither supported by the upper layers of termcap, nor by the
     upper layers of the mapper.

  Large File Behavior
     The Bourne Shell is large file aware.  See largefile(5)  for
     an  extended  description of the behavior of sh and jsh when
     encountering files greater than or equal to 2 Gbyte  (  2^31
     bytes).


EXIT STATUS

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

  jsh Only
     If the shell is invoked as jsh and an  attempt  is  made  to
     exit  the  shell  while  there  are  stopped jobs, the shell
     issues one warning:

     There are stopped jobs.

     This is the only message. If another exit attempt  is  made,
     and there are still stopped jobs they are sent a SIGHUP sig-
     nal from the kernel and the shell is exited.


FILES

     /etc/profile   The system initialization file, executed  for
                    login shells.
     /etc/sh.shrc   The system wide startup  file,  executed  for
                    interactive shells.
     $HOME/.profile The personal  initialization  file,  executed
                    for login shells after /etc/profile.
     $HOME/.shrc    The personal  initialization  file,  executed
                    after  /etc/sh.shrc,  for  interactive shells
                    when ENV is not set.
     /etc/termcap   The system wide TERMCAP file.
     $HOME/.termcap The personal TERMCAP file.
     $HOME/.bshmap  A file with hand-crafted cursor mappings  for
                    the history editor.
     $HOME/.history File with the saved the history after logout.
     $HOME/.globals File with  persistent  global  alias  defini-
                    tions.
     .locals        File with persistent  directory  local  alias
                    definitions.

Schily Bourne Shell  Last change: 2012/07/03                   41


User Commands                                               sh(1)

     /tmp/sh*       Used as temporary files  for  here  documents
                    (<< redirection).
     /dev/null      NULL device used as stdin for non job-control
                    background jobs.
     /usr/lib/rsh   The location of the restricted  Bourne  Shell
                    binary.


ATTRIBUTES

     See attributes(5) for descriptions of the  following  attri-
     butes:

  /usr/bin/sh, /usr/bin/jsh
     ____________________________________________________________
    |       ATTRIBUTE TYPE        |       ATTRIBUTE VALUE       |
    |_____________________________|_____________________________|
    | Availability                | SUNWcsu                     |
    |_____________________________|_____________________________|
    | CSI                         | Enabled                     |
    |_____________________________|_____________________________|


SEE ALSO

     Intro(1), bc(1),  echo(1),  getoptcvt(1),  kill(1),  bsh(1),
     ved(1),  ksh(1),  login(1),  newgrp(1),  pfsh(1), pfexec(1),
     ps(1), pwd(1), set(1), shell_builtins(1), stty(1),  test(1),
     umask(1),  wait(1),  rsh(1M),  su(1M), swap(1M), sysdef(1M),
     termcap(1), dup(2), exec(2),  fork(2),  pipe(2),  ulimit(2),
     getrlimit(2),  setrlimit(2), setlocale(3C), signal.h(3HEAD),
     passwd(4),  profile(4),  attributes(5),  environ(5),  large-
     file(5), XPG4(5)


WARNINGS

     The use of setuid shell scripts is strongly discouraged.


NOTES

     For compatibility with the Thompson shell, ^  is  a  synonym
     for | as pipeline separator.  Do not use in new scripts.

     Words used for filenames in input/output redirection are not
     interpreted  for  filename generation (see File Name Genera-
     tion section above). For example, cat file1  >a*  creates  a
     file named a*.

     Because commands in pipelines are run as separate processes,
     variables  set  in  a  pipeline have no effect on the parent
     shell.

     If the input or the output of  a  while  or  until  loop  is
     redirected, the commands in the loop are run in a sub-shell,
     and variables set or changed there have  no  effect  on  the

Schily Bourne Shell  Last change: 2012/07/03                   42


User Commands                                               sh(1)

     parent process:

          lastline=
          while read line
          do

                  lastline=$line
          done < /etc/passwd
          echo "lastline=$lastline"       # lastline is empty!

     In these cases, the input or output  can  be  redirected  by
     using exec, as in the following example:

          # Save standard input (file descriptor 0) as file
          # descriptor 3, and redirect standard input from the file
          /etc/passwd:

          exec 3<&0               # save standard input as fd 3
          exec </etc/passwd       # redirect input from file

          lastline=
          while read line
          do
                  lastline=$line
          done

          exec 0<&3               # restore standard input
          exec 3<&-               # close file descriptor 3
          echo "$lastline"        # lastline

     If you  get  the  error  message,  "cannot  fork,  too  many
     processes",  try  using the wait(1) command to clean up your
     background processes. If this doesn't help, the system  pro-
     cess  table  is  probably  full  or you have too many active
     foreground processes. There is a limit to the number of pro-
     cess  ids  associated with your login, and to the number the
     system can keep track of.

     Only the last process in a pipeline can be waited for.

     If a command is executed, and a command with the  same  name
     is  installed  in  a directory in the search path before the
     directory where the original command was  found,  the  shell
     continues  to  exec  the  original  command.   Use  the hash

Schily Bourne Shell  Last change: 2012/07/03                   43


User Commands                                               sh(1)

     command to correct this situation.

     The Bourne shell has a limitation on the effective UID for a
     process.  If this UID is less than 100 (and not equal to the
     real UID of the process), then the UID is reset to the  real
     UID of the process.

     If not in job control mode, the shell implements both  fore-
     ground  and  background  jobs  in the same process group and
     they all receive the same signals, which can lead  to  unex-
     pected  behavior. It is, therefore, recommended to switch on
     job control mode via set -m in an interactive environment.

     There is only one namespace for both functions  and  parame-
     ters.   A  function  definition will delete a parameter with
     the same name and vice-versa.

     Parameter assignments that precede a special command  affect
     the  shell  itself.  Parameter  assignments that precede the
     call of a function are ignored.

     When the shell executes a shell script that attempts to exe-
     cute  a  non-existent command interpreter, the shell returns
     an erroneous diagnostic message that the shell  script  file
     does not exist.

Schily Bourne Shell  Last change: 2012/07/03                   44


Man(1) output converted with man2html


FhG FhG FOKUS BerliOS Schily Schily's Home VED powered