ASH.1
上传用户:jnzhq888
上传日期:2007-01-18
资源大小:51694k
文件大小:40k
源码类别:

操作系统开发

开发平台:

WINDOWS

  1. SH(1)                     Minix Programmer's Manual                      SH(1)
  2. NAME
  3.      ash, command, getopts, hash, jobs, local, return, setvar, unset - a shell
  4. SYNOPSIS
  5.      ash [ -efIijnsxz ] [ +efIijnsxz ] [ -c command ] [ arg ] ...
  6. COPYRIGHT
  7.      Copyright 1989 by Kenneth Almquist.
  8. DESCRIPTION
  9.      Ash is a version of sh with features similar to those  of  the  System  V
  10.      shell.   This  manual page lists all the features of ash but concentrates
  11.      on the ones not in other shells.
  12.   Invocation
  13.      If the -c options is given, then the shell executes the  specified  shell
  14.      command.   The -s flag cause the shell to read commands from the standard
  15.      input (after executing any command specified  with  the  -c  option.   If
  16.      neither  the -s or -c options are set, then the first arg is taken as the
  17.      name of a file to read commands from.   If  this  is  impossible  because
  18.      there  are  no  arguments following the options, then ash will set the -s
  19.      flag and will read commands from the standard input.
  20.      The shell sets the initial value of the positional  parameters  from  the
  21.      args  remaining  after  any arg used as the name of a file of commands is
  22.      deleted.
  23.      The flags (other than -c) are  set  by  preceding  them  with  ``-''  and
  24.      cleared  by  preceding them with ``+''; see the set builtin command for a
  25.      list of flags.  If no value is specified for the -i flag, the -s flag  is
  26.      set,  and  the  standard  input  and output of the shell are connected to
  27.      terminals, then the -i flag will be set.  If no value  is  specified  for
  28.      the -j flag, then the -j flag will be set if the -i flag is set.
  29.      When the shell is invoked with the -c option,  it  is  good  practice  to
  30.      include  the  -i flag if the command was entered interactively by a user.
  31.      For compatibility with the System V shell,  the  -i  option  should  come
  32.      after the -c option.
  33.      If the first character of argument zero to the shell is ``-'', the  shell
  34.      is  assumed  to be a login shell, and the files /etc/profile and .profile
  35.      are read if they exist.  If the environment variable  SHINIT  is  set  on
  36.      entry  to  the  shell,  the  commands  in  SHINIT are normally parsed and
  37.      executed.  SHINIT is not examined if the shell is a login shell, or if it
  38.      the  shell  is  running a shell procedure.   (A shell is considered to be
  39.      running a shell procedure if neither the -s nor the -c options are set.)
  40.   Control Structures
  41. 7BSD                              March 7, 1991                              1
  42. SH(1)                     Minix Programmer's Manual                      SH(1)
  43.      A list is a sequence of zero or  more  commands  separated  by  newlines,
  44.      semicolons,  or  ampersands,  and  optionally  terminated by one of these
  45.      three characters.  (This differs from the System V shell, which  requires
  46.      a list to contain at least one command in most cases.)  The commands in a
  47.      list are executed in the order they are written.  If command is  followed
  48.      by  an  ampersand,  the  shell starts the command and immediately proceed
  49.      onto the next command; otherwise it waits for the  command  to  terminate
  50.      before proceeding to the next one.
  51.      ``&&'' and ``||''  are  binary  operators.   ``&&''  executes  the  first
  52.      command,  and then executes the second command iff the exit status of the
  53.      first command is zero.   ``||''  is  similar,  but  executes  the  second
  54.      command  iff the exit status of the first command is nonzero.  ``&&'' and
  55.      ``||'' both have the same priority.
  56.      The ``|'' operator is a binary operator which feeds the  standard  output
  57.      of  the first command into the standard input of the second command.  The
  58.      exit status of the ``|'' operator  is  the  exit  status  of  the  second
  59.      command.  ``|'' has a higher priority than ``||'' or ``&&''.
  60.      An if command looks like
  61.          if list
  62.          then    list
  63.        [ elif list
  64.            then  list ] ...
  65.        [ else  list ]
  66.          fi
  67.      A while command looks like
  68.          while list
  69.          do      list
  70.          done
  71.      The two lists are executed repeatedly while the exit status of the  first
  72.      list  is  zero.   The until command is similar, but has the word until in
  73.      place of while
  74.       repeats until the exit status of the first list is zero.
  75.      The for command looks like
  76.          for variable in word...
  77.          do      list
  78.          done
  79.      The words are expanded, and then the list is executed repeatedly with the
  80.      variable  set  to  each  word  in turn.  do and done may be replaced with
  81.      ``{'' and ``}''.
  82. 7BSD                              March 7, 1991                              2
  83. SH(1)                     Minix Programmer's Manual                      SH(1)
  84.      The break and continue commands look like
  85.          break [ num ]
  86.          continue [ num ]
  87.      Break  terminates  the  num  innermost  for  or  while  loops.   Continue
  88.      continues  with  the  next iteration of the num'th innermost loop.  These
  89.      are implemented as builtin commands.
  90.      The case command looks like
  91.          case word in
  92.          pattern) list ;;
  93.          ...
  94.          esac
  95.      The pattern can actually be one or more patterns  (see  Patterns  below),
  96.      separated by ``|'' characters.
  97.      Commands may be grouped by writing either
  98.          (list)
  99.      or
  100.          { list; }
  101.      The first of these executes the commands in a subshell.
  102.      A function definition looks like
  103.          name ( ) command
  104.      A function definition  is  an  executable  statement;  when  executed  it
  105.      installs  a  function named name and returns an exit status of zero.  The
  106.      command is normally a list enclosed between ``{'' and ``}''.
  107.      Variables may be declared to be local to a  function  by  using  a  local
  108.      command.   This  should  appear  as the first staement of a function, and
  109.      looks like
  110.          local [ variable | - ] ...
  111.      Local is implemented as a builtin command.
  112.      When a variable is made local, it inherits the initial value and exported
  113.      and  readonly  flags  from  the  variable  with  the  same  name  in  the
  114.      surrounding scope, if there is one.  Otherwise, the variable is initially
  115.      unset.   Ash  uses  dynamic  scoping,  so that if you make the variable x
  116.      local to function f, which then  calls  function  g,  references  to  the
  117. 7BSD                              March 7, 1991                              3
  118. SH(1)                     Minix Programmer's Manual                      SH(1)
  119.      variable x made inside g will refer to the variable x declared inside  f,
  120.      not to the global variable named x.
  121.      The only special parameter than can be made local is ``-''.  Making ``-''
  122.      local  any  shell options that are changed via the set command inside the
  123.      function to be restored  to  their  original  values  when  the  function
  124.      returns.
  125.      The return command looks like
  126.          return [ exitstatus ]
  127.      It terminates the currently executing function.  Return is implemented as
  128.      a builtin command.
  129.   Simple Commands
  130.      A simple command is a sequence of  words.   The  execution  of  a  simple
  131.      command  proceeds  as  follows.   First,  the  leading  words of the form
  132.      ``name=value'' are stripped off and assigned to the  environment  of  the
  133.      command.   Second,  the  words  are expanded.  Third, the first remaining
  134.      word is taken as the command name that command is located.   Fourth,  any
  135.      redirections  are performed.  Fifth, the command is executed.  We look at
  136.      these operations in reverse order.
  137.      The execution of the command varies with the type of command.  There  are
  138.      three  types  of commands:  shell functions, builtin commands, and normal
  139.      programs.
  140.      When a shell function is executed, all of the shell positional parameters
  141.      (except  $0,  which  remains  unchanged) are set to the parameters to the
  142.      shell function.   The  variables  which  are  explicitly  placed  in  the
  143.      environment  of  the  command  (by placing assignments to them before the
  144.      function name) are made local to the  function  and  are  set  to  values
  145.      given.   Then  the  command given in the function definition is executed.
  146.      The positional parameters are restored to their original values when  the
  147.      command completes.
  148.      Shell builtins are executed internally to the shell, without  spawning  a
  149.      new process.
  150.      When a normal program is executed, the shell runs  the  program,  passing
  151.      the  parameters  and the environment to the program.  If the program is a
  152.      shell procedure, the shell will interpret the program in a subshell.  The
  153.      shell  will  reinitialize itself in this case, so that the effect will be
  154.      as if a new shell had been invoked to handle the shell procedure,  except
  155.      that  the  location  of  commands  located  in  the  parent shell will be
  156.      remembered by the child.  If the program is a file beginning with ``#!'',
  157.      the remainder of the first line specifies an interpreter for the program.
  158.      The shell (or the operating system, under Berkeley  UNIX)  will  run  the
  159. 7BSD                              March 7, 1991                              4
  160. SH(1)                     Minix Programmer's Manual                      SH(1)
  161.      interpreter in this case.  The arguments to the interpreter will  consist
  162.      of  any arguments given on the first line of the program, followed by the
  163.      name of the program, followed by the arguments passed to the program.
  164.   Redirection
  165.      Input/output redirections can be intermixed with the words  in  a  simple
  166.      command  and  can  be  placed  following any of the other commands.  When
  167.      redirection  occurs,  the  shell  saves  the  old  values  of  the   file
  168.      descriptors  and  restores  them  when the command completes.  The ``<'',
  169.      ``>'', and ``>>''  redirections  open  a  file  for  input,  output,  and
  170.      appending, respectively.  The ``<&digit'' and ``>&digit'' makes the input
  171.      or output a duplicate of the file descriptor numbered by the digit.  If a
  172.      minus  sign  is  used in place of a digit, the standard input or standard
  173.      output are closed.
  174.      The ``<< word'' redirection takes input from a  here  document.   As  the
  175.      shell encounters ``<<'' redirections, it collects them.  The next time it
  176.      encounters an unescaped newline, it reads the  documents  in  turn.   The
  177.      word  following  the  ``<<''  specifies  the  contents  of  the line that
  178.      terminates the document.  If none of the quoting methods ('', "",  or  )
  179.      are  used  to  enter  the  word, then the document is treated like a word
  180.      inside double quotes:  ``$'' and backquote are expanded and backslash can
  181.      be  used  to  escape  these  and to continue long lines.  The word cannot
  182.      contain any variable or command  substitutions,  and  its  length  (after
  183.      quoting)  must be in the range of 1 to 79 characters.  If ``<<-'' is used
  184.      in place of ``<<'', then leading tabs are deleted from the lines  of  the
  185.      document.   (This  is  to allow you do indent shell procedures containing
  186.      here documents in a natural fashion.)
  187.      Any of the preceding redirection operators may be preceded  by  a  single
  188.      digit  specifying  the file descriptor to be redirected.  There cannot be
  189.      any white space between the digit and the redirection operator.
  190.   Path Search
  191.      When locating a command, the shell first looks to see if it has  a  shell
  192.      function  by  that  name.   Then,  if  PATH does not contain an entry for
  193.      "%builtin", it looks for a builtin command by  that  name.   Finally,  it
  194.      searches each entry in PATH in turn for the command.
  195.      The value of the PATH variable should be a series of entries separated by
  196.      colons.   Each  entry  consists  of a directory name, or a directory name
  197.      followed by a flag beginning with a percent sign.  The current  directory
  198.      should be indicated by an empty directory name.
  199.      If no percent sign is present, then the entry causes the shell to  search
  200.      for  the command in the specified directory.  If the flag is ``%builtin''
  201.      then the list of shell builtin commands is  searched.   If  the  flag  is
  202.      ``%func''  then  the  directory  is  searched for a file which is read as
  203. 7BSD                              March 7, 1991                              5
  204. SH(1)                     Minix Programmer's Manual                      SH(1)
  205.      input to the shell.  This file should define a function whose name is the
  206.      name of the command being searched for.
  207.      Command names containing a slash are simply executed  without  performing
  208.      any of the above searches.
  209.   The Environment
  210.      The environment of a command is a set  of  name/value  pairs.   When  the
  211.      shell  is  invoked,  it  reads  these  names  and  values, sets the shell
  212.      variables with these names to the corresponding  values,  and  marks  the
  213.      variables as exported.  The export command can be used to mark additional
  214.      variables as exported.
  215.      The environment of a command is constructed  by  constructing  name/value
  216.      pairs  from all the exported shell variables, and then modifying this set
  217.      by the assignments which precede the command, if any.
  218.   Expansion
  219.      The process of evaluating words when a shell  procedure  is  executed  is
  220.      called   expansion.    Expansion   consists   of  four  steps:   variable
  221.      substitution,  command  substitution,  word  splitting,  and  file   name
  222.      generation.   If  a  word  is the expression following the word case in a
  223.      case statement, the file name which follows a redirection symbol,  or  an
  224.      assignment to the environment of a command, then the word cannot be split
  225.      into multiple words.  In these cases, the last two steps of the expansion
  226.      process are omitted.
  227.   Variable Substitution
  228.      To be written.
  229.   Command Substitution
  230.      Ash accepts two syntaxes for command substitution:
  231.          `list`
  232.      and
  233.          $(list)
  234.      Either  of  these  may  be  included  in  a  word.   During  the  command
  235.      substitution process, the command (syntactly a list) will be executed and
  236.      anything that the command writes to the standard output will be  captured
  237.      by  the shell.  The final newline (if any) of the output will be deleted;
  238.      the rest of the output will be substituted for the command in the word.
  239.   Word Splitting
  240. 7BSD                              March 7, 1991                              6
  241. SH(1)                     Minix Programmer's Manual                      SH(1)
  242.      When the value of a variable or the output of a command  is  substituted,
  243.      the  resulting  text is subject to word splitting, unless the dollar sign
  244.      introducing the variable or backquotes containing the text were  enclosed
  245.      in  double  quotes.   In addition, ``$@'' is subject to a special type of
  246.      splitting, even in the presence of double quotes.
  247.      Ash uses two different splitting algorithms.  The normal approach,  which
  248.      is  intended  for splitting text separated by which space, is used if the
  249.      first character of the shell variable  IFS  is  a  space.   Otherwise  an
  250.      alternative   experimental  algorithm,  which  is  useful  for  splitting
  251.      (possibly empty) fields separated by a separator character, is used.
  252.      When performing splitting, the shell scans the replacement  text  looking
  253.      for  a  character (when IFS does not begin with a space) or a sequence of
  254.      characters (when IFS does begin with a space), deletes the  character  or
  255.      sequence  of  characters,  and  spits  the  word into two strings at that
  256.      point.  When IFS begins with a space, the shell  deletes  either  of  the
  257.      strings  if they are null.  As a special case, if the word containing the
  258.      replacement text is the null string, the word is deleted.
  259.      The variable ``$@'' is special in two ways.  First, splitting takes place
  260.      between the positional parameters, even if the text is enclosed in double
  261.      quotes.  Second, if the word containing the replacement text is the  null
  262.      string  and there are no positional parameters, then the word is deleted.
  263.      The result of these rules is that "$@" is equivalent  to  "$1"  "$2"  ...
  264.      "$n",  where  n  is the number of positional parameters.  (Note that this
  265.      differs from the System V shell.  The System V documentation claims  that
  266.      "$@"  behaves  this way; in fact on the System V shell "$@" is equivalent
  267.      to "" when there are no positional paramteters.)
  268.   File Name Generation
  269.      Unless the -f flag is set, file name generation is performed  after  word
  270.      splitting  is  complete.   Each  word  is viewed as a series of patterns,
  271.      separated by slashes.  The process of expansion replaces  the  word  with
  272.      the  names  of  all existing files whose names can be formed by replacing
  273.      each pattern with a string that matches the specified pattern.  There are
  274.      two  restrictions  on  this:   first,  a  pattern  cannot  match a string
  275.      containing a slash, and second, a pattern cannot match a string  starting
  276.      with a period unless the first character of the pattern is a period.
  277.      If a word fails to match any files and the -z flag is not set,  then  the
  278.      word  will  be  left  unchanged  (except that the meta-characters will be
  279.      converted to normal characters).  If the -z flag is set, then the word is
  280.      only  left unchanged if none of the patterns contain a character that can
  281.      match anything besides itself.  Otherwise the -z flag forces the word  to
  282.      be  replaced  with  the names of the files that it matches, even if there
  283.      are zero names.
  284.   Patterns
  285. 7BSD                              March 7, 1991                              7
  286. SH(1)                     Minix Programmer's Manual                      SH(1)
  287.      A pattern consists of normal  characters,  which  match  themselves,  and
  288.      meta-characters.  The meta-characters are ``!'', ``*'', ``?'', and ``[''.
  289.      These characters lose there special meanings if they  are  quoted.   When
  290.      command or variable substitution is performed and the dollar sign or back
  291.      quotes are not double quoted, the value of the variable or the output  of
  292.      the  command  is  scanned  for  these characters and they are turned into
  293.      meta-characters.
  294.      Two exclamation points at the  beginning  of  a  pattern  function  as  a
  295.      ``not''  operator,  causing  the  pattern  to  match  any string that the
  296.      remainder of the pattern does not match.  Other occurances of exclamation
  297.      points in a pattern match exclamation points.  Two exclamation points are
  298.      required rather than one to decrease the incompatibility with the  System
  299.      V shell (which does not treat exclamation points specially).
  300.      An asterisk (``*'') matches any string of characters.   A  question  mark
  301.      matches  any  single  character.   A  left  bracket  (``['') introduces a
  302.      character class.  The end of the character class is indicated by a ``]'';
  303.      if  the  ``]''  is  missing  then  the  ``['' matches a ``['' rather than
  304.      introducing a character class.  A character  class  matches  any  of  the
  305.      characters  between  the  square  brackets.  A range of characters may be
  306.      specified using a minus sign.  The character class may be complemented by
  307.      making an exclamation point the first character of the character class.
  308.      To include a ``]'' in a character class,  make  it  the  first  character
  309.      listed  (after  the ``!'', if any).  To include a minus sign, make it the
  310.      first or last character listed.
  311.   The /u Directory
  312.      By convention, the name ``/u/user'' refers to the home directory  of  the
  313.      specified  user.   There  are  good  reasons  why  this feature should be
  314.      supported by the file system (using a feature  such  as  symbolic  links)
  315.      rather  than  by the shell, but ash is capable of performing this mapping
  316.      if the file system doesn't.  If the mapping is done by ash,  setting  the
  317.      -f flag will turn it off.
  318.   Character Set
  319.      Ash silently discards  nul  characters.   Any  other  character  will  be
  320.      handled  correctly  by  ash, including characters with the high order bit
  321.      set.
  322.   Job Names and Job Control
  323.      The term job refers to a process created by a shell command,  or  in  the
  324.      case of a pipeline, to the set of processes in the pipeline.  The ways to
  325.      refer to a job are:
  326.          %number
  327. 7BSD                              March 7, 1991                              8
  328. SH(1)                     Minix Programmer's Manual                      SH(1)
  329.          %string
  330.          %%
  331.          process_id
  332.      The first form identifies a job by job number.  When a  command  is  run,
  333.      ash  assigns it a job number (the lowest unused number is assigned).  The
  334.      second form identifies a job by giving a prefix of the  command  used  to
  335.      create  the  job.   The prefix must be unique.  If there is only one job,
  336.      then the null prefix will identify the job, so you can refer to  the  job
  337.      by writing ``%''.  The third form refers to the current job.  The current
  338.      job is the last job to be stopped while it was in the  foreground.   (See
  339.      the  next  paragraph.)   The  last  form  identifies  a job by giving the
  340.      process id of the last process in the job.
  341.      If the operating system that ash is running on supports job control,  ash
  342.      will  allow  you  to  use it.  In this case, typing the suspend character
  343.      (typically ^Z) while running a command will return you to  ash  and  will
  344.      make  the  suspended  command the current job.  You can then continue the
  345.      job in the background by typing  bg,  or  you  can  continue  it  in  the
  346.      foreground by typing fg.
  347.   Atty
  348.      If the shell variable ATTY is set, and the shell variable TERM is not set
  349.      to  ``emacs'', then ash generates appropriate escape sequences to talk to
  350.      atty(1).
  351.   Exit Statuses
  352.      By tradition, an exit status of zero means that a command  has  succeeded
  353.      and  a  nonzero  exit  status indicates that the command failed.  This is
  354.      better than no convention at all, but in practice it is extremely  useful
  355.      to  allow  commands  that  succeed  to  use  the  exit  status  to return
  356.      information to the caller.  A variety of  better  conventions  have  been
  357.      proposed,  but  none  of  them  has  met  with  universal  approval.  The
  358.      convention used  by  ash  and  all  the  programs  included  in  the  ash
  359.      distribution is as follows:
  360.                  0           Success.
  361.                  1           Alternate success.
  362.                  2           Failure.
  363.                  129-...     Command terminated by a signal.
  364.      The alternate success return is used  by  commands  to  indicate  various
  365.      conditions which are not errors but which can, with a little imagination,
  366.      be conceived of as less successful than plain success.  For example, test
  367.      returns  1  when the tested condition is false and getopts returns 1 when
  368.      there  are  no  more  options.   Because  this  convention  is  not  used
  369.      universally, the -e option of ash causes the shell to exit when a command
  370.      returns 1 even though that contradicts the convention described here.
  371. 7BSD                              March 7, 1991                              9
  372. SH(1)                     Minix Programmer's Manual                      SH(1)
  373.      When a command is terminated by a signal, the uses 128  plus  the  signal
  374.      number as the exit code for the command.
  375.   Builtin Commands
  376.      This concluding section lists the  builtin  commands  which  are  builtin
  377.      because  they need to perform some operation that can't be performed by a
  378.      separate process.  In addition to these, there are several other commands
  379.      (catf,  echo,  expr,  line,  nlecho,  test,  ``:'',  and  true) which can
  380.      optionally be compiled into the shell.  The  builtin  commands  described
  381.      below that accept options use the System V Release 2 getopt(3) syntax.
  382.   bg [ job ] ...
  383.      Continue the specified jobs (or the current job if no jobs are given)  in
  384.      the  background.   This command is only available on systems with Bekeley
  385.      job control.
  386.   command command arg...
  387.      Execute the specified builtin command.  (This is useful when you  have  a
  388.      shell function with the same name as a builtin command.)
  389.   cd [ directory ]
  390.      Switch to the specified directory (default $HOME).  If the an  entry  for
  391.      CDPATH appears in the environment of the cd command or the shell variable
  392.      CDPATH is set and the directory name does not begin with  a  slash,  then
  393.      the  directories  listed  in  CDPATH  will  be searched for the specified
  394.      directory.  The format of CDPATH is the same as  that  of  PATH.   In  an
  395.      interactive  shell,  the  cd  command  will  print  out  the  name of the
  396.      directory that it actually switched to if this is different from the name
  397.      that  the  user  gave.   These may be different either because the CDPATH
  398.      mechanism was used or because a symbolic link was crossed.
  399.   . file
  400.      The commands in the specified file are read and executed by the shell.  A
  401.      path  search is not done to find the file because the directories in PATH
  402.      generally contain files that are intended to be executed, not read.
  403.   eval string...
  404.      The strings are parsed as shell commands  and  executed.   (This  differs
  405.      from  the  System V shell, which concatenates the arguments (separated by
  406.      spaces) and parses the result as a single command.)
  407.   exec [ command arg...  ]
  408.      Unless command is  omitted,  the  shell  process  is  replaced  with  the
  409.      specified  program  (which must be a real program, not a shell builtin or
  410.      function).  Any redirections on the exec command are marked as permanent,
  411.      so  that  they  are  not  undone  when the exec command finishes.  If the
  412.      command is not found, the exec command causes the shell to exit.
  413. 7BSD                             March 7, 1991                              10
  414. SH(1)                     Minix Programmer's Manual                      SH(1)
  415.   exit [ exitstatus ]
  416.      Terminate the shell process.  If exitstatus is given it is  used  as  the
  417.      exit  status  of  the  shell;  otherwise the exit status of the preceding
  418.      command is used.
  419.   export name...
  420.      The specified names  are  exported  so  that  they  will  appear  in  the
  421.      environment of subsequent commands.  The only way to un-export a variable
  422.      is to unset it.  Ash allows the value of a variable to be set at the same
  423.      time it is exported by writing
  424.          export name=value
  425.      With no arguments the export command lists  the  names  of  all  exported
  426.      variables.
  427.   fg [ job ]
  428.      Move the specified job or  the  current  job  to  the  foreground.   This
  429.      command is only available on systems with Bekeley job control.
  430.   getopts optstring var
  431.      The System V getopts command.
  432.   hash -rv command...
  433.      The shell maintains  a  hash  table  which  remembers  the  locations  of
  434.      commands.   With no arguments whatsoever, the hash command prints out the
  435.      contents of this table.  Entries which have not been looked at since  the
  436.      last  cd  command  are  marked with an asterisk; it is possible for these
  437.      entries to be invalid.
  438.      With arguments, the hash command removes the specified commands from  the
  439.      hash  table  (unless they are functions) and then locates them.  With the
  440.      -v option, hash prints the locations of the commands as  it  finds  them.
  441.      The  -r  option  causes the hash command to delete all the entries in the
  442.      hash table except for functions.
  443.   jobid [ job ]
  444.      Print the process id's of the processes in the job.  If the job  argument
  445.      is omitted, use the current job.
  446.   jobs
  447.      This command lists out all the background processes which are children of
  448.      the current shell process.
  449.   pwd
  450.      Print the current directory.  The builtin command  may  differ  from  the
  451.      program  of  the same name because the builtin command remembers what the
  452.      current directory is rather than recomputing it each time.  This makes it
  453.      faster.   However,  if  the  current  directory  is  renamed, the builtin
  454.      version of pwd will continue to print the old name for the directory.
  455. 7BSD                             March 7, 1991                              11
  456. SH(1)                     Minix Programmer's Manual                      SH(1)
  457.   read [ -p prompt ] [ -e ] variable...
  458.      The prompt is printed if the -p option  is  specified  and  the  standard
  459.      input  is  a terminal.  Then a line is read from the standard input.  The
  460.      trailing newline is deleted from the  line  and  the  line  is  split  as
  461.      described  in  the  section  on  word splitting above, and the pieces are
  462.      assigned to the variables in  order.   If  there  are  more  pieces  than
  463.      variables,  the  remaining  pieces (along with the characters in IFS that
  464.      separated them) are assigned to the last variable.   If  there  are  more
  465.      variables  than  pieces,  the  remaining  variables are assigned the null
  466.      string.
  467.      The -e  option  causes  any  backslashes  in  the  input  to  be  treated
  468.      specially.   If  a  backslash is followed by a newline, the backslash and
  469.      the newline will be deleted.  If a backslash is  followed  by  any  other
  470.      character, the backslash will be deleted and the following character will
  471.      be treated as though it were not in IFS, even if it is.
  472.   readonly name...
  473.      The specified names are marked as read  only,  so  that  they  cannot  be
  474.      subsequently modified or unset.  Ash allows the value of a variable to be
  475.      set at the same time it is marked read only by writing
  476.          readonly name=value
  477.      With no arguments the readonly command lists the names of all  read  only
  478.      variables.
  479.   set [ { -options | +options | -- } ] arg...
  480.      The set command performs three different functions.
  481.      With no arguments, it lists the values of all shell variables.
  482.      If options are given, it sets the specified option flags, or clears  them
  483.      if  the  option  flags are introduced with a + rather than a -.  Only the
  484.      first argument to set can contain options.  The possible options are:
  485.      -e  Causes the shell to exit when a command  terminates  with  a  nonzero
  486.          exit status, except when the exit status of the command is explicitly
  487.          tested.  The exit status of a command is considered to be  explicitly
  488.          tested  if  the  command  is  used  to control an if, elif, while, or
  489.          until; or if the command is the left hand operand  of  an  ``&&''  or
  490.          ``||'' operator.
  491.      -f  Turn off file name generation.
  492.      -I  Cause the shell to ignore end  of  file  conditions.   (This  doesn't
  493.          apply when the shell a script sourced using the ``.''  command.)  The
  494.          shell will in fact exit if it gets 50 eof's in a row.
  495.      -i  Make the shell interactive.  This causes  the  shell  to  prompt  for
  496. 7BSD                             March 7, 1991                              12
  497. SH(1)                     Minix Programmer's Manual                      SH(1)
  498.          input, to trap interrupts, to ignore quit and terminate signals,  and
  499.          to return to the main command loop rather than exiting on error.
  500.      -j  Turns on Berkeley job control, on systems that support it.  When  the
  501.          shell starts up, the -j is set by default if the -i flag is set.
  502.      -n  Causes the shell to read commands but not  execute  them.   (This  is
  503.          marginally useful for checking the syntax of scripts.)
  504.      -s  If this flag is set  when  the  shell  starts  up,  the  shell  reads
  505.          commands  from  its  standard  input.   The shell doesn't examine the
  506.          value of this flag any other time.
  507.      -x  If this flag is set, the shell will print  out  each  command  before
  508.          executing it.
  509.      -z  If this flag is set, the file name generation  process  may  generate
  510.          zero  files.   If  it is not set, then a pattern which does not match
  511.          any files will be replaced by a quoted version of the pattern.
  512.      The third use of the set command is to set  the  values  of  the  shell's
  513.      positional  parameters  to  the specified args.  To change the positional
  514.      parameters without changing any options, use ``--'' as the first argument
  515.      to  set.  If no args are present, the set command will leave the value of
  516.      the positional parameters unchanged, so to set the positional  parameters
  517.      to set of values that may be empty, execute the command
  518.          shift $#
  519.      first to clear out the old values of the positional parameters.
  520.   setvar variable value
  521.      Assigns  value  to  variable.   (In  general  it  is  better   to   write
  522.      variable=value  rather  than using setvar.  Setvar is intended to be used
  523.      in functions that assign values to variables whose names  are  passed  as
  524.      parameters.)
  525.   shift [ n ]
  526.      Shift the positional parameters n times.  A shift sets the value of $1 to
  527.      the  value  of  $2,  the  value  of  $2  to  the  value of $3, and so on,
  528.      decreasing the value  of  $#  by  one.   If  there  are  zero  positional
  529.      parameters, shifting doesn't do anything.
  530.   trap [ action ] signal...
  531.      Cause the shell to parse and execute action when  any  of  the  specified
  532.      signals  are  received.   The  signals  are  specified  by signal number.
  533.      Action may be null or omitted; the former causes the specified signal  to
  534.      be  ignored  and  the latter causes the default action to be taken.  When
  535.      the shell forks off a subshell,  it  resets  trapped  (but  not  ignored)
  536.      signals to the default action.  The trap command has no effect on signals
  537. 7BSD                             March 7, 1991                              13
  538. SH(1)                     Minix Programmer's Manual                      SH(1)
  539.      that were ignored on entry to the shell.
  540.   umask [ mask ]
  541.      Set the value of umask (see umask(2)) to the specified octal  value.   If
  542.      the argument is omitted, the umask value is printed.
  543.   unset name...
  544.      The specified variables and functions are unset  and  unexported.   If  a
  545.      given  name  corresponds  to  both  a  variable  and a function, both the
  546.      variable and the function are unset.
  547.   wait [ job ]
  548.      Wait for the specified job to complete and return the exit status of  the
  549.      last  process  in the job.  If the argument is omitted, wait for all jobs
  550.      to complete and the return an exit status of zero.
  551. EXAMPLES
  552.      The following function redefines the cd command:
  553.          cd() {
  554.              if command cd "$@"
  555.              then if test -f .enter
  556.              then . .enter
  557.              else return 0
  558.              fi
  559.              fi
  560.          }
  561.      This function causes the file ``.enter'' to be  read  when  you  enter  a
  562.      directory,  if it exists.  The command command is used to access the real
  563.      cd command.  The ``return 0'' ensures that the function  will  return  an
  564.      exit  status  of zero if it successfully changes to a directory that does
  565.      not contain a ``.enter''  file.   Redefining  existing  commands  is  not
  566.      always a good idea, but this example shows that you can do it if you want
  567.      to.
  568.      The suspend function distributed with ash looks like
  569.          # Copyright (C) 1989 by Kenneth Almquist.  All rights reserved.
  570.          # This file is part of ash, which is distributed under the terms
  571.          # specified by the Ash General Public License.
  572.          suspend() {
  573.              local -
  574.              set +j
  575.              kill -TSTP 0
  576.          }
  577.      This turns off job control and then sends a stop signal  to  the  current
  578.      process group, which suspends the shell.  (When job control is turned on,
  579. 7BSD                             March 7, 1991                              14
  580. SH(1)                     Minix Programmer's Manual                      SH(1)
  581.      the shell ignores the TSTP signal.)  Job control will be turned  back  on
  582.      when  the function returns because ``-'' is local to the function.  As an
  583.      example of what not to do, consider an earlier version of suspend:
  584.          suspend() {
  585.              suspend_flag=$-
  586.              set +j
  587.              kill -TSTP 0
  588.              set -$suspend_flag
  589.          }
  590.      There are two problems  with  this.   First,  suspend_flag  is  a  global
  591.      variable  rather  than  a  local  one,  which  will cause problems in the
  592.      (unlikely) circumstance that the user is using  that  variable  for  some
  593.      other  purpose.   Second,  consider  what  happens  if  shell received an
  594.      interrupt signal after it executes the first set command  but  before  it
  595.      executes  the  second  one.   The  interrupt  signal will abort the shell
  596.      function, so that the second set command will never be executed  and  job
  597.      control  will  be  left  off.   The  first version of suspend avoids this
  598.      problem by turning job control off only in a  local  copy  of  the  shell
  599.      options.   The  local  copy  of  the  shell options is discarded when the
  600.      function is terminated, no matter how it is terminated.
  601. HINTS
  602.      Shell variables can be used to provide abbreviations for things which you
  603.      type frequently.  For example, I set
  604.                  export h=$HOME
  605.      in my .profile so that I can type the name of my home directory simply by
  606.      typing ``$h''.
  607.      When writing shell procedures, try not to make assumptions about what  is
  608.      imported  from  the  environment.   Explicitly  unset  or  initialize all
  609.      variables, rather than assuming they will be unset.  If you use cd, it is
  610.      a good idea to unset CDPATH.
  611.      People sometimes use ``<&-'' or ``>&-'' to provide no input to a  command
  612.      or  to  discard  the  output of a command.  A better way to do this is to
  613.      redirect the input or output of the command to /dev/null.
  614.      Word splitting and file name generation are performed by default, and you
  615.      have  to explicitly use double quotes to suppress it.  This is backwards,
  616.      but you can learn to live with it.  Just get  in  the  habit  of  writing
  617.      double  quotes  around  variable and command substitutions, and omit them
  618.      only when you really want word splitting and file  name  generation.   If
  619.      you want word splitting but not file name generation, use the -f option.
  620. 7BSD                             March 7, 1991                              15
  621. SH(1)                     Minix Programmer's Manual                      SH(1)
  622. AUTHORS
  623.      Kenneth Almquist
  624. SEE ALSO
  625.      echo(1), expr(1), line(1), pwd(1), true(1).
  626. BUGS
  627.      When command substitution occurs inside a  here  document,  the  commands
  628.      inside  the  here document are run with their standard input closed.  For
  629.      example, the following will not word because the standard  input  of  the
  630.      line command will be closed when the command is run:
  631.          cat <<-!
  632.          Line 1: $(line)
  633.          Line 2: $(line)
  634.          !
  635.      Unsetting a function which is currently being executed may cause  strange
  636.      behavior.
  637.      The shell syntax allows a here document to be terminated  by  an  end  of
  638.      file  as  well  as by a line containing the terminator word which follows
  639.      the ``<<''.  What this means is that if you mistype the terminator  line,
  640.      the  shell  will  silently  swallow  up the rest of your shell script and
  641.      stick it in the here document.
  642. 7BSD                             March 7, 1991                              16