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



NAME
       sh, cd, wait - shell, the standard command programming language

SYNOPSIS
       sh [ -acefiknpstuvx ] [ args ]

DESCRIPTION
       Sh is a command programming language that executes commands read from a
       terminal or a file.  See Invocation below for the meaning of  arguments
       to the shell.

   Definitions
       A  blank is a tab or a space.  A name is a sequence of letters, digits,
       or underscores beginning with a letter or underscore.  A parameter is a
       name,  a  digit,  or  any of the characters ∗, @, #, ?, -, $, and !.  A
       word is a sequence of characters  and  quoted  strings,  surrounded  by
       blanks or newlines.

   Commands
       A simple-command is a sequence of words separated by blanks.  The first
       word specifies the name of the command to be executed.  Except as spec‐
       ified 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 terminates normally,
       or (octal) 200+status if it terminates abnormally (see signal(2) for  a
       list of status values).

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

       A list is a sequence of one or more pipelines separated by ;, &, &&, or
       ⎪⎪, and optionally terminated by ; or &.  Of these 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; an ampersand (&) causes
       asynchronous execution of the preceding pipeline (i.e., 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 new-lines may
       appear in a list, instead of semicolons, to delimit commands.

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

       for 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  posi‐
              tional parameter that is set (see Parameter Substitution 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  pat‐
              tern that matches word.  The form of the patterns is the same as
              that used for file-name generation (see  File  Name  Generation)
              except that a slash, a leading dot, or a dot immediately follow‐
              ing 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.  Other‐
              wise, the list following elif is executed and, if its  value  is
              zero,  the  list  following  the next then is executed.  Failing
              that, the else list is executed.  If no else list or  then  list
              is executed, then the if command returns a zero exit status.
       while list do list done
              A  while  command repeatedly executes the while list and, if the
              exit status of the last command in the list  is  zero,  executes
              the  do  list; otherwise the loop terminates.  If no commands in
              the do list are executed, then the while command returns a  zero
              exit  status;  until may be used in place of while to negate the
              loop termination test.
       (list)
              Execute list in a sub-shell.
       {list}
              list is simply executed.
       name () command
              Define a function which is referenced by name.  The body of  the
              function  is  the command.  The most useful form of command is a
              sequence of commands enclosed by { and }.   Execution  of  func‐
              tions is described below (see Execution).

       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
       A word beginning with # causes that word and all the following  charac‐
       ters up to a new-line to be ignored.

   Command Substitution
       The  standard output from a command enclosed in a pair of grave accents
       (``) may be used as part or all of a word; trailing new-lines  are  re‐
       moved.

   Parameter Substitution
       The  character  $ is used to introduce substitutable parameters.  There
       are two types of parameters, positional and keyword.  If parameter is a
       digit,  it is a positional parameter.  Positional parameters may be as‐
       signed values by set.  Keyword parameters (also known as variables) may
       be assigned values by writing:

              name=value [ name=value ] ...

       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 interpreted as part of its name.
              If  parameter is ∗ or @, all the positional parameters, starting
              with $1, are substituted (separated by spaces).  Parameter $0 is
              set from argument zero when the shell is invoked.
       ${parameter:-word}
              If  parameter is set and is non-null, substitute its value; oth‐
              erwise substitute word.
       ${parameter:=word}
              If parameter is not set or is null set it to word; the value  of
              the  parameter is substituted.  Positional parameters may not be
              assigned to in this way.
       ${parameter:?word}
              If parameter is set and is non-null, substitute its value;  oth‐
              erwise, print word and exit from the shell.  If word is omitted,
              the message ``parameter null or not set'' is printed.
       ${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 sub‐
       stituted string, so that, in the following  example,  pwd  is  executed
       only if d is not set or is null:

              echo ${d:-`pwd`}

       If  the colon (:) is omitted from the above expressions, the shell only
       checks whether parameter is set or not.

       The following parameters are automatically set by the shell:
              #      The number of positional parameters in decimal.
              -      Flags supplied to the shell on invocation or by  the  set
                     command.
              ?      The decimal value returned by the last synchronously exe‐
                     cuted command.
              $      The process number of this shell.
              !      The process number of the  last  background  command  in‐
                     voked.

       The following parameters are used by the shell:
              HOME   The default argument (home directory) for the cd command.
              PATH   The search path for commands (see Execution below).
              CDPATH The search path for the cd command.
              MAIL   If  this  parameter is set to the name of a mail file the
                     shell informs the user of the  arrival  of  mail  in  the
                     specified  file.   The file is inspected every three min‐
                     utes.
              HISTORY
                     If this parameter is set to the name of a writable  file,
                     the  shell appends interactive input to the file, for use
                     by the = command (=(1)).
              PS1    Primary prompt string, by default ``$ ''.
              PS2    Secondary prompt string, by default ``> ''.
              IFS    Internal field separators, normally space, tab, and  new-
                     line.

       The  shell gives default values to PATH, PS1, PS2 and IFS.  HOME is set
       by login(8).

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

   File Name Generation
       Following substitution, each command word is scanned for the characters
       ∗, ?, and [.  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  pattern,  the  word  is left unchanged.  The directories .  and ..
       (initially or after a /) are only matched by patterns beginning with an
       explicit period.  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, inclusive.  If the first character fol‐
                     lowing the opening ``['' is a ``^'' any character not en‐
                     closed is matched.

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

              ;  &  (  )  ⎪  <  >  new-line  space  tab  {  }

       (The characters { and } need not be quoted inside a ${}  construction.)
       A character may be quoted (i.e., made to stand for itself) by preceding
       it with a \.  The pair \new-line is ignored.  All  characters  enclosed
       between  a  pair of single quote marks (''), except a single quote, are
       quoted.  Inside double quote marks (""), parameter and command  substi‐
       tution  occurs  and  \  quotes  the characters \, `, ", and $.  "$∗" is
       equivalent to "$1 $2 ...", whereas "$@" is equivalent to "$1" "$2" ....

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

   Input/Output
       Before  a  command  is executed, its input and output may be redirected
       using a special notation interpreted by the shell.  The  following  may
       appear  anywhere in a simple-command or may precede or follow a command
       and are not passed on to the invoked command; substitution  occurs  be‐
       fore 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 end-of-
                     file); otherwise, the file is created.
       <<word        The  shell input is read up to a line that is the same as
                     word, or to an end-of-file.  The resulting  document  be‐
                     comes  the  standard  input.  If any character of word is
                     quoted, no interpretation is placed upon  the  characters
                     of the document; otherwise, parameter and command substi‐
                     tution occurs, (unescaped) \new-line is  ignored,  and  \
                     must  be  used  to  quote the characters \, $, `, and the
                     first character of word.
       <&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
       will be associated with the file is that specified by  the  digit  (in‐
       stead of the default 0 or 1).  For example:

              ... 2>&1

       associates  file  descriptor  2 with the file currently associated with
       file descriptor 1.

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

              ... 1>xxx 2>&1

       first  associates  file descriptor 1 with file xxx.  It associates file
       descriptor 2 with the file associated  with  file  descriptor  1  (i.e.
       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.

       If  a  command is followed by & the default standard input for the com‐
       mand is the empty file /dev/null.  Otherwise, the environment  for  the
       execution  of  a  command contains the file descriptors of the invoking
       shell as modified by input/output specifications.

   Environment
       The environment (see environ(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 or
       function 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
       command  is  used to bind the shell's parameter to the environment (see
       also set -a).  A parameter may 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 ad‐
       ditions, all of which must be noted in export commands.

       The environment for any simple-command may be augmented by prefixing it
       with one or more assignments to parameters (but not functions).  Thus:

              TERM=450 cmd                  and
              (export TERM; TERM=450; cmd)

       are equivalent (as far as the execution of cmd is concerned).

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

              echo a=b c
              set -k
              echo a=b c

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

   Execution
       Each time a command is executed, the above  substitutions  are  carried
       out.   If  the  command name matches one of the Special Commands listed
       below, it is executed in the shell process.  If the command  name  does
       not  match  a  Special Command, but matches the name of a defined func‐
       tion, the function is executed in the shell process (note how this dif‐
       fers  from  the execution of shell procedures).  The positional parame‐
       ters $1, $2, ....  are set to the arguments of the  function.   If  the
       command  name  matches  neither a Special Command nor the name of a de‐
       fined function, a new process is created and an attempt is made to exe‐
       cute the command via exec(2).

       The shell parameter PATH defines the search path for the directory con‐
       taining the command.  Alternative directory names are  separated  by  a
       colon  (:).  The default path is :/bin:/usr/bin (specifying the current
       directory, /bin, and /usr/bin, in that order).  Note that  the  current
       directory  is  specified  by a null path name, which can appear immedi‐
       ately after the equal sign or between  the  colon  delimiters  anywhere
       else  in  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 exe‐
       cuted in a sub-shell.

   Special Commands
       Input/output redirection is permitted for  these  commands.   File  de‐
       scriptor 1 is the default output location.

       :      No  effect;  the  command does nothing.  A zero exit code is re‐
              turned.
       . file Read and execute commands from file and return.  The search path
              specified by PATH is used to find the directory containing file.
       builtin [ command ]
              Execute  the built-in special command (such as break) regardless
              of functions defined with the same name.
       break [ n ]
              Exit from the enclosing for or while loop,  if  any.   If  n  is
              specified break n levels.
       continue [ n ]
              Resume  the  next  iteration of the enclosing for or while loop.
              If n is specified resume at the n-th enclosing loop.
       cd [ arg ]
              Change the current directory to arg.  The shell  parameter  HOME
              is  the  default  arg.   The  shell parameter CDPATH defines the
              search path for the directory containing arg.   Alternative  di‐
              rectory names are separated by a colon (:).  The default path is
              <null> (specifying the current directory).  Note that  the  cur‐
              rent  directory  is specified by a null path name, which can ap‐
              pear immediately after the equal sign or between the  colon  de‐
              limiters anywhere else in the path list.  If arg begins with a /
              the search path is not used.  Otherwise, each directory  in  the
              path is searched for arg.
       eval [ arg ... ]
              The  arguments  are read as input to the shell and the resulting
              command(s) executed.
       exec [ arg ... ]
              The command specified by the arguments is executed in  place  of
              this  shell  without creating a new process.  Input/output argu‐
              ments may appear and, if no other arguments are given, cause the
              shell input/output to be modified.
       exit [ n ]
              Causes  a shell to exit with the exit status specified by n.  If
              n is omitted the exit status is that of the  last  command  exe‐
              cuted (an end-of-file will also cause the shell to exit.)
       export [ name ... ]
              The  given names are marked for automatic export to the environ‐
              ment of subsequently-executed commands.   If  no  arguments  are
              given,  a  list  of all names that are exported in this shell is
              printed.
       newgrp [ arg ... ]
              Equivalent to exec newgrp arg ....  See newgrp(1) for usage  and
              description.
       read [ name ... ]
              One  line  is read from the standard input and the first word is
              assigned to the first name, the second word to the second  name,
              etc., with leftover words assigned to the last name.  The return
              code is 0 unless an end-of-file is encountered.
       return [ n ]
              Causes a function to exit with the return value specified by  n.
              If  n  is omitted, the return status is that of the last command
              executed.
       set [ --aehknptuvx [ arg ... ] ]
              -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
              -k     All keyword arguments are placed in the environment for a
                     command, not just those that precede the command name.
              -n     Read commands but do not execute them.
              -p     Remove the definitions for all  functions  imported  from
                     the environment, and set IFS to blank, tab and newline.
              -t     Exit after reading and executing one command.
              -u     Treat unset variables as an error when substituting.
              -v     Print shell input lines as they are read.
              -x     Print commands and their arguments as they are executed.
              --     Do  not  change any of the flags; useful in setting $1 to
                     -.
              Using + rather than - causes  these  flags  to  be  turned  off.
              These  flags can also be used upon invocation of the shell.  The
              current set of flags may be found in $-.   The  remaining  argu‐
              ments  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.
       times
              Print the accumulated user and system times  for  processes  run
              from the shell.
       trap [ arg ] [ n ] ...
              The  command  arg  is to be read and executed when the shell re‐
              ceives signal(s) n.  (Note that arg is  scanned  once  when  the
              trap is set and once when the trap is taken.)  Trap commands are
              executed in order of signal number.  Any attempt to set  a  trap
              on  a  signal  that was ignored on entry to the current shell is
              ineffective.  An attempt to trap on  signal  11  (memory  fault)
              produces  an error.  If arg is absent all trap(s) n are reset to
              their original values.  If arg is the null string this signal is
              ignored  by the shell and by the commands it invokes.  If n is 0
              the command arg is executed on exit from the  shell.   The  trap
              command  with  no arguments prints a list of commands associated
              with each signal number.
       umask [ nnn ]
              The user file-creation mask is set to nnn  (see  umask(2)).   If
              nnn is omitted, the current value of the mask is printed.
       unset [ name ... ]
              For  each  name,  remove the corresponding variable or function.
              The variables PATH, PS1, PS2 and IFS cannot be unset.
       wait [ n ]
              Wait for the specified process and report its  termination  sta‐
              tus.  If n is not given all currently active child processes are
              waited for and the return code is zero.
       whatis [ name ... ]
              For each name, print the associated value as a parameter,  func‐
              tion,  builtin  or  executable  binary  as appropriate.  In each
              case, the value is printed in a form that would yield  the  same
              value  if  typed  as  input  to the shell itself: parameters are
              printed as assignments, functions as their definitions, builtins
              as calls to builtin, and binaries as their full pathnames.

   Invocation
       If  the shell is invoked through exec(2) and the first character of ar‐
       gument zero is -, commands are initially read from  $HOME/.profile,  if
       it  exists.  Thereafter, commands are read as described below, which is
       also the case when the shell is invoked as /bin/sh.   The  flags  below
       are  interpreted  by the shell on invocation only; Note that unless the
       -c or -s flag is specified, the first argument is  assumed  to  be  the
       name  of  a  file  containing commands, and the remaining arguments are
       passed as positional parameters to that command file:

       -c string If the -c flag is present commands are read from string.
       -s        If the -s flag is present or if no arguments remain  commands
                 are  read  from  the standard input.  Any remaining arguments
                 specify the positional parameters.  Shell output (except  for
                 Special Commands) is written to file descriptor 2.
       -i        If  the  -i  flag is present or if the shell input and output
                 are attached to a terminal, this shell  is  interactive.   In
                 this  case TERMINATE is ignored (so that kill 0 does not kill
                 an interactive shell) and INTERRUPT is caught and ignored (so
                 that  wait  is interruptible).  In all cases, QUIT is ignored
                 by the shell.

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

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

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

SEE ALSO
       =(1), cd(1), echo(1), newgrp(1), test(1)
       dup(2),   exec(2),  fork(2),  pipe(2),  signal(2),  umask(2),  wait(2),
       a.out(5), environ(5)

BUGS
       A function invocation overwrites the arguments of the invoking shell.



                                                                         SH(1)