Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

sh5(1) [ultrix man page]

sh5(1)							      General Commands Manual							    sh5(1)

Name
       sh5, rsh5 - shell, the standard/restricted command programming language

Syntax
       sh5 [-acefhiknrstuvx] [args]
       rsh5 [-acefhiknrstuvx] [args]

Description
       The program is a command line interpreter and programming language that executes commands read from a terminal or a file.  The program is a
       restricted version of the standard command interpreter It is used to set up login names and execution environments whose  capabilities  are
       more  controlled  than  those  of the standard shell.  See Invocation below for the meaning of arguments to the shell.  This version of the
       shell is from System V Release 2.  For further information about the standard Bourne shell interpreter, see

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

   Commands
       A  simple  command  is  a sequence of nonblank 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.
       For further information, see The value of a simple command is its exit status if it terminates normally, or (octal) 200+status if it termi-
       nates abnormally. For a list of status values, see

       A pipeline is a sequence of one or more commands separated by | (or, for historical compatibility, by ^).  The standard output of each com-
       mand but the last is connected by a 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.  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 (nonzero) 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 positional parameter that is set.  For further information, see Parameter Substitu-
	      tion below.  Execution ends when there are no more words in the list.

       case word in  [ pattern [ | pattern ] ...) list ;; ] ... esac
	      case command executes the list associated with the first pattern that matches word.  The form of the patterns is the  same  as  that
	      used for file-name generation except that a slash, a leading dot, or a dot immediately following a slash need not be matched explic-
	      itly.  For further information, see File Name Generation.

       if list then list [ elif list then list ] ...  [ else list ] fi
	      The list following if is executed and, if it returns a zero exit status, the list following the first then is executed.	Otherwise,
	      the list following elif is executed and, if its value is zero, the list following the next then is executed.  Failing that, the else
	      list is 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 sta-
	      tus.  The until command may be used in place of while to negate the loop termination test.

       (list) Execute list in a sub-shell.

       {list;}
	      Simply executes list from current shell.

       name () {list;}
	      Define a function which is referenced by name.  The body of the function is the list of commands between	{  and	}.   Execution	of
	      functions is described below.  For further information, 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 characters up to a new-line to be ignored.

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

   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 assigned 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.  Otherwise 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; otherwise, 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 substituted string, so that, in the following example, pwd is executed
       only if d is not set or is null:
       echo ${d:-`pwd`}

       If the colon (:) is omitted from the above expressions, 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 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:
	      LOGNAME
		     The name of the user's login account, corresponding to the login name in the user database.
	      HOME   The default argument (home directory) for the command.
	      PATH   The search path for commands.  For further information, see Execution below.  The user may not change PATH if executing under
	      CDPATH The search path for the command.
	      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 will check for the arrival of mail in the files specified by the
		     MAILPATH or MAIL parameters.  The default value is 600 seconds (10 minutes).  If set to 0, the shell will check  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 will be printed when  the	modification  time
		     changes.  The default message is you have mail.
	      PS1    Primary prompt string, by default ``$ ''.
	      PS2    Secondary prompt string, by default ``> ''.
	      IFS    Internal field separators, normally space, tab, and new-line.
	      SHELL  When  the shell is invoked, it scans the environment for this name. For further information, see Environment below.  If it is
		     found and there is an 'r' in the file name part of its value, the shell becomes a restricted shell.

       The shell gives default values to PATH, PS1, PS2, MAILCHECK and IFS.  LOGNAME, HOME, and MAIL are set by

   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
       arguments, those resulting from parameters that have no values are removed.

   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 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, inclusive.  If the first character following the opening ``['' is a ``!''  any character not enclosed 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

       A character may be quoted (that is, made to stand for itself) by preceding it with a .	The pair 
ew-line  is	ignored.   All	characters
       enclosed between a pair of single quote marks (' '), except a single quote, are quoted.	Inside double quote marks (""), parameter and com-
       mand substitution occurs and  quotes the characters , `, ", and $.  "$*" is equivalent to "$1 $2 ...", whereas "$@" is equivalent to "$1"
       "$2" ....

   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
       input is needed to complete a command, the secondary prompt (that is, 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
       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 end-of-file.  Other-
		     wise, 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  becomes  the
		     standard input.  If any character of word is quoted, no interpretation is placed upon the characters of the document.  Other-
		     wise, parameter and command substitution occurs, (unescaped) 
ew-line is ignored, and  must be used to quote the characters
		     , $, `, and the first character of word.	If - is appended to <<, all leading tabs are stripped from word and from the docu-
		     ment.
       <&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,
       instead of the default 0 or 1.  For example:
	... 2>&1

       This 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

       The  first  associates  file  descriptor  1 with file xxx.  It associates 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.

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

       Redirection of output is not allowed in the restricted shell.

   Environment
       The environment is a list of name-value pairs that is passed to an executed program in the same way as a normal argument list.  For further
       information,  see  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 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 modifica-
       tions or additions, 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.  Thus:
       TERM=450 cmd
       (export TERM; TERM=450; cmd)

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

       If the -k flag is set, all keyword arguments are placed in the environment, even if they occur after the command name.  The following first
       prints a=b c and 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
       inherited by the shell from its parent, with the exception of signal 11.  For further information, 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 differs 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
       defined function, a new process is created and an attempt is made to execute the command via

       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 :/bin:/usr/bin (specifying the current directory, /bin, and /usr/bin, in that order).	Note that the cur-
       rent 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 the command name contains a / the search path is not used.  Such commands will not be executed by the restricted
       shell.  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.

       The location in the search path where a command was found is remembered by the shell (to help avoid unnecessary exec later).  If  the  com-
       mand  was  found in a relative directory, its location must be re-determined whenever the current directory changes.  The shell forgets all
       remembered locations 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 commands.  File descriptor 1 is the default output location.

       :      No effect; the command does nothing.  A zero exit code is returned.
       . file Read and execute commands from file and return.  The search path specified by PATH is used to find the directory containing file.
       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 directory names are separated by a colon (:).  The default path is <null> (spec-
	      ifying the current directory).  Note that the current directory is specified by a null path name, which can appear immediately after
	      the  equal sign or between the colon delimiters anywhere else in the path list.  If arg begins with a / the search path is not used.
	      Otherwise, each directory in the path is searched for arg.  The command may not be executed by
       echo [ arg... ]
	      Echo arguments. See for usage and description.
       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  arguments
	      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 executed
	      (an end-of-file will also cause the shell to exit.)
       export [ name... ]
	      Each given name is marked for automatic export to the environment of subsequently-executed commands.  If no arguments are  given,  a
	      list of all names that are exported in this shell is printed.  Function names may not be exported.
       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.  There are certain situations which require that the stored location of a command  be  recalcu-
	      lated.  Commands for which this will be done are indicated by an asterisk (*) adjacent to the hits information.  Cost will be incre-
	      mented when the recalculation is done.
       pwd    Print the current working directory.  For use and description, see
       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.
       readonly [ name... ]
	      The  given names are marked readonly and the values of the these names may not be changed by subsequent assignment.  If no arguments
	      are given, a list of all readonly names is printed.
       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 exe-
	      cuted.
       set [ --aefhkntuvx [ arg... ] ]
	      -a     Mark variables which are modified or created for export.
	      -e     Exit immediately if a command exits with a nonzero 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 environment for a command, not just those that precede the command name.
	      -n     Read commands but do not execute them.
	      -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 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.
       test
	      Evaluate conditional expressions.  For usage and description, see
       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 receives 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.
       type [ name... ]
	      For each name, indicate how it would be interpreted if used as a command name.
       ulimit [ -fp ] [ n ]
	      imposes a size limit of n
	      -f     imposes  a size limit of n blocks on files written by child processes (files of any size may be read).  With no argument, the
		     current limit is printed.
	      -p     changes the pipe size to n (UNIX/RT only).
	      If no option is given, -f is assumed.
       umask [ nnn ]
	      The user file-creation mask is set to nnn.  For further information, see 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, MAILCHECK and IFS cannot be unset.
       wait [ n ]
	      Wait for the specified process and report its termination status.  If n is not given all currently active child processes are waited
	      for and the return code is zero.

   Invocation
       If the shell is invoked through and the first character of argument zero is -, commands are  initially  read  from  /etc/profile  and  from
       $HOME/.profile, if such files exist.  Thereafter, commands are read as described below, which is also the case when the shell is invoked as
       /bin/sh5.  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.
       -r	 If the -r flag is present the shell is a restricted shell.

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

   Rsh5 Only
       The shell is used to set up login names and execution environments whose capabilities are more controlled than those of the standard shell.
       The actions of are identical to those of except that the following are disallowed:
	      changing directory, see
	      setting the value of $PATH,
	      specifying path or command names containing /,
	      redirecting output (> and >>).

       The restrictions above are enforced after .profile is interpreted.

       When a command to be executed is found to be a shell procedure, invokes to execute it.  Thus, it is possible to	provide  to  the  end-user
       shell  procedures that have access to the full power of the standard shell, while imposing a limited menu of commands.  This scheme assumes
       that the end-user does not have write and execute permissions in the same directory.

       The net effect of these rules is that the writer of the .profile has complete control over user actions,  by  performing  guaranteed  setup
       actions and leaving the user in an appropriate directory (probably not the login directory).

       The  system  administrator  often  sets	up  a directory of commands (/usr/rbin ) that can be safely invoked by Some systems also provide a
       restricted editor, see

Exit Status
       Errors detected by the shell, such as syntax errors, cause the shell to return a nonzero exit status.  If the shell is being used noninter-
       actively 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).

Restrictions
       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 will continue to exec the original command.  Use the hash command to correct this situation.

       If you move the current directory or one above it, pwd may not give the correct response.  Use the command with a full path name to correct
       this situation.

       If you startup a shell using with an 'r' in the argv[0] string, the System V shell goes into restricted mode.

Files
       /etc/profile
       $HOME/.profile
       /tmp/sh*
       /dev/null

See Also
       cd(1), echo(1sh5), login(1), printenv(1), pwd(1), sh(1), test(1sh5) dup(2), execve(2), fork(2), pipe(2), ulimit(2), umask(2), wait(2), sig-
       nal(3), a.out(5), environ(7)

																	    sh5(1)

Featured Tech Videos