Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
sh(1)				 User Commands				 sh(1)

NAME
       sh, obosh, jsh -	standard and job control shell and command interpreter

SYNOPSIS
       obosh [-acefhikmnprstuvxP] [argument]...

DESCRIPTION
       The  obosh utility is a command programming language that executes com-
       mands read from a terminal or a file.

       The name	obosh permits  one  to	call  this  implementation  even  when
       /usr/bin/sh has been linked to another shell.

       Job control may be enabled by calling set -m.

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

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

   Invocation
       If  the shell is	invoked	through	exec(2)	and the	first character	of ar-
       gument 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  in-
       voked as	obosh.

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

       -c string   If  the -c option is	present	commands are read from string.
		   The remaining arguments become positional parameters	start-
		   ing at $0.

       -i	   If the -i option is present or if the shell input and  out-
		   put	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  ig-
		   nored  (so  that wait is interruptible). In all cases, QUIT
		   is ignored by the shell.

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

       -r	   If the -r option is present the shell is a restricted shell
		   (see	rsh(8)).

       -s	   If the -s option is present or if no	arguments remain, com-
		   mands are read from the standard input. Any remaining argu-
		   ments specify the positional	parameters. Shell output  (ex-
		   cept	for Special Commands) is written to file descriptor 2.

       -version	   Print the current Bourne Shell version and exit.

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

USAGE
   Commands
       A  simple-command is a sequence of non-blank words separated by blanks.
       The first word specifies	the name of the	command	to be executed.	Except
       as specified below, the remaining words are passed as arguments to  the
       invoked	command.  The  command	name  is  passed  as  argument	0 (see
       exec(2)).  The value of a simple-command	is its exit status if it  ter-
       minates	normally,  or  (octal) 200+status if it	terminates abnormally.
       See signal.h(3HEAD) for a list of status	values.

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

       A list is a sequence of one or more pipelines separated by ;, &,	&&, or
       ||, and optionally terminated by	; or &.	 Of these four symbols,	;  and
       &  have	equal  precedence, which is lower than that of && and ||.  The
       symbols && and || also have equal precedence. A	semicolon  (;)	causes
       sequential  execution  of  the  preceding  pipeline, that is, the shell
       waits for the pipeline to finish	before executing any commands  follow-
       ing  the	 semicolon.  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  (non-zero)
       exit  status. An	arbitrary number of newlines can appear	in a list, in-
       stead 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 section
	      below). Execution	ends when there	are no more words in the list.

       case word in [ pattern [	| pattern ] ) list ;; ]	...  esac
	      A	 case command executes the list	associated with	the first pat-
	      tern that	matches	word.  The form	of the patterns	is the same as
	      that used	for file-name generation  (see	File  Name  Generation
	      section),	 except	 that a	slash, a leading dot, or a dot immedi-
	      ately following a	slash need not be matched explicitly.

       if list then list [ elif	list then list ] ... [ else list ] fi
	      The list following if is executed	and, if	it returns a zero exit
	      status, the list following the first then	is  executed.	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
       until list do list done
	      A	 while	command	repeatedly executes the	while list and,	if the
	      exit status of the last command in the list  is  zero,  executes
	      the  do  list;  otherwise	the loop terminates. If	no commands in
	      the do list are executed,	then the while command returns a  zero
	      exit  status;  until can be used in place	of while to negate the
	      loop termination test.

       (list)
	      Execute list in a	sub-shell.

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

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

       The  following words are	only recognized	as the first word of a command
       and when	not quoted:

	 if	  then	   else	   elif	   fi	   case	   esac
	 for	  while	   until   do	   done	   {   }

   Comments Lines
       A word beginning	with # causes that word	and all	the following  charac-
       ters up to a newline to be ignored.

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

       No interpretation is done on the	string before the string is read,  ex-
       cept to remove backslashes (\) are used to escape other characters.

       Backslashes  can	 be used to escape a grave accent (`) or another back-
       slash (\) and are removed before	the command string is read.   Escaping
       grave  accents allows nested command substitution.  If the command sub-
       stitution lies within a pair of double quotes ("	...` ...` ... "	 ),  a
       backslash  used to escape a double quote	(\") is	removed. Otherwise, it
       is left intact.

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

       Command	substitution  allows the output	of a command to	be substituted
       in place	of the command name itself. Command substitution  occurs  when
       the command is enclosed as follows:

	 `command`

       The  shell  expands  the	command	substitution by	executing command in a
       subshell	environment and	replacing the command substitution  (the  text
       of  command  plus the enclosing backquotes) with	the standard output of
       the command, removing sequences of one or more  newline	characters  at
       the end of the substitution. Embedded newline characters	before the end
       of  the output is not be	removed; however, they can be treated as field
       delimiters and eliminated during	 field	splitting,  depending  on  the
       value of	IFS and	quoting	that is	in effect.

       Any valid shell script can be used for command.

       The  results  of	command	substitution are not field splitting and path-
       name expansion processed	for further tilde expansion, parameter	expan-
       sion,  command substitution or arithmetic  expansion. If	a command sub-
       stitution occurs	inside double-quotes, it is not	be  performed  on  the
       results of the substitution.

   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 can	be as-
       signed values by	set.  Keyword parameters (also known as	variables) can
       be assigned values by writing:

       name=value [ name=value ] ...

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

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

       ${parameter}		The value, if any, of the parameter is substi-
				tuted. The braces are required only when para-
				meter is followed by a letter, digit,  or  un-
				derscore that is not to	be interpreted as part
				of  its	 name, or when the parameter name con-
				tains a	dot (.).  If parameter is * or @,  all
				the  positional	 parameters, starting with $1,
				are substituted	(separated by spaces). Parame-
				ter $0 is set  from  argument  zero  when  the
				shell is invoked.

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

       ${parameter-word}	Use Default Values.  If	 parameter  is	unset,
				the  expansion	of word	is substituted;	other-
				wise, the value	of parameter is	substituted.

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

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

       ${parameter:?word}	Indicate Error if Null or Unset.  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}	Indicate Error if Null or Unset.  If parameter
				is set,	substitute its value; otherwise, print
				word and exit from the shell. If word is omit-
				ted, the message "parameter null or  not  set"
				is printed.

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

       ${parameter+word}	Use  Alternative  Value.  If parameter is set,
				substitute word; otherwise substitute nothing.

       If the colon (:)	is omitted from	the above expressions, the shell  only
       checks whether parameter	is set or not.	The following table summarizes
       the effect of the <colon>:
			   |		       |		 |
			   |parameter nonnull  |parameter null	 |parameter unset
       --------------------+-------------------+-----------------+----------------
       ${parameter:-word}  |subst. parameter   |subst. word	 |subst. word
       --------------------+-------------------+-----------------+----------------
       ${parameter-word}   |subst. parameter   |subst. null	 |subst. word
       --------------------+-------------------+-----------------+----------------
       ${parameter:=word}  |subst. parameter   |assign word	 |assign word
       --------------------+-------------------+-----------------+----------------
       ${parameter=word}   |subst. parameter   |subst. null	 |assign word
       --------------------+-------------------+-----------------+----------------
       ${parameter:?word}  |subst. parameter   |error, exit	 |error, exit
       --------------------+-------------------+-----------------+----------------
       ${parameter?word}   |subst. parameter   |subst. null	 |error, exit
       --------------------+-------------------+-----------------+----------------
       ${parameter:+word}  |subst. word	       |subst. null	 |subst. null
       --------------------+-------------------+-----------------+----------------
       ${parameter+word}   |subst. word	       |subst. word	 |subst. null
       --------------------+-------------------+-----------------+----------------

       In  all	cases  shown  with "assign", parameter is assigned that	value,
       which also replaces the expression.

       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`}

       The following parameters	are automatically set by the shell.

       #       The number of positional	parameters in decimal.

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

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

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

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

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

       ?       The decimal value returned by the last  synchronously  executed
	       command.	 Only the low 8	bits of	the exit code from the command
	       are  visible.   If  the command was killed by a signal, the re-
	       turned value is 128 + the signal	number.

       $       The decimal process number of this shell.  In a subshell,  this
	       still  expands to the same value	as that	of the current invoked
	       shell.

       !       The process number of the last background command invoked.

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

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

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

       CDPATH	    The	search path for	the cd 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
		    checks  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 checks	before
		    each prompt.

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

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

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

       PS1	    Primary prompt string, by default "$ "  for	 normal	 users
		    and	"privileged users.

       PS2	    Secondary prompt string, by	default	"> ".

       REPLY	    This  variable  is	set by the select statement and	by the
		    read special builtin command when no  arguments  are  sup-
		    plied.

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

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

       SHELL	    When  the  shell is	invoked, it scans the environment (see
		    Environment	section	below) for this	 name.	 If  the  past
		    pathname  component	 equals	 to rsh	or rbosh, the shell is
		    switched into a restricted shell.

       SYSV3	    When the SYSV3 Environment is set, the builtin  echo  com-
		    mand  is  switched into SYSV3 mode and supports escape se-
		    quences and	the BSD	-n  option  to	suppress  the  newline
		    character at the end of the	output.

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

       The  shell  gives  default values to PATH, PS1, PS2, MAILCHECK, OPTIND,
       and IFS.	 Default values	for HOME and MAIL are set  by  login(1).   For
       security	reasons, the value for IFS is never imported from the environ-
       ment.

   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.

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

	      IFS=X
	      echoXfoo

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

   Input/Output	Redirection
       A command's input and output can	be redirected using a special notation
       interpreted  by	the shell. The following can appear anywhere in	a sim-
       ple-command or can precede or follow a command and are not passed on as
       arguments to the	invoked	command.  Note:	Parameter and command  substi-
       tution 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.  If the file
		       exists, and the noclobber option	is on, this causes  an
		       error.  Otherwise, it is	truncated to zero length.

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

       <>word	       Open  file word for reading and writing as standard in-
		       put.

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

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

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

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

			   1.	  parameter and	command	substitution occurs;

			   2.	  (escaped) \newlines are removed; and

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

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

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

       If any of the above is preceded by a digit, the file  descriptor	 which
       is  associated with the file is that specified by the digit (instead 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 (that  is,
       xxx).   If  the	order of redirections were reversed, file descriptor 2
       would be	associated with	the terminal (assuming file descriptor	1  had
       been) and file descriptor 1 would be associated with file xxx.

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

       If a command is followed	by & and job control (see set -m) is  not  ac-
       tive,  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 in-
       put/output specifications.

   File	Name Generation
       Before a	command	is executed, each command  word	 is  scanned  for  the
       characters *, ?,	and [.	If one of these	characters appears the word is
       regarded	as a pattern.  The word	is replaced with alphabetically	sorted
       file  names  that  match	 the  pattern.	If  no file name is found that
       matches the 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  fol-
		    lowing the opening [ is a !, any character not enclosed is
		    matched.

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

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

       ;  &  (	)  |  ^	 <  >  newline	space  tab

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

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

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

   Prompting
       When used interactively,	the shell prompts with the value of PS1	before
       reading	a command. If at any time a newline is typed and further input
       is needed to complete a command,	the secondary  prompt  (that  is,  the
       value of	PS2) is	issued.

   Environment
       The  environment	(see environ(7)) 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 in-
       vocation, the shell scans the environment and creates a	parameter  for
       each  name  found, giving it the	corresponding value. If	the user modi-
       fies 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 can be	removed	from the environment with the  unset  command.
       The  environment	 seen  by any executed command is thus composed	of any
       unmodified name-value pairs originally inherited	by  the	 shell,	 minus
       any pairs removed by unset, plus	any modifications or additions,	all of
       which must be noted in export commands.

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

	 TERM=450 command

       and

	 (export TERM; TERM=450; command)

       are  equivalent as far as the execution of command is concerned if com-
       mand is not a Special Command. If command is a Special Command, then

	 TERM=450 command

       modifies	the TERM variable in the current shell.

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

	 echo a=b  c

	 a=b  c

	 set  -k

	 echo a=b  c

	 c

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

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

       The positional parameters $1, $2, ... are set to	the 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 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 /usr/bin:.  The current directory is
       specified by a null path	name, which can	appear immediately  after  the
       equal  sign, between two	colon delimiters anywhere in the path list, or
       at the end of the path list. If the  command  name  contains  a	/  the
       search  path  is	 not  used.  Otherwise,	 each directory	in the path is
       searched	for an executable file.	If the file has	execute	permission but
       is not an a.out file, it	is assumed to be a file	containing shell  com-
       mands.  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 execs later).  If  the  command
       was  found  in a	relative directory, its	location must be re-determined
       whenever	the current directory changes. The shell  forgets  all	remem-
       bered  locations	 whenever  the PATH variable is	changed	or the hash -r
       command is executed (see	below).

   Built-in Commands
       The following commands are executed in the shell	process.  Input/output
       redirection is permitted	for these commands. File descriptor 1  is  the
       default output location.	When Job Control is enabled, additional	Built-
       in  Commands are	added to the shell's environment (see Job Control sec-
       tion below).

       Commands	marked with a +	are treated specially in the following ways:

	      1.     Parameter assignments that	precede	a special builtin com-
		     mand affect the shell itself.

	      2.     I/O redirections are processed after variable assignments
		     for variables that	precede	the builtin command.

	      3.     Errors may	cause a	script that contains them to abort.

       In this version of sh, parameter	assignments that precede  any  builtin
       command affect the shell	itself.

       + :

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

       + . filename

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

       [ [expr]	]

	   See test builtin below.

       bg [%jobid ...]

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

       + break [ n ]

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

       cd [ argument ]

	   Change the current directory	to argument.  If arg is	-  the	direc-
	   tory	 is  changed  to  the previous directory.  The shell parameter
	   HOME	is the default argument.  The shell parameter  CDPATH  defines
	   the search path for the directory containing	argument.  Alternative
	   directory  names are	separated by a colon (:).  The default path is
	   <null> (specifying the current directory).  Note: The  current  di-
	   rectory  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 argument begins with a / the search  path
	   is  not used. Otherwise, each directory in the path is searched for
	   argument.

       chdir [ dir ]

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

       + continue [ n ]

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

       echo [ arguments	... ]

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

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

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

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

       + eval [	argument ... ]

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

       + exec [-a name]	[ argument ... ]

	   The command specified by the	arguments is executed in place of this
	   shell  without  creating  a new process. Input/output arguments can
	   appear and, if no other arguments are given,	cause  the  shell  in-
	   put/output  to  be modified.	 The -a	option causes name rather than
	   the first arg, to become argv[0] for	the new	process.

       + exit [	n ]

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

       + export	[ name ... ]

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

       fg [%jobid ...]

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

       getopts optstring name [arg...]

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

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

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

	   If an illegal option	is encountered,	?  is placed in	name.  If opt-
	   string  starts with a colon and a required option-argument is miss-
	   ing,	a colon	is placed in name.

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

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

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

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

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

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

	   If optstring	starts with "()", getopts supports long	options	with a
	   single  dash.  Long options with a single dash have been introduced
	   with	Multics	and appeared on	UNIX around 1980, see e.g.  kill(1).

	   If a	long name argument follows a single dash and cannot be identi-
	   fied	as a long option, it is	retried	as  a  combination  of	single
	   character  letters.	 To suppress error messages, the optional ini-
	   tial	colon in optstring must	precede	the "()":

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

	   In the above	example, -file,	--file,	-input-file, --input-file  are
	   the	equivalent  of	-f,  and -output-file and --output-file	is the
	   equivalent of -o.  Error messages from getopts are suppressed and a
	   colon is placed in name when	an option argument for an option  like
	   -f is missing.

       hash [ -r ] [ name ... ]

	   For each name, the location in the search path of the command spec-
	   ified by name is determined and remembered by the shell. The	-r op-
	   tion	causes the shell to forget all remembered locations. If	no ar-
	   guments  are	 given,	 information about remembered commands is pre-
	   sented.  Hits is the	number of times	a command has been invoked  by
	   the	shell  process.	 Cost is a measure of the work required	to lo-
	   cate	a command in the search	path. If a command is found in a "rel-
	   ative" directory in the search path,	after changing to that	direc-
	   tory, the stored location of	that command is	recalculated. Commands
	   for	which  this are	done are indicated by an asterisk (*) adjacent
	   to the hits information.  Cost is incremented when  the  recalcula-
	   tion	is done.

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

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

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

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

       login [ argument	... ]

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

       newgrp [	argument ]

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

       pwd

	   Print the current working directory as absolute pathname that  does
	   not contain the filenames dot (.)  or dot-dot (..).	See pwd(1) for
	   usage and description.

       read [ name ... ]

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

       + readonly [ name ... ]

	   The given names are marked readonly and the	values	of  the	 these
	   names  can 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 [ -aefhkmntuvxP [ argument	... ] ]

	   The set commands supports the following options:

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

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

	   -f	 Disable file name generation.

	   -h	 Locate	 and  remember	function commands as functions are de-
		 fined (function commands are normally located when the	 func-
		 tion is executed).

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

	   -m	 Switch	job control mode on.  All jobs are run	in  their  own
		 process groups.  See section Job Control (jsh)	below.

	   -n	 Read  commands	but do not execute them.  Setting -n in	an in-
		 teractive shell is ignored as this could not  be  undone  and
		 the shell could not even be terminated	anymore.

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

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

	   -	 Clear the -v and -x option.

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

	   Using  +  rather than - causes these	flags to be turned off.	 These
	   flags can also be used upon invocation of the shell.	 The flags -c,
	   -i, -p, -r and -s can only be set upon  invocation  of  the	shell,
	   they	 cannot	be modified using the set command.  The	current	set of
	   flags can be	found in $-.  The remaining arguments  are  positional
	   parameters and are assigned,	in order, to $1, $2, ...

	   If  no  arguments  are given, the names and values of all variables
	   are printed.

       + shift [ n ]

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

       stop pid	...

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

       suspend

	   Stops  the execution	of the current shell (but not if it is the lo-
	   gin shell).

       test [expr]

	   Evaluate conditional	expressions. See test(1)  for  usage  and  de-
	   scription.  If  the value of	the expression expr, is	true then test
	   returns zero	exit status; otherwise,	a non zero exit	status is  re-
	   turned.   test returns a non	zero exit status if there are no argu-
	   ments.

	   The following primaries are used to evaluate	a condition:

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

	   string    True if string is not the null string.
	   s1 =	s2   True if the strings s1 and	s2 are identical.
	   s1 != s2  True if the strings s1 and	s2 are not identical.
	   n1 -eq n2 True if the integers n1 and n2 are	algebraically equal.
	   n1 -ne n2 True  if  the  integers  n1  and n2 are not algebraically
		     equal.
	   n1 -gt n2 True if the integer n1 is algebraically greater than  the
		     integer n2.
	   n1 -ge n2 True  if the integer n1 is	algebraically greater or equal
		     to	the integer n2.
	   n1 -lt n2 True if the integer n1 is algebraically less than the in-
		     teger n2.
	   n1 -le n2 True if the integer n1 is algebraically less or equal  to
		     the integer n2.

	   The primaries above may be combined with the	following operators:

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

	   + times

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

		     The first line lists the shell's user and	system	times,
		     the  second  line	lists  the  children's user and	system
		     times.

	   + trap [ [argument] n [ n2 ... ]]

		     The command argument is to	be read	and executed when  the
		     shell receives numeric or symbolic	signal(s) (n).	(Note:
		     argument  is  scanned  once when the trap is set and once
		     when the trap is taken.) Trap commands  are  executed  in
		     order  of	signal number or corresponding symbolic	names.
		     Any attempt to set	a trap on a signal that	was ignored on
		     entry to the current shell	is ineffective.

		     If	argument is absent, all	trap(s)	n are reset  to	 their
		     original  values.	If  argument  is the null string, this
		     signal is ignored by the shell and	by the commands	it in-
		     vokes. If n is 0 or EXIT, the command  argument  is  exe-
		     cuted  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.  type displays information	 about
		     each operand identifying the operand as a shell built-in,
		     shell  intrinsic,	function,  hashed command, or keyword,
		     and where applicable,  may	 display  the  operand's  path
		     name.  The	meaning	is as follows:

		     shell built-in    A  normal command built into the	shell.
				       Some of these commands do not  need  to
				       be  built  into	the  shell.  A command
				       usually is in this group	because	it was
				       built into  the	shell  for  historical
				       reasons	or  because it is an extension
				       to the current POSIX standard.

		     special shell built-in
				       A command built into the	shell that  is
				       subject	to  special  treatment.	  This
				       type of commands	needs to be built into
				       the shell in order to be	able  to  have
				       the desired result.

		     shell intrinsic   A  command  built into the shell.  This
				       type of commands	needs to be built into
				       the shell in order to be	able  to  have
				       the desired result.

		     function	       A function defined in this shell.

		     keyword	       A keyword in the	syntax of this shell.

		     command	       An  external command identified by it's
				       path name.

		     hashed command    An external command  that  was  already
				       subject to a path name search and hash-
				       ing.

	   ulimit [ [-HS] [-a |	-McdefilLmnPqrRsStuv] ]
	   ulimit [ [-HS] [resource-option] ] limit

		     ulimit prints or sets hard	or soft	resource limits. These
		     limits are	described in getrlimit(2).

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

		     If	limit is present, ulimit sets the specified  limit  to
		     limit.   The  string  unlimited requests that the current
		     limit, if any, be removed.	Any user can set a soft	 limit
		     to	 any  value  less than or equal	to the hard limit. Any
		     user can lower a hard limit. Only a user with appropriate
		     privileges	can raise or remove a hard  limit.  See	 getr-
		     limit(2).

		     The -H option specifies a hard limit. The -S option spec-
		     ifies  a  soft  limit.  If	 neither  option is specified,
		     ulimit sets both limits and print the soft	limit.

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

		     -M	    address space limit	(in kbytes), usually -v	alias
		     -c	    maximum core file size (in 512-byte	blocks)
		     -d	    maximum size of data segment or heap (in kbytes)
		     -e	    maximum scheduling priority
		     -f	    maximum file size (in 512-byte blocks)
		     -i	    maximum number of pending signals
		     -l	    maximum size of locked memory (in kbytes)
		     -L	    maximum number of file locks
		     -m	    maximum resident set size (in kbytes)
		     -n	    maximum file descriptor plus 1
		     -P	    maximum number of pseudo ttys
		     -q	    maximum number of POSIX message queues
		     -r	    maximum realtime priority
		     -R	    maximum realtime quantum (in usec)
		     -s	    maximum size of stack segment (in kbytes)
		     -S	    maximum size of swap (in kbytes)
		     -t	    maximum CPU	time (in seconds)
		     -u	    maximum number of child processes
		     -v	    maximum size of virtual memory (in kbytes)

		     Not all resources are supported on	all platforms.

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

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

		       ulimit -c 0

	   umask [ mask	]

		     The  user	file-creation  mask  is	 set  to   mask	  (see
		     umask(1)).

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

	   + unset [ name ... ]

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

	   wait	[ n ]

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

   Job Control (jsh)
       When  the  shell	is invoked as jsh or after set -m was called, Job Con-
       trol is enabled in addition to all of the functionality described  pre-
       viously	for sh.	 Typically, Job	Control	is enabled for the interactive
       shell only. Non-interactive shells typically do not  benefit  from  the
       added functionality of Job Control.

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

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

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

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

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

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

       %jobid

       where jobid can be specified in any of the following formats:

       % or +	    For	the current job.

       -	    For	the previous job.

       ?<string>    Specify the	job for	which the command line	uniquely  con-
		    tains string.

       n	    For	job number n.

       pref	    Where pref is a unique prefix of the command name. For ex-
		    ample, if the command ls -l	name were running in the back-
		    ground,  it	could be referred to as	%ls.  pref cannot con-
		    tain blanks	unless it is quoted.

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

       bg [%jobid ...]

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

       fg [%jobid ...]

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

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

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

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

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

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

       kill [ -signal |	-s signal ] %jobid

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

       stop %jobid ...

	   Stops the execution of a background job(s).

       suspend

	   Stops  the execution	of the current shell (but not if it is the lo-
	   gin shell).

       wait [%jobid ...]

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

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

EXIT STATUS
       Errors detected by the shell, such as syntax errors, cause the shell to
       return a	non-zero exit status. If the shell is being used  non-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).

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

       There are stopped jobs.

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

FILES
       /etc/profile   The  system  initialization  file,  executed  for	 login
		      shells.
       $HOME/.profile The  personal  initialization  file,  executed for login
		      shells after /etc/profile.
       /tmp/sh*	      Used as temporary	files for here documents (<<  redirec-
		      tion).
       /dev/null      NULL device used as stdin	for non	job-control background
		      jobs.
       /usr/lib/rsh   The location of the restricted Bourne Shell binary.

ATTRIBUTES
       See attributes(7) for descriptions of the following attributes:

   obosh
       +------------------------------+-----------------------------+
       |       ATTRIBUTE TYPE	      |	     ATTRIBUTE VALUE	    |
       +------------------------------+-----------------------------+
       | Availability		      |SUNWcsu			    |
       +------------------------------+-----------------------------+
       | CSI			      |Enabled			    |
       +------------------------------+-----------------------------+

SEE ALSO
       Intro(1),  bc(1),  bosh(1),  echo(1),  getoptcvt(1),  kill(1),  bsh(1),
       ksh(1), ksh93(1), login(1), newgrp(1), pbosh(1),	ps(1), pwd(1), set(1),
       shell_builtins(1),  stty(1),  test(1),  umask(1),  wait(1),  waitid(2),
       rsh(8),	su(8),	swap(8), sysdef(8), dup(2), exec(2), fork(2), pipe(2),
       ulimit(2), getrlimit(2),	setrlimit(2), setlocale(3C),  signal.h(3HEAD),
       passwd(5), profile(5), attributes(7), environ(7),

WARNINGS
       The use of setuid shell scripts is strongly discouraged.

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

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

       The  built-in  command  . file reads the	whole file before any commands
       are executed.  When a command substitution,  a  set  of	commands  from
       eval, dosh, repeat, command, fc,	jobs or	trap are parsed, the whole set
       of command are read at once.  alias and unalias commands	in the file do
       not  apply  to any commands defined in the file or inside a set of com-
       mands executed with the named built-ins.

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

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

	    lastline=
	    while read line
	    do

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

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

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

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

	    lastline=
	    while read line
	    do
		    lastline=$line
	    done

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

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

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

       If a command is executed, and a command with the	same name is installed
       in a directory in the search path before	the directory where the	origi-
       nal  command  was  found, the shell continues to	exec the original com-
       mand.  Use the hash -r command to correct this situation.

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

       If not in job control mode, the shell implements	 both  foreground  and
       background jobs in the same process group and they all receive the same
       signals,	 which can lead	to unexpected behavior.	It is, therefore, rec-
       ommended	to switch on job control mode via set -m in an interactive en-
       vironment.

       Parameter assignments that precede a special builtin command affect the
       shell itself.  Parameter	assignments that precede the call of  a	 func-
       tion are	ignored.

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

BUGS
       None currently known.

       Mail bugs and suggestions to schilytools@mlists.in-berlin.de or open  a
       ticket at https://codeberg.org/schilytools/schilytools/issues.

       The mailing list	archive	may be found at:

       https://mlists.in-berlin.de/mailman/listinfo/schilytools-mlists.in-berlin.de.

AUTHORS
       The  Bourne  Shell  was	initially written by Stephen Richard Bourne at
       Bell Labs in 1976.  The SVr4 release was	written	by various authors  at
       AT&T  in	1989.  The Bourne Shell	was later maintained by	various	people
       at AT&T and Sun Microsystems.  Since 2006, the Bourne  Shell  has  been
       maintained by Joerg Schilling and the schilytools project authors.

SOURCE DOWNLOAD
       The  source  code  for  the Bourne Shell	is included in the schilytools
       project and may be retrieved from the schilytools project  at  Codeberg
       at

       https://codeberg.org/schilytools/schilytools.

       The download directory is

       https://codeberg.org/schilytools/schilytools/releases.

OpenSolaris Bourne Shell	  2022/10/06				 sh(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=obosh&sektion=1&manpath=FreeBSD+Ports+15.0>

home | help