sh man page on YellowDog

Man page or keyword search:  
man Server   18644 pages
apropos Keyword Search (all sections)
Output format
YellowDog logo
[printable version]

SH(P)			   POSIX Programmer's Manual			 SH(P)

NAME
       sh - shell, the standard command language interpreter

SYNOPSIS
       sh [-abCefhimnuvx][-o option][+abCefhimnuvx][+o option]
	       [command_file [argument...]]

       sh -c[-abCefhimnuvx][-o option][+abCefhimnuvx][+o option]command_string
	       [command_name [argument...]]

       sh -s[-abCefhimnuvx][-o option][+abCefhimnuvx][+o option][argument]

DESCRIPTION
       The  sh	utility	 is  a command language interpreter that shall execute
       commands read from a command line string,  the  standard	 input,	 or  a
       specified  file.	 The  application shall ensure that the commands to be
       executed are expressed in the language described in Shell Command  Lan‐
       guage .

       Pathname expansion shall not fail due to the size of a file.

       Shell input and output redirections have an implementation-defined off‐
       set maximum that is established in the open file description.

OPTIONS
       The sh  utility	shall  conform	to  the	 Base  Definitions  volume  of
       IEEE Std 1003.1-2001,  Section 12.2, Utility Syntax Guidelines, with an
       extension for support of a leading plus sign ( '+' ) as noted below.

       The -a, -b, -C, -e, -f, -m, -n, -o option, -u, -v, and -x  options  are
       described  as  part  of the set utility in Special Built-In Utilities .
       The option letters derived from the set special built-in shall also  be
       accepted	 with  a leading plus sign ( '+' ) instead of a leading hyphen
       (meaning the reverse case of the option as described in this volume  of
       IEEE Std 1003.1-2001).

       The following additional options shall be supported:

       -c     Read  commands from the command_string operand. Set the value of
	      special parameter 0 (see Special Parameters ) from the value  of
	      the  command_name operand and the positional parameters ($1, $2,
	      and so on) in sequence from the remaining argument operands.  No
	      commands shall be read from the standard input.

       -i     Specify that the shell is interactive; see below. An implementa‐
	      tion may treat specifying the -i option as an error if the  real
	      user ID of the calling process does not equal the effective user
	      ID or if the real group ID does not equal	 the  effective	 group
	      ID.

       -s     Read commands from the standard input.

       If  there  are  no  operands and the -c option is not specified, the -s
       option shall be assumed.

       If the -i option is present, or	if  there  are	no  operands  and  the
       shell's	standard  input and standard error are attached to a terminal,
       the shell is considered to be interactive.

OPERANDS
       The following operands shall be supported:

       -      A single hyphen shall be treated as the first operand  and  then
	      ignored.	 If  both  '-'	and "--" are given as arguments, or if
	      other operands precede the single hyphen, the results are	 unde‐
	      fined.

       argument
	      The  positional  parameters  ($1, $2, and so on) shall be set to
	      arguments, if any.

       command_file
	      The pathname of a file containing commands. If the pathname con‐
	      tains  one or more slash characters, the implementation attempts
	      to read that file; the file need not be executable. If the path‐
	      name does not contain a slash character:

	       * The  implementation  shall attempt to read that file from the
		 current working directory; the file need not be executable.

	       * If the file is not in	the  current  working  directory,  the
		 implementation	 may  perform  a search for an executable file
		 using the value of PATH , as described in Command Search  and
		 Execution .

       Special parameter 0 (see Special Parameters ) shall be set to the value
       of command_file. If sh is called using a synopsis form that omits  com‐
       mand_file,  special  parameter 0 shall be set to the value of the first
       argument passed to sh from its parent (for example,  argv[0]  for  a  C
       program), which is normally a pathname used to execute the sh utility.

       command_name

	      A string assigned to special parameter 0 when executing the com‐
	      mands in command_string. If command_name is not specified,  spe‐
	      cial parameter 0 shall be set to the value of the first argument
	      passed to sh from its parent (for example, argv[0] for a C  pro‐
	      gram), which is normally a pathname used to execute the sh util‐
	      ity.

       command_string

	      A string that shall be interpreted by the shell as one  or  more
	      commands,	 as  if	 the  string were the argument to the system()
	      function	defined	  in   the   System   Interfaces   volume   of
	      IEEE Std 1003.1-2001.  If the command_string operand is an empty
	      string, sh shall exit with a zero exit status.

STDIN
       The standard input shall be used only if one of the following is true:

	* The -s option is specified.

	* The -c option is not specified and no operands are specified.

	* The script executes one or more commands  that  require  input  from
	  standard  input  (such  as a read command that does not redirect its
	  input).

       See the INPUT FILES section.

       When the shell is using standard input and it invokes  a	 command  that
       also  uses  standard  input,  the  shell shall ensure that the standard
       input file pointer points directly after the command it has  read  when
       the  command begins execution. It shall not read ahead in such a manner
       that any characters intended to be read by the invoked command are con‐
       sumed  by  the  shell (whether interpreted by the shell or not) or that
       characters that are not read by the invoked command are not seen by the
       shell.  When  the  command  expecting to read standard input is started
       asynchronously by an interactive shell, it is unspecified whether char‐
       acters are read by the command or interpreted by the shell.

       If  the standard input to sh is a FIFO or terminal device and is set to
       non-blocking reads, then sh shall enable	 blocking  reads  on  standard
       input. This shall remain in effect when the command completes.

INPUT FILES
       The  input file shall be a text file, except that line lengths shall be
       unlimited. If the input file is empty or consists solely of blank lines
       or comments, or both, sh shall exit with a zero exit status.

ENVIRONMENT VARIABLES
       The following environment variables shall affect the execution of sh:

       ENV    This  variable,  when  and  only	when  an  interactive shell is
	      invoked, shall be subjected to parameter expansion (see  Parame‐
	      ter  Expansion  ) by the shell, and the resulting value shall be
	      used as a pathname of a file containing shell commands  to  exe‐
	      cute  in	the  current  environment.   The file need not be exe‐
	      cutable. If the expanded value of ENV is not an  absolute	 path‐
	      name,  the results are unspecified.  ENV shall be ignored if the
	      real and effective user IDs or real and effective group  IDs  of
	      the process are different.

       FCEDIT This  variable,  when expanded by the shell, shall determine the
	      default value for the -e editor option's editor option-argument.
	      If FCEDIT is null or unset, ed shall be used as the editor. This
	      volume of IEEE Std 1003.1-2001 specifies	the  effects  of  this
	      variable only for systems supporting the User Portability Utili‐
	      ties option.

       HISTFILE
	      Determine a pathname naming a command history file. If the HIST‐
	      FILE  variable  is  not  set, the shell may attempt to access or
	      create a file .sh_history in the directory referred  to  by  the
	      HOME  environment variable. If the shell cannot obtain both read
	      and write access to, or create, the history file, it  shall  use
	      an  unspecified  mechanism  that	allows	the history to operate
	      properly. (References to history "file" in this section shall be
	      understood to mean this unspecified mechanism in such cases.) An
	      implementation may choose to access this variable only when ini‐
	      tializing the history file; this initialization shall occur when
	      fc or sh first attempt to retrieve entries from, or add  entries
	      to,  the file, as the result of commands issued by the user, the
	      file named by the ENV variable, or implementation-defined system
	      start-up	files.	Implementations may choose to disable the his‐
	      tory list mechanism for users with appropriate privileges who do
	      not  set	HISTFILE ; the specific circumstances under which this
	      occurs are implementation-defined. If more than one instance  of
	      the  shell is using the same history file, it is unspecified how
	      updates to the history  file  from  those	 shells	 interact.  As
	      entries are deleted from the history file, they shall be deleted
	      oldest first.  It is unspecified when history file  entries  are
	      physically  removed  from	 the  history  file.  This  volume  of
	      IEEE Std 1003.1-2001 specifies the effects of this variable only
	      for systems supporting the User Portability Utilities option.

       HISTSIZE
	      Determine	 a decimal number representing the limit to the number
	      of previous commands that are accessible. If  this  variable  is
	      unset, an unspecified default greater than or equal to 128 shall
	      be used. The maximum number of commands in the history  list  is
	      unspecified,  but	 shall	be at least 128. An implementation may
	      choose to access this variable only when initializing  the  his‐
	      tory  file,  as  described  under	 HISTFILE  .  Therefore, it is
	      unspecified whether changes made to HISTSIZE after  the  history
	      file has been initialized are effective.

       HOME   Determine	 the  pathname	of the user's home directory. The con‐
	      tents of HOME are used in tilde expansion as described in	 Tilde
	      Expansion	 .  This  volume of IEEE Std 1003.1-2001 specifies the
	      effects of this variable only for systems	 supporting  the  User
	      Portability Utilities option.

       IFS    (Input  Field Separators.) A string treated as a list of charac‐
	      ters that shall be used for field splitting and to  split	 lines
	      into  words  with the read command. See Field Splitting . If IFS
	      is not set, the shell shall behave as if the value of  IFS  were
	      <space>,	<tab>,	and  <newline>. Implementations may ignore the
	      value of IFS in the environment  at  the	time  sh  is  invoked,
	      treating IFS as if it were not set.

       LANG   Provide  a  default value for the internationalization variables
	      that are unset or null. (See  the	 Base  Definitions  volume  of
	      IEEE Std 1003.1-2001,  Section  8.2,  Internationalization Vari‐
	      ables for the precedence of internationalization variables  used
	      to determine the values of locale categories.)

       LC_ALL If  set  to a non-empty string value, override the values of all
	      the other internationalization variables.

       LC_COLLATE

	      Determine	 the  behavior	of  range   expressions,   equivalence
	      classes,	and  multi-character collating elements within pattern
	      matching.

       LC_CTYPE
	      Determine the locale for	the  interpretation  of	 sequences  of
	      bytes  of	 text  data as characters (for example, single-byte as
	      opposed to multi-byte characters in arguments and input  files),
	      which characters are defined as letters (character class alpha),
	      and the behavior of character classes within pattern matching.

       LC_MESSAGES
	      Determine the locale that should be used to  affect  the	format
	      and contents of diagnostic messages written to standard error.

       MAIL   Determine	 a pathname of the user's mailbox file for purposes of
	      incoming mail notification. If this variable is set,  the	 shell
	      shall  inform the user if the file named by the variable is cre‐
	      ated or if its modification time has changed. Informing the user
	      shall  be accomplished by writing a string of unspecified format
	      to standard error prior to  the  writing	of  the	 next  primary
	      prompt string. Such check shall be performed only after the com‐
	      pletion of the interval defined by the MAILCHECK variable	 after
	      the  last such check. The user shall be informed only if MAIL is
	      set and MAILPATH is not set. This volume of IEEE Std 1003.1-2001
	      specifies the effects of this variable only for systems support‐
	      ing the User Portability Utilities option.

       MAILCHECK

	      Establish a decimal integer value that specifies how  often  (in
	      seconds)	the  shell  shall check for the arrival of mail in the
	      files specified by the MAILPATH or MAIL variables.  The  default
	      value  shall  be	600  seconds.  If set to zero, the shell shall
	      check  before  issuing  each  primary  prompt.  This  volume  of
	      IEEE Std 1003.1-2001 specifies the effects of this variable only
	      for systems supporting the User Portability Utilities option.

       MAILPATH
	      Provide a list of pathnames and optional messages	 separated  by
	      colons.	If  this  variable  is set, the shell shall inform the
	      user if any of the files named by the variable are created or if
	      any of their modification times change. (See the preceding entry
	      for MAIL for descriptions of mail arrival and  user  informing.)
	      Each  pathname can be followed by '%' and a string that shall be
	      subjected to parameter expansion and written to  standard	 error
	      when  the	 modification  time changes. If a '%' character in the
	      pathname is preceded by a backslash, it shall be	treated	 as  a
	      literal '%' in the pathname. The default message is unspecified.

       The  MAILPATH environment variable takes precedence over the MAIL vari‐
       able. This volume of IEEE Std 1003.1-2001 specifies the effects of this
       variable	 only  for  systems  supporting the User Portability Utilities
       option.

       NLSPATH
	      Determine the location of message catalogs for the processing of
	      LC_MESSAGES .

       PATH   Establish	 a  string  formatted as described in the Base Defini‐
	      tions volume of  IEEE Std 1003.1-2001,  Chapter  8,  Environment
	      Variables,  used	to  effect command interpretation; see Command
	      Search and Execution .

       PWD    This variable shall represent an absolute pathname of  the  cur‐
	      rent  working  directory.	 Assignments  to  this variable may be
	      ignored unless the value is an absolute pathname of the  current
	      working directory and there are no filename components of dot or
	      dot-dot.

ASYNCHRONOUS EVENTS
       Default.

STDOUT
       See the STDERR section.

STDERR
       Except as otherwise stated (by the descriptions of any  invoked	utili‐
       ties  or	 in  interactive  mode), standard error shall be used only for
       diagnostic messages.

OUTPUT FILES
       None.

EXTENDED DESCRIPTION
       See Shell Command Language . The following additional capabilities  are
       supported on systems supporting the User Portability Utilities option.

   Command History List
       When  the  sh  utility is being used interactively, it shall maintain a
       list of commands previously entered from the terminal in the file named
       by  the	HISTFILE  environment  variable.  The type, size, and internal
       format of this file are unspecified. Multiple sh	 processes  can	 share
       access  to  the file for a user, if file access permissions allow this;
       see the description of the HISTFILE environment variable.

   Command Line Editing
       When sh is being used interactively from a terminal, the	 current  com‐
       mand and the command history (see fc ) can be edited using vi-mode com‐
       mand line editing. This mode uses commands, described below, similar to
       a  subset  of  those  described in the vi utility.  Implementations may
       offer other command line editing modes corresponding to	other  editing
       utilities.

       The command set -o vi shall enable vi-mode editing and place sh into vi
       insert mode (see Command Line Editing (vi-mode) ).  This	 command  also
       shall  disable  any other editing mode that the implementation may pro‐
       vide. The command set +o vi disables vi-mode editing.

       Certain block-mode terminals may be unable  to  support	shell  command
       line  editing.  If a terminal is unable to provide either edit mode, it
       need not be possible to set -o vi when using the shell on  this	termi‐
       nal.

       In  the	following sections, the characters erase, interrupt, kill, and
       end-of-file are those set by the stty utility.

   Command Line Editing (vi-mode)
       In vi editing mode, there shall be a distinguished line, the edit line.
       All  the	 editing  operations which modify a line affect the edit line.
       The edit line is always the newest line in the command history buffer.

       With vi-mode enabled, sh can be switched between insert mode  and  com‐
       mand mode.

       When  in	 insert	 mode, an entered character shall be inserted into the
       command line, except as noted in vi Line Editing	 Insert	 Mode  .  Upon
       entering	 sh and after termination of the previous command, sh shall be
       in insert mode.

       Typing an escape character shall switch sh into command	mode  (see  vi
       Line  Editing  Command  Mode  ).	 In command mode, an entered character
       shall either invoke a defined operation, be used as part	 of  a	multi-
       character operation, or be treated as an error. A character that is not
       recognized as part of an editing command shall terminate	 any  specific
       editing	command	 and  shall  alert  the terminal. Typing the interrupt
       character in command mode shall cause  sh  to  terminate	 command  line
       editing	on  the	 current  command line, reissue the prompt on the next
       line of the terminal, and reset the command history (see fc )  so  that
       the  most  recently  executed command is the previous command (that is,
       the command that was being edited when it was interrupted is not	 reen‐
       tered into the history).

       In the following sections, the phrase "move the cursor to the beginning
       of the word" shall mean "move the cursor to the first character of  the
       current	word"  and the phrase "move the cursor to the end of the word"
       shall mean "move the cursor to the last character of the current word".
       The  phrase "beginning of the command line" indicates the point between
       the end of the prompt string issued by the shell (or the	 beginning  of
       the  terminal line, if there is no prompt string) and the first charac‐
       ter of the command text.

   vi Line Editing Insert Mode
       While in insert mode, any character typed shall be inserted in the cur‐
       rent command line, unless it is from the following set.

       <newline>
	      Execute the current command line. If the current command line is
	      not empty, this line shall be entered into the  command  history
	      (see fc ).

       erase  Delete the character previous to the current cursor position and
	      move the current cursor position back one character.  In	insert
	      mode,  characters	 shall	be erased from both the screen and the
	      buffer when backspacing.

       interrupt
	      Terminate	 command  line	editing	 with  the  same  effects   as
	      described	 for interrupting command mode; see Command Line Edit‐
	      ing (vi-mode) .

       kill   Clear all the characters from the input line.

       <control>-V
	      Insert the next character input, even if the character is other‐
	      wise a special insert mode character.

       <control>-W
	      Delete  the  characters from the one preceding the cursor to the
	      preceding word boundary. The word boundary in this case  is  the
	      closer  to  the  cursor of either the beginning of the line or a
	      character that is in neither the blank nor punct character clas‐
	      sification of the current locale.

       end-of-file
	      Interpreted as the end of input in sh. This interpretation shall
	      occur only at the beginning of an input line. If end-of-file  is
	      entered other than at the beginning of the line, the results are
	      unspecified.

       <ESC>  Place sh into command mode.

   vi Line Editing Command Mode
       In command mode for the command line editing  feature,  decimal	digits
       not beginning with 0 that precede a command letter shall be remembered.
       Some commands use these decimal digits as a count number	 that  affects
       the operation.

       The term motion command represents one of the commands:

	      <space>  0  b  F	l  W  ^	 $  ;  E  f  T	w  |  ,	 B  e  h  t

       If the current line is not the edit line, any command that modifies the
       current line shall cause the content of the current line to replace the
       content	of  the	 edit line, and the current line shall become the edit
       line. This replacement cannot be undone	(see  the  u  and  U  commands
       below).	The modification requested shall then be performed to the edit
       line. When the current line is the edit line, the modification shall be
       done directly to the edit line.

       Any  command  that is preceded by count shall take a count (the numeric
       value of any preceding decimal digits). Unless  otherwise  noted,  this
       count  shall  cause  the specified operation to repeat by the number of
       times specified by the count. Also unless otherwise noted, a count that
       is  out	of  range is considered an error condition and shall alert the
       terminal, but neither the cursor position, nor the command line,	 shall
       change.

       The  terms  word and bigword are used as defined in the vi description.
       The term save buffer corresponds to the term unnamed buffer in vi.

       The following commands shall be recognized in command mode:

       <newline>
	      Execute the current command line. If the current command line is
	      not  empty,  this line shall be entered into the command history
	      (see fc ).

       <control>-L
	      Redraw the current command line. Position the cursor at the same
	      location on the redrawn line.

       #      Insert the character '#' at the beginning of the current command
	      line and treat the resulting edit line as a comment.  This  line
	      shall be entered into the command history; see fc .

       =      Display  the possible shell word expansions (see Word Expansions
	      ) of the bigword at the current command line position.

       Note:
	      This does not modify the content of the current line, and there‐
	      fore does not cause the current line to become the edit line.

       These  expansions  shall be displayed on subsequent terminal lines.  If
       the bigword contains none of the characters '?' , '*' ,	or  '['	 ,  an
       asterisk	 ( '*' ) shall be implicitly assumed at the end. If any direc‐
       tories are  matched,  these  expansions	shall  have  a	'/'  character
       appended.   After  the expansion, the line shall be redrawn, the cursor
       repositioned at the current cursor position, and sh shall be placed  in
       command mode.

       \      Perform pathname expansion (see Pathname Expansion ) on the cur‐
	      rent bigword, up to the largest set of characters	 that  can  be
	      matched  uniquely.   If the bigword contains none of the charac‐
	      ters '?' , '*' , or '[' , an asterisk ( '*' ) shall  be  implic‐
	      itly  assumed  at	 the  end.  This  maximal expansion then shall
	      replace the original bigword in the command line, and the cursor
	      shall  be	 placed after this expansion. If the resulting bigword
	      completely and uniquely matches a	 directory,  a	'/'  character
	      shall be inserted directly after the bigword. If some other file
	      is completely matched, a single <space> shall be inserted	 after
	      the  bigword. After this operation, sh shall be placed in insert
	      mode.

       *      Perform pathname expansion on the current bigword and insert all
	      expansions into the command to replace the current bigword, with
	      each expansion separated by a single <space>. If at the  end  of
	      the  line,  the  current	cursor	position shall be moved to the
	      first column position following the expansions and sh  shall  be
	      placed  in  insert  mode. Otherwise, the current cursor position
	      shall be the last column position of the first  character	 after
	      the  expansions  and  sh	shall be placed in insert mode. If the
	      current bigword contains none of the characters '?'  , '*' ,  or
	      '['  ,  before  the  operation,  an asterisk shall be implicitly
	      assumed at the end.

       @letter
	      Insert the value of the alias named _letter. The	symbol	letter
	      represents a single alphabetic character from the portable char‐
	      acter set; implementations may support additional characters  as
	      an  extension.  If the alias _letter contains other editing com‐
	      mands, these commands shall be performed as part of  the	inser‐
	      tion. If no alias _letter is enabled, this command shall have no
	      effect.

       [count]~
	      Convert, if the current character is a lowercase letter, to  the
	      equivalent uppercase letter and vice versa, as prescribed by the
	      current locale.  The  current  cursor  position  then  shall  be
	      advanced	by  one character. If the cursor was positioned on the
	      last character of the line, the case conversion shall occur, but
	      the  cursor shall not advance. If the '~' command is preceded by
	      a count, that number of characters shall be converted,  and  the
	      cursor  shall  be	 advanced  to the character position after the
	      last character converted. If the count is larger than the number
	      of  characters after the cursor, this shall not be considered an
	      error; the cursor shall advance to the  last  character  on  the
	      line.

       [count].
	      Repeat  the  most recent non-motion command, even if it was exe‐
	      cuted on an earlier command line. If the	previous  command  was
	      preceded	by a count, and no count is given on the '.'  command,
	      the count from the previous command shall be included as part of
	      the repeated command. If the '.' command is preceded by a count,
	      this shall override any count argument to the previous  command.
	      The  count  specified  in the '.' command shall become the count
	      for subsequent '.' commands issued without a count.

       [number]v
	      Invoke the vi editor to edit the current command line in a  tem‐
	      porary  file.  When the editor exits, the commands in the tempo‐
	      rary file shall be executed and placed in the  command  history.
	      If  a number is included, it specifies the command number in the
	      command history to be edited, rather than	 the  current  command
	      line.

       [count]l	  (ell)

       [count]<space>

	      Move the current cursor position to the next character position.
	      If the cursor was positioned on the last character of the	 line,
	      the  terminal  shall  be	alerted	 and  the  cursor shall not be
	      advanced.	 If the count is larger than the number of  characters
	      after  the  cursor,  this	 shall not be considered an error; the
	      cursor shall advance to the last character on the line.

       [count]h
	      Move the current cursor position to the countth (default 1) pre‐
	      vious  character	position.  If the cursor was positioned on the
	      first character of the line, the terminal shall be  alerted  and
	      the  cursor  shall not be moved. If the count is larger than the
	      number of characters before the cursor, this shall not  be  con‐
	      sidered  an  error; the cursor shall move to the first character
	      on the line.

       [count]w
	      Move to the start of the next word. If the cursor was positioned
	      on the last character of the line, the terminal shall be alerted
	      and the cursor shall not be advanced. If	the  count  is	larger
	      than  the	 number	 of  words after the cursor, this shall not be
	      considered an error; the cursor shall advance to the last	 char‐
	      acter on the line.

       [count]W
	      Move  to	the start of the next bigword. If the cursor was posi‐
	      tioned on the last character of the line, the terminal shall  be
	      alerted  and  the	 cursor shall not be advanced. If the count is
	      larger than the number of bigwords after the cursor, this	 shall
	      not be considered an error; the cursor shall advance to the last
	      character on the line.

       [count]e
	      Move to the end of the current word. If at the end  of  a	 word,
	      move  to	the end of the next word. If the cursor was positioned
	      on the last character of the line, the terminal shall be alerted
	      and  the	cursor	shall  not be advanced. If the count is larger
	      than the number of words after the cursor,  this	shall  not  be
	      considered  an error; the cursor shall advance to the last char‐
	      acter on the line.

       [count]E
	      Move to the end of the current bigword. If at the end of a  big‐
	      word,  move  to  the  end of the next bigword. If the cursor was
	      positioned on the last character of the line, the terminal shall
	      be alerted and the cursor shall not be advanced. If the count is
	      larger than the number of bigwords after the cursor, this	 shall
	      not be considered an error; the cursor shall advance to the last
	      character on the line.

       [count]b
	      Move to the beginning of the current word. If at	the  beginning
	      of  a  word,  move to the beginning of the previous word. If the
	      cursor was positioned on the first character of  the  line,  the
	      terminal	shall be alerted and the cursor shall not be moved. If
	      the count is larger than the number of words preceding the  cur‐
	      sor,  this  shall	 not  be considered an error; the cursor shall
	      return to the first character on the line.

       [count]B
	      Move to the beginning of the current bigword. If at  the	begin‐
	      ning  of	a  bigword, move to the beginning of the previous big‐
	      word.  If the cursor was positioned on the  first	 character  of
	      the line, the terminal shall be alerted and the cursor shall not
	      be moved.	 If the count is larger than the  number  of  bigwords
	      preceding the cursor, this shall not be considered an error; the
	      cursor shall return to the first character on the line.

       ^      Move the current cursor position to the first character  on  the
	      input line that is not a <blank>.

       $      Move to the last character position on the current command line.

       0      (Zero.) Move to the first character position on the current com‐
	      mand line.

       [count]|
	      Move to the countth character position on	 the  current  command
	      line. If no number is specified, move to the first position. The
	      first character position shall be numbered 1. If	the  count  is
	      larger than the number of characters on the line, this shall not
	      be considered an error; the cursor shall be placed on  the  last
	      character on the line.

       [count]fc
	      Move  to	the  first occurrence of the character 'c' that occurs
	      after the current cursor position. If the cursor was  positioned
	      on the last character of the line, the terminal shall be alerted
	      and the cursor shall not be advanced. If the character 'c'  does
	      not  occur  in  the  line after the current cursor position, the
	      terminal shall be alerted and the cursor shall not be moved.

       [count]Fc
	      Move to the first occurrence of the character  'c'  that	occurs
	      before the current cursor position. If the cursor was positioned
	      on the first character  of  the  line,  the  terminal  shall  be
	      alerted  and the cursor shall not be moved. If the character 'c'
	      does not occur in the line before the current  cursor  position,
	      the terminal shall be alerted and the cursor shall not be moved.

       [count]tc
	      Move to the character before the first occurrence of the charac‐
	      ter 'c' that occurs after the current cursor position.   If  the
	      cursor  was  positioned  on  the last character of the line, the
	      terminal shall be alerted and the cursor shall not be  advanced.
	      If  the  character 'c' does not occur in the line after the cur‐
	      rent cursor position, the terminal shall be alerted and the cur‐
	      sor shall not be moved.

       [count]Tc
	      Move  to the character after the first occurrence of the charac‐
	      ter 'c' that occurs before the current cursor position.  If  the
	      cursor  was  positioned  on the first character of the line, the
	      terminal shall be alerted and the cursor shall not be moved.  If
	      the  character 'c' does not occur in the line before the current
	      cursor position, the terminal shall be alerted  and  the	cursor
	      shall not be moved.

       [count];
	      Repeat  the most recent f, F, t, or T command.  Any number argu‐
	      ment on that previous command shall be ignored. Errors are those
	      described for the repeated command.

       [count],
	      Repeat  the most recent f, F, t, or T command.  Any number argu‐
	      ment on that previous command shall be ignored. However, reverse
	      the direction of that command.

       a      Enter  insert mode after the current cursor position. Characters
	      that are entered shall be inserted before the next character.

       A      Enter insert mode after the end of the current command line.

       i      Enter insert mode at the	current	 cursor	 position.  Characters
	      that are entered shall be inserted before the current character.

       I      Enter insert mode at the beginning of the current command line.

       R      Enter  insert  mode,  replacing characters from the command line
	      beginning at the current cursor position.

       [count]cmotion

	      Delete the characters between the current	 cursor	 position  and
	      the  cursor position that would result from the specified motion
	      command. Then enter insert mode before the first character  fol‐
	      lowing  any  deleted characters. If count is specified, it shall
	      be applied to the motion command. A count shall be  ignored  for
	      the following motion commands:

	      0	   ^	$    c

       If  the	motion command is the character 'c' , the current command line
       shall be cleared and insert mode shall be entered. If the  motion  com‐
       mand would move the current cursor position toward the beginning of the
       command line, the character under the current cursor position shall not
       be  deleted.  If the motion command would move the current cursor posi‐
       tion toward the end of the command line, the character under  the  cur‐
       rent  cursor position shall be deleted. If the count is larger than the
       number of characters between the current cursor position and the end of
       the command line toward which the motion command would move the cursor,
       this shall not be considered an error; all of the remaining  characters
       in  the	aforementioned range shall be deleted and insert mode shall be
       entered. If the motion  command	is  invalid,  the  terminal  shall  be
       alerted, the cursor shall not be moved, and no text shall be deleted.

       C      Delete  from  the	 current  character to the end of the line and
	      enter insert mode at the new end-of-line.

       S      Clear the entire edit line and enter insert mode.

       [count]rc
	      Replace the current character with the character 'c'  .  With  a
	      number  count,  replace  the  current  and the following count-1
	      characters. After this  command,	the  current  cursor  position
	      shall be on the last character that was changed. If the count is
	      larger than the number of	 characters  after  the	 cursor,  this
	      shall  not  be considered an error; all of the remaining charac‐
	      ters shall be changed.

       [count]_
	      Append a <space> after the current character position  and  then
	      append  the  last	 bigword  in the previous input line after the
	      <space>. Then enter insert mode after the	 last  character  just
	      appended. With a number count, append the countth bigword in the
	      previous line.

       [count]x
	      Delete the character at the current cursor  position  and	 place
	      the  deleted  characters	in  the save buffer. If the cursor was
	      positioned on the last character	of  the	 line,	the  character
	      shall  be	 deleted and the cursor position shall be moved to the
	      previous character (the new last character).  If	the  count  is
	      larger  than  the	 number	 of  characters after the cursor, this
	      shall not be considered an error; all the	 characters  from  the
	      cursor to the end of the line shall be deleted.

       [count]X
	      Delete  the  character  before  the  current cursor position and
	      place the deleted characters in the save buffer.	The  character
	      under  the current cursor position shall not change. If the cur‐
	      sor was positioned on the first character of the line, the  ter‐
	      minal  shall be alerted, and the X command shall have no effect.
	      If the line contained a single character, the  X	command	 shall
	      have  no effect. If the line contained no characters, the termi‐
	      nal shall be alerted and the cursor shall not be moved.  If  the
	      count is larger than the number of characters before the cursor,
	      this shall not be considered an error; all the  characters  from
	      before the cursor to the beginning of the line shall be deleted.

       [count]dmotion

	      Delete  the  characters  between the current cursor position and
	      the character position that would result from  the  motion  com‐
	      mand.  A number count repeats the motion command count times. If
	      the motion command would move toward the beginning of  the  com‐
	      mand line, the character under the current cursor position shall
	      not be deleted. If the motion command is d, the  entire  current
	      command  line  shall be cleared. If the count is larger than the
	      number of characters between the current cursor position and the
	      end  of  the  command line toward which the motion command would
	      move the cursor, this shall not be considered an error;  all  of
	      the  remaining  characters  in the aforementioned range shall be
	      deleted. The deleted characters shall be placed in the save buf‐
	      fer.

       D      Delete  all  characters  from the current cursor position to the
	      end of the line. The deleted characters shall be placed  in  the
	      save buffer.

       [count]ymotion

	      Yank  (that  is,	copy)  the  characters from the current cursor
	      position to the position resulting from the motion command  into
	      the  save	 buffer. A number count shall be applied to the motion
	      command.	If the motion command would move toward the  beginning
	      of  the  command	line,  the  character under the current cursor
	      position shall not be included in the set of yanked  characters.
	      If  the  motion  command	is  y, the entire current command line
	      shall be yanked into the save buffer. The current	 cursor	 posi‐
	      tion  shall be unchanged. If the count is larger than the number
	      of characters between the current cursor position and the end of
	      the  command line toward which the motion command would move the
	      cursor, this shall not  be  considered  an  error;  all  of  the
	      remaining	 characters  in	 the  aforementioned  range  shall  be
	      yanked.

       Y      Yank the characters from the current cursor position to the  end
	      of the line into the save buffer. The current character position
	      shall be unchanged.

       [count]p
	      Put a copy of the current contents of the save buffer after  the
	      current  cursor  position.  The current cursor position shall be
	      advanced to the last character put from the save buffer. A count
	      shall indicate how many copies of the save buffer shall be put.

       [count]P
	      Put a copy of the current contents of the save buffer before the
	      current cursor position. The current cursor  position  shall  be
	      moved  to	 the  last character put from the save buffer. A count
	      shall indicate how many copies of the save buffer shall be put.

       u      Undo the last command that changed the edit line. This operation
	      shall not undo the copy of any command line to the edit line.

       U      Undo all changes made to the edit line. This operation shall not
	      undo the copy of any command line to the edit line.

       [count]k

       [count]-
	      Set the current command line to be the countth previous  command
	      line in the shell command history. If count is not specified, it
	      shall default to 1. The cursor shall be positioned on the	 first
	      character	 of the new command. If a k or - command would retreat
	      past the maximum number of commands in  effect  for  this	 shell
	      (affected	 by  the  HISTSIZE environment variable), the terminal
	      shall be alerted, and the command shall have no effect.

       [count]j

       [count]+
	      Set the current command line to be the countth next command line
	      in  the  shell  command  history.	 If count is not specified, it
	      shall default to 1. The cursor shall be positioned on the	 first
	      character	 of the new command. If a j or + command advances past
	      the edit line, the current command line shall be restored to the
	      edit line and the terminal shall be alerted.

       [number]G
	      Set  the	current	 command  line	to  be the oldest command line
	      stored in the shell command history. With a number  number,  set
	      the  current  command  line to be the command line number in the
	      history. If command line number does  not	 exist,	 the  terminal
	      shall be alerted and the command line shall not be changed.

       /pattern<newline>

	      Move  backwards  through	the command history, searching for the
	      specified pattern, beginning with	 the  previous	command	 line.
	      Patterns	use the pattern matching notation described in Pattern
	      Matching Notation , except that the  '^'	character  shall  have
	      special  meaning	when it appears as the first character of pat‐
	      tern. In this case, the '^'  is  discarded  and  the  characters
	      after  the '^' shall be matched only at the beginning of a line.
	      Commands in the command history shall be treated as strings, not
	      as  filenames.  If the pattern is not found, the current command
	      line shall be unchanged and the terminal is alerted.  If	it  is
	      found  in a previous line, the current command line shall be set
	      to that line and the cursor shall be set to the first  character
	      of the new command line.

       If  pattern  is	empty,	the  last non-empty pattern provided to / or ?
       shall be used. If there is no previous non-empty pattern, the  terminal
       shall be alerted and the current command line shall remain unchanged.

       ?pattern<newline>

	      Move  forwards  through  the  command history, searching for the
	      specified pattern, beginning with the next  command  line.  Pat‐
	      terns  use  the  pattern	matching notation described in Pattern
	      Matching Notation , except that the  '^'	character  shall  have
	      special  meaning	when it appears as the first character of pat‐
	      tern. In this case, the '^'  is  discarded  and  the  characters
	      after  the '^' shall be matched only at the beginning of a line.
	      Commands in the command history shall be treated as strings, not
	      as  filenames.  If the pattern is not found, the current command
	      line shall be unchanged and the terminal alerted. If it is found
	      in  a  following	line, the current command line shall be set to
	      that line and the cursor shall be set to the fist	 character  of
	      the new command line.

       If  pattern  is	empty,	the  last non-empty pattern provided to / or ?
       shall be used. If there is no previous non-empty pattern, the  terminal
       shall be alerted and the current command line shall remain unchanged.

       n      Repeat the most recent / or ? command. If there is no previous /
	      or ?, the terminal shall be alerted and the current command line
	      shall remain unchanged.

       N      Repeat  the  most recent / or ? command, reversing the direction
	      of the search. If there is no previous  /	 or  ?,	 the  terminal
	      shall  be	 alerted  and  the  current  command line shall remain
	      unchanged.

EXIT STATUS
       The following exit values shall be returned:

	   0  The script to be executed consisted solely of zero or more blank
	      lines or comments, or both.

       1-125  A non-interactive shell detected a syntax, redirection, or vari‐
	      able assignment error.

	 127  A specified command_file could not be found by a non-interactive
	      shell.

       Otherwise,  the	shell shall return the exit status of the last command
       it invoked or attempted to invoke (see also the exit utility in Special
       Built-In Utilities ).

CONSEQUENCES OF ERRORS
       See Consequences of Shell Errors .

       The following sections are informative.

APPLICATION USAGE
       Standard	 input and standard error are the files that determine whether
       a shell is interactive when -i is not specified.	 For example:

	      sh > file

       and:

	      sh 2> file

       create interactive and non-interactive shells,  respectively.  Although
       both accept terminal input, the results of error conditions are differ‐
       ent, as described in Consequences of Shell Errors ; in the second exam‐
       ple  a  redirection  error  encountered	by  a special built-in utility
       aborts the shell.

       A conforming application must protect its first operand, if  it	starts
       with  a	plus sign, by preceding it with the "--" argument that denotes
       the end of the options.

       Applications should note that the standard PATH to the shell cannot  be
       assumed	to  be either /bin/sh or /usr/bin/sh, and should be determined
       by interrogation of the PATH returned by getconf PATH ,	ensuring  that
       the returned pathname is an absolute pathname and not a shell built-in.

       For example, to determine the location of the standard sh utility:

	      command -v sh

       On some implementations this might return:

	      /usr/xpg4/bin/sh

       Furthermore, on systems that support executable scripts (the "#!"  con‐
       struct), it is recommended that applications using  executable  scripts
       install	them  using  getconf  -v  to  determine the shell pathname and
       update the "#!" script appropriately as	it  is	being  installed  (for
       example, with sed). For example:

	      #
	      # Installation time script to install correct POSIX shell pathname
	      #
	      # Get list of paths to check
	      #
	      Sifs=$IFS
	      IFS=:
	      set $(getconf PATH)
	      IFS=$Sifs
	      #
	      # Check each path for 'sh'
	      #
	      for i in $@
	      do
		  if [ -f ${i}/sh ];
		  then
		      Pshell=${i}/sh
		  fi
	      done
	      #
	      # This is the list of scripts to update. They should be of the
	      # form '${name}.source' and will be transformed to '${name}'.
	      # Each script should begin:
	      #
	      # !INSTALLSHELLPATH -p
	      #
	      scripts="a b c"
	      #
	      # Transform each script
	      #
	      for i in ${scripts}
	      do
		  sed -e "s|INSTALLSHELLPATH|${Pshell}|" < ${i}.source > ${i}
	      done

EXAMPLES
	1. Execute a shell command from a string:

	   sh -c "cat myfile"

	2. Execute a shell script from a file in the current directory:

	   sh my_shell_cmds

RATIONALE
       The  sh utility and the set special built-in utility share a common set
       of options.

       The KornShell ignores the contents of IFS upon entry to the  script.  A
       conforming application cannot rely on importing IFS . One justification
       for this, beyond security considerations, is to assist possible	future
       shell  compilers. Allowing IFS to be imported from the environment pre‐
       vents many optimizations that might otherwise be performed via dataflow
       analysis of the script itself.

       The  text  in  the  STDIN  section about non-blocking reads concerns an
       instance of sh that has been invoked, probably by a C-language program,
       with standard input that has been opened using the O_NONBLOCK flag; see
       open() in the System Interfaces volume of IEEE Std 1003.1-2001. If  the
       shell  did  not reset this flag, it would immediately terminate because
       no input data would be available yet and that would be  considered  the
       same as end-of-file.

       The  options  associated	 with a restricted shell (command name rsh and
       the -r option) were excluded because the standard developers considered
       that  the  implied level of security could not be achieved and they did
       not want to raise false expectations.

       On systems that support set-user-ID scripts, a historical trapdoor  has
       been  to	 link a script to the name -i. When it is called by a sequence
       such as:

	      sh -

       or by:

	      #! usr/bin/sh -

       the historical systems have assumed  that  no  option  letters  follow.
       Thus,  this  volume of IEEE Std 1003.1-2001 allows the single hyphen to
       mark the end of the options, in addition to the use of the regular "--"
       argument, because it was considered that the older practice was so per‐
       vasive. An alternative approach is taken by the KornShell,  where  real
       and  effective user/group IDs must match for an interactive shell; this
       behavior	   is	 specifically	 allowed    by	  this	  volume    of
       IEEE Std 1003.1-2001.

       Note:  There  are  other problems with set-user-ID scripts that the two
	      approaches described here do not resolve.

       The initialization process for the history file can be dependent on the
       system  start-up	 files,	 in that they may contain commands that effec‐
       tively preempt the user's settings of HISTFILE and HISTSIZE . For exam‐
       ple,  function  definition  commands  are recorded in the history file,
       unless the set -o nolog option is  set.	If  the	 system	 administrator
       includes	 function  definitions	in  some  system  start-up file called
       before the ENV file, the history file is initialized  before  the  user
       gets  a	chance	to  influence  its characteristics. In some historical
       shells, the history file is initialized just after  the	ENV  file  has
       been   processed.   Therefore,  it  is  implementation-defined  whether
       changes made to HISTFILE after the history file	has  been  initialized
       are effective.

       The default messages for the various MAIL -related messages are unspec‐
       ified because they vary across implementations.	Typical messages are:

	      "you have mail\n"

       or:

	      "you have new mail\n"

       It is important that the descriptions of command line editing refer  to
       the  same  shell	 as  that  in IEEE Std 1003.1-2001 so that interactive
       users can also be application programmers without having to  deal  with
       programmatic  differences  in their two environments. It is also essen‐
       tial that the utility name sh be specified because this explicit	 util‐
       ity  name  is  too  firmly rooted in historical practice of application
       programs for it to change.

       Consideration was given to mandating a diagnostic message when attempt‐
       ing  to set vi-mode on terminals that do not support command line edit‐
       ing. However, it is not historical practice for the shell  to  be  cog‐
       nizant  of  all terminal types and thus be able to detect inappropriate
       terminals in all cases.	Implementations are encouraged to supply diag‐
       nostics in this case whenever possible, rather than leaving the user in
       a state where editing commands work incorrectly.

       In early proposals, the KornShell-derived emacs mode  of	 command  line
       editing	was included, even though the emacs editor itself was not. The
       community of emacs proponents was adamant that the  full	 emacs	editor
       not  be	standardized  because  they  were concerned that an attempt to
       standardize this very powerful environment would encourage  vendors  to
       ship strictly conforming versions lacking the extensibility required by
       the community.  The author of the original emacs program also expressed
       his  desire  to	omit  the program. Furthermore, there were a number of
       historical systems that did not include emacs, or included  it  without
       supporting it, but there were very few that did not include and support
       vi. The shell emacs command  line  editing  mode	 was  finally  omitted
       because	it  became  apparent that the KornShell version and the editor
       being distributed with the GNU system had diverged  in  some  respects.
       The  author  of	emacs  requested  that	the POSIX emacs mode either be
       deleted	or  have  a  significant  number  of  unspecified  conditions.
       Although	 the  KornShell author agreed to consider changes to bring the
       shell into alignment, the standard developers decided to defer specifi‐
       cation at that time. At the time, it was assumed that convergence on an
       acceptable definition would occur for a subsequent draft, but that  has
       not happened, and there appears to be no impetus to do so. In any case,
       implementations are free to offer additional command line editing modes
       based  on  the exact models of editors their users are most comfortable
       with.

       Early proposals had the following list entry in vi Line Editing	Insert
       Mode :

       \      If followed by the erase or kill character, that character shall
	      be inserted into the input line. Otherwise, the backslash itself
	      shall be inserted into the input line.

       However,	 this  is  not	actually  a feature of sh command line editing
       insert mode, but one of some historical	terminal  line	drivers.  Some
       conforming  implementations  continue  to  do this when the stty iexten
       flag is set.

FUTURE DIRECTIONS
       None.

SEE ALSO
       Shell Command Language , cd , echo , exit() , fc , pwd , read() , set ,
       stty  ,	test  ,	 umask()  ,  vi	 ,  the	 System	 Interfaces  volume of
       IEEE Std 1003.1-2001, dup(), exec, exit(), fork(), open(), pipe(), sig‐
       nal(), system(), ulimit(), umask(), wait()

COPYRIGHT
       Portions	 of  this text are reprinted and reproduced in electronic form
       from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology
       --  Portable  Operating	System	Interface (POSIX), The Open Group Base
       Specifications Issue 6, Copyright (C) 2001-2003	by  the	 Institute  of
       Electrical  and	Electronics  Engineers, Inc and The Open Group. In the
       event of any discrepancy between this version and the original IEEE and
       The  Open Group Standard, the original IEEE and The Open Group Standard
       is the referee document. The original Standard can be  obtained	online
       at http://www.opengroup.org/unix/online.html .

IEEE/The Open Group		     2003				 SH(P)
[top]

List of man pages available for YellowDog

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net