sh.1p (55895B)
- '\" et
- .TH SH "1P" 2017 "IEEE/The Open Group" "POSIX Programmer's Manual"
- .\"
- .SH PROLOG
- This manual page is part of the POSIX Programmer's Manual.
- The Linux implementation of this interface may differ (consult
- the corresponding Linux manual page for details of Linux behavior),
- or the interface may not be implemented on Linux.
- .\"
- .SH NAME
- sh
- \(em shell, the standard command language interpreter
- .SH SYNOPSIS
- .LP
- .nf
- sh \fB[\fR-abCefhimnuvx\fB] [\fR-o \fIoption\fB]\fR... \fB[\fR+abCefhimnuvx\fB] [\fR+o \fIoption\fB]\fR...
- \fB[\fIcommand_file \fB[\fIargument\fR...\fB]]\fR
- .P
- sh -c \fB[\fR-abCefhimnuvx\fB] [\fR-o \fIoption\fB]\fR... \fB[\fR+abCefhimnuvx\fB] [\fR+o \fIoption\fB]\fR...
- \fIcommand_string \fB[\fIcommand_name \fB[\fIargument\fR...\fB]]\fR
- .P
- sh -s \fB[\fR-abCefhimnuvx\fB] [\fR-o \fIoption\fB]\fR... \fB[\fR+abCefhimnuvx\fB] [\fR+o \fIoption\fB]\fR...
- \fB[\fIargument\fR...\fB]\fR
- .fi
- .SH DESCRIPTION
- The
- .IR 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
- .IR "Chapter 2" ", " "Shell Command Language".
- .P
- Pathname expansion shall not fail due to the size of a file.
- .P
- Shell input and output redirections have an implementation-defined
- offset maximum that is established in the open file description.
- .SH OPTIONS
- The
- .IR sh
- utility shall conform to the Base Definitions volume of POSIX.1\(hy2017,
- .IR "Section 12.2" ", " "Utility Syntax Guidelines",
- with an extension for support of a leading
- <plus-sign>
- (\c
- .BR '\(pl' )
- as noted below.
- .P
- The
- .BR \-a ,
- .BR \-b ,
- .BR \-C ,
- .BR \-e ,
- .BR \-f ,
- .BR \-m ,
- .BR \-n ,
- .BR \-o
- .IR option ,
- .BR \-u ,
- .BR \-v ,
- and
- .BR \-x
- options are described as part of the
- .IR set
- utility in
- .IR "Section 2.14" ", " "Special Built-In Utilities".
- The option letters derived from the
- .IR set
- special built-in shall also be accepted with a leading
- <plus-sign>
- (\c
- .BR '\(pl' )
- instead of a leading
- <hyphen-minus>
- (meaning the reverse case of the option as described in this volume of POSIX.1\(hy2017).
- .P
- The following additional options shall be supported:
- .IP "\fB\-c\fP" 10
- Read commands from the
- .IR command_string
- operand. Set the value of special parameter 0 (see
- .IR "Section 2.5.2" ", " "Special Parameters")
- from the value of the
- .IR command_name
- operand and the positional parameters ($1, $2, and so on) in sequence
- from the remaining
- .IR argument
- operands. No commands shall be read from the standard input.
- .IP "\fB\-i\fP" 10
- Specify that the shell is
- .IR interactive ;
- see below. An implementation may treat specifying the
- .BR \-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.
- .IP "\fB\-s\fP" 10
- Read commands from the standard input.
- .P
- If there are no operands and the
- .BR \-c
- option is not specified, the
- .BR \-s
- option shall be assumed.
- .P
- If the
- .BR \-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
- .IR interactive .
- .SH OPERANDS
- The following operands shall be supported:
- .IP "\fR\-\fR" 10
- A single
- <hyphen-minus>
- shall be treated as the first operand and then ignored. If both
- .BR '\-'
- and
- .BR \(dq--\(dq
- are given as arguments, or if other operands precede the single
- <hyphen-minus>,
- the results are undefined.
- .IP "\fIargument\fR" 10
- The positional parameters ($1, $2, and so on) shall be set to
- .IR arguments ,
- if any.
- .IP "\fIcommand_file\fR" 10
- The pathname of a file containing commands. If the pathname contains
- one or more
- <slash>
- characters, the implementation attempts to read that file; the file need
- not be executable. If the pathname does not contain a
- <slash>
- character:
- .RS 10
- .IP " *" 4
- The implementation shall attempt to read that file from the current
- working directory; the file need not be executable.
- .IP " *" 4
- If the file is not in the current working directory, the implementation
- may perform a search for an executable file using the value of
- .IR PATH ,
- as described in
- .IR "Section 2.9.1.1" ", " "Command Search and Execution".
- .P
- Special parameter 0 (see
- .IR "Section 2.5.2" ", " "Special Parameters")
- shall be set to the value of
- .IR command_file .
- If
- .IR sh
- is called using a synopsis form that omits
- .IR command_file ,
- special parameter 0 shall be set to the value of the first argument
- passed to
- .IR sh
- from its parent (for example,
- .IR argv [0]
- for a C program), which is normally a pathname used to execute the
- .IR sh
- utility.
- .RE
- .IP "\fIcommand_name\fR" 10
- .br
- A string assigned to special parameter 0 when executing the commands in
- .IR command_string .
- If
- .IR command_name
- is not specified, special parameter 0 shall be set to the value of the
- first argument passed to
- .IR sh
- from its parent (for example,
- .IR argv [0]
- for a C program), which is normally a pathname used to execute the
- .IR sh
- utility.
- .IP "\fIcommand_string\fR" 10
- .br
- A string that shall be interpreted by the shell as one or more
- commands, as if the string were the argument to the
- \fIsystem\fR()
- function defined in the System Interfaces volume of POSIX.1\(hy2017. If the
- .IR command_string
- operand is an empty string,
- .IR sh
- shall exit with a zero exit status.
- .SH STDIN
- The standard input shall be used only if one of the following is true:
- .IP " *" 4
- The
- .BR \-s
- option is specified.
- .IP " *" 4
- The
- .BR \-c
- option is not specified and no operands are specified.
- .IP " *" 4
- The script executes one or more commands that require input from
- standard input (such as a
- .IR read
- command that does not redirect its input).
- .P
- See the INPUT FILES section.
- .P
- 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
- consumed 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
- characters are read by the command or interpreted by the shell.
- .P
- If the standard input to
- .IR sh
- is a FIFO or terminal device and is set to non-blocking reads, then
- .IR sh
- shall enable blocking reads on standard input. This shall remain in
- effect when the command completes.
- .SH "INPUT FILES"
- The input file shall be a text file, except that line lengths shall be
- unlimited. If the input file consists solely of zero or more blank lines
- and comments,
- .IR sh
- shall exit with a zero exit status.
- .SH "ENVIRONMENT VARIABLES"
- The following environment variables shall affect the execution of
- .IR sh :
- .IP "\fIENV\fP" 10
- This variable, when and only when an interactive shell is invoked,
- shall be subjected to parameter expansion (see
- .IR "Section 2.6.2" ", " "Parameter Expansion")
- by the shell, and the resulting value shall be used as a pathname of a
- file containing shell commands to execute in the current environment.
- The file need not be executable. If the expanded value of
- .IR ENV
- is not an absolute pathname, the results are unspecified.
- .IR ENV
- shall be ignored if the real and effective user IDs or real and
- effective group IDs of the process are different.
- .IP "\fIFCEDIT\fP" 10
- This variable, when expanded by the shell, shall determine the default
- value for the
- .BR \-e
- .IR editor
- option's
- .IR editor
- option-argument. If
- .IR FCEDIT
- is null or unset,
- .IR ed
- shall be used as the editor.
- .IP "\fIHISTFILE\fP" 10
- Determine a pathname naming a command history file. If the
- .IR HISTFILE
- variable is not set, the shell may attempt to access or create a file
- .BR .sh_history
- in the directory referred to by the
- .IR 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 initializing the history file;
- this initialization shall occur when
- .IR fc
- or
- .IR 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
- .IR ENV
- variable, or implementation-defined system start-up files.
- Implementations may choose to disable the history list mechanism for
- users with appropriate privileges who do not set
- .IR 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.
- .IP "\fIHISTSIZE\fP" 10
- 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 history file, as described under
- .IR HISTFILE .
- Therefore, it is unspecified whether changes made to
- .IR HISTSIZE
- after the history file has been initialized are effective.
- .IP "\fIHOME\fP" 10
- Determine the pathname of the user's home directory. The contents of
- .IR HOME
- are used in tilde expansion as described in
- .IR "Section 2.6.1" ", " "Tilde Expansion".
- .IP "\fILANG\fP" 10
- Provide a default value for the internationalization variables that are
- unset or null. (See the Base Definitions volume of POSIX.1\(hy2017,
- .IR "Section 8.2" ", " "Internationalization Variables"
- for the precedence of internationalization variables used to determine
- the values of locale categories.)
- .IP "\fILC_ALL\fP" 10
- If set to a non-empty string value, override the values of all the
- other internationalization variables.
- .IP "\fILC_COLLATE\fP" 10
- .br
- Determine the behavior of range expressions, equivalence classes, and
- multi-character collating elements within pattern matching.
- .IP "\fILC_CTYPE\fP" 10
- 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
- .BR alpha ),
- and the behavior of character classes within pattern matching.
- .IP "\fILC_MESSAGES\fP" 10
- .br
- Determine the locale that should be used to affect the format and
- contents of diagnostic messages written to standard error.
- .IP "\fIMAIL\fP" 10
- 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 created 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 completion of the interval defined by the
- .IR MAILCHECK
- variable after the last such check. The user shall be informed only if
- .IR MAIL
- is set and
- .IR MAILPATH
- is not set.
- .IP "\fIMAILCHECK\fP" 10
- .br
- 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
- .IR MAILPATH
- or
- .IR MAIL
- variables. The default value shall be 600 seconds. If set to zero,
- the shell shall check before issuing each primary prompt.
- .IP "\fIMAILPATH\fP" 10
- Provide a list of pathnames and optional messages separated by
- <colon>
- characters. 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
- .IR MAIL
- for descriptions of mail arrival and user informing.) Each pathname can
- be followed by
- .BR '%'
- and a string that shall be subjected to parameter expansion and written
- to standard error when the modification time changes. If a
- .BR '%'
- character in the pathname is preceded by a
- <backslash>,
- it shall be treated as a literal
- .BR '%'
- in the pathname. The default message is unspecified.
- .RS 10
- .P
- The
- .IR MAILPATH
- environment variable takes precedence over the
- .IR MAIL
- variable.
- .RE
- .IP "\fINLSPATH\fP" 10
- Determine the location of message catalogs for the processing of
- .IR LC_MESSAGES .
- .IP "\fIPATH\fP" 10
- Establish a string formatted as described in the Base Definitions volume of POSIX.1\(hy2017,
- .IR "Chapter 8" ", " "Environment Variables",
- used to effect command interpretation; see
- .IR "Section 2.9.1.1" ", " "Command Search and Execution".
- .IP "\fIPWD\fP" 10
- This variable shall represent an absolute pathname of the current
- working directory. Assignments to this variable may be ignored.
- .SH "ASYNCHRONOUS EVENTS"
- The
- .IR sh
- utility shall take the standard action for all signals (see
- .IR "Section 1.4" ", " "Utility Description Defaults")
- with the following exceptions.
- .P
- If the shell is interactive, SIGINT signals received during command
- line editing shall be handled as described in the EXTENDED DESCRIPTION,
- and SIGINT signals received at other times shall be caught but no action
- performed.
- .br
- .P
- If the shell is interactive:
- .IP " *" 4
- SIGQUIT and SIGTERM signals shall be ignored.
- .IP " *" 4
- If the
- .BR \-m
- option is in effect, SIGTTIN, SIGTTOU, and SIGTSTP signals shall be
- ignored.
- .IP " *" 4
- If the
- .BR \-m
- option is not in effect, it is unspecified whether SIGTTIN, SIGTTOU,
- and SIGTSTP signals are ignored, set to the default action, or caught.
- If they are caught, the shell shall, in the signal-catching function,
- set the signal to the default action and raise the signal (after taking
- any appropriate steps, such as restoring terminal settings).
- .P
- The standard actions, and the actions described above for interactive
- shells, can be overridden by use of the
- .IR trap
- special built-in utility (see
- .IR "\fItrap\fR\^"
- and
- .IR "Section 2.11" ", " "Signals and Error Handling").
- .SH STDOUT
- See the STDERR section.
- .SH STDERR
- Except as otherwise stated (by the descriptions of any invoked
- utilities or in interactive mode), standard error shall be used
- only for diagnostic messages.
- .SH "OUTPUT FILES"
- None.
- .SH "EXTENDED DESCRIPTION"
- See
- .IR "Chapter 2" ", " "Shell Command Language".
- The functionality described in the rest of the EXTENDED DESCRIPTION
- section shall be provided on implementations that support the User
- Portability Utilities option
- (and the rest of this section is not further shaded for this option).
- .SS "Command History List"
- .P
- When the
- .IR sh
- utility is being used interactively, it shall maintain a list of
- commands previously entered from the terminal in the file named by the
- .IR HISTFILE
- environment variable. The type, size, and internal format of this file
- are unspecified. Multiple
- .IR sh
- processes can share access to the file for a user, if file access
- permissions allow this; see the description of the
- .IR HISTFILE
- environment variable.
- .SS "Command Line Editing"
- .P
- When
- .IR sh
- is being used interactively from a terminal, the current command and
- the command history (see
- .IR "\fIfc\fR\^")
- can be edited using
- .IR vi -mode
- command line editing. This mode uses commands, described below,
- similar to a subset of those described in the
- .IR vi
- utility. Implementations may offer other command line editing modes
- corresponding to other editing utilities.
- .P
- The command
- .IR set
- .BR \-o
- .IR vi
- shall enable
- .IR vi -mode
- editing and place
- .IR sh
- into
- .IR vi
- insert mode (see
- .IR "Command Line Editing (vi-mode)").
- This command also shall disable any other editing mode that the
- implementation may provide. The command
- .IR set
- .BR +o
- .IR vi
- disables
- .IR vi -mode
- editing.
- .P
- 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
- .IR set
- .BR \-o
- .IR vi
- when using the shell on this terminal.
- .P
- In the following sections, the characters
- .IR erase ,
- .IR interrupt ,
- .IR kill ,
- and
- .IR end-of-file
- are those set by the
- .IR stty
- utility.
- .SS "Command Line Editing (vi-mode)"
- .P
- In
- .IR 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.
- .P
- With
- .IR vi -mode
- enabled,
- .IR sh
- can be switched between insert mode and command mode.
- .P
- When in insert mode, an entered character shall be inserted into the
- command line, except as noted in
- .IR "vi Line Editing Insert Mode".
- Upon entering
- .IR sh
- and after termination of the previous command,
- .IR sh
- shall be in insert mode.
- .P
- Typing an escape character shall switch
- .IR sh
- into command mode (see
- .IR "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. If
- .IR sh
- receives a SIGINT signal in command mode (whether generated by typing the
- .IR interrupt
- character or by other means), it shall 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
- .IR "\fIfc\fR\^")
- 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 re-entered into the history).
- .P
- 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 character of the command text.
- .SS "vi Line Editing Insert Mode"
- .P
- While in insert mode, any character typed shall be inserted in the
- current command line, unless it is from the following set.
- .IP <newline> 10
- Execute the current command line. If the current command line is not
- empty, this line shall be entered into the command history (see
- .IR "\fIfc\fR\^").
- .IP "\fIerase\fR" 10
- 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.
- .IP "\fIinterrupt\fR" 10
- If
- .IR sh
- receives a SIGINT signal in insert mode (whether generated by typing
- the
- .IR interrupt
- character or by other means), it shall terminate command line editing
- with the same effects as described for interrupting command mode; see
- .IR "Command Line Editing (vi-mode)".
- .IP "\fIkill\fR" 10
- Clear all the characters from the input line.
- .IP "<control>\(hyV" 10
- Insert the next character input, even if the character is otherwise a
- special insert mode character.
- .IP "<control>\(hyW" 10
- 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
- .BR blank
- nor
- .BR punct
- character classification of the current locale.
- .IP "\fIend-of-file\fR" 10
- Interpreted as the end of input in
- .IR sh .
- This interpretation shall occur only at the beginning of an input
- line. If
- .IR end-of-file
- is entered other than at the beginning of the line, the results are
- unspecified.
- .IP <ESC> 10
- Place
- .IR sh
- into command mode.
- .SS "vi Line Editing Command Mode"
- .P
- 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.
- .P
- The term
- .IR "motion command"
- represents one of the commands:
- .sp
- .RS 4
- .nf
- <space> 0 b F l W \(ha $ ; E f T w | , B e h t
- .fi
- .P
- .RE
- .P
- 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
- .BR u
- and
- .BR 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.
- .P
- Any command that is preceded by
- .IR 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
- .IR 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.
- .P
- The terms
- .IR word
- and
- .IR bigword
- are used as defined in the
- .IR vi
- description. The term
- .IR "save buffer"
- corresponds to the term
- .IR "unnamed buffer"
- in
- .IR vi .
- .P
- The following commands shall be recognized in command mode:
- .IP <newline> 10
- Execute the current command line. If the current command line is not
- empty, this line shall be entered into the command history (see
- .IR "\fIfc\fR\^").
- .IP "<control>\(hyL" 10
- Redraw the current command line. Position the cursor at the same
- location on the redrawn line.
- .IP "\fB#\fP" 10
- Insert the character
- .BR '#'
- 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
- .IR "\fIfc\fR\^".
- .IP "\fB=\fP" 10
- Display the possible shell word expansions (see
- .IR "Section 2.6" ", " "Word Expansions")
- of the bigword at the current command line position.
- .RS 10
- .TP 10
- .BR Note:
- This does not modify the content of the current line, and therefore
- does not cause the current line to become the edit line.
- .P
- .P
- These expansions shall be displayed on subsequent terminal lines. If
- the bigword contains none of the characters
- .BR '?' ,
- .BR '*' ,
- or
- .BR '[' ,
- an
- <asterisk>
- (\c
- .BR '*' )
- shall be implicitly assumed at the end. If any directories are
- matched, these expansions shall have a
- .BR '/'
- character appended. After the expansion, the line shall be redrawn,
- the cursor repositioned at the current cursor position, and
- .IR sh
- shall be placed in command mode.
- .RE
- .IP "\fB\e\fR" 10
- Perform pathname expansion (see
- .IR "Section 2.6.6" ", " "Pathname Expansion")
- on the current bigword, up to the largest set of characters that can be
- matched uniquely. If the bigword contains none of the characters
- .BR '?' ,
- .BR '*' ,
- or
- .BR '[' ,
- an
- <asterisk>
- (\c
- .BR '*' )
- shall be implicitly 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
- .BR '/'
- 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,
- .IR sh
- shall be placed in insert mode.
- .IP "\fB*\fR" 10
- 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
- .IR 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
- .IR sh
- shall be placed in insert mode. If the current bigword contains none
- of the characters
- .BR '?' ,
- .BR '*' ,
- or
- .BR '[' ,
- before the operation, an
- <asterisk>
- (\c
- .BR '*' )
- shall be implicitly assumed at the end.
- .IP "\fB@\fIletter\fR" 10
- Insert the value of the alias named
- .IR _letter .
- The symbol
- .IR letter
- represents a single alphabetic character from the portable character
- set; implementations may support additional characters as an
- extension. If the alias
- .IR _letter
- contains other editing commands, these commands shall be performed as
- part of the insertion. If no alias
- .IR _letter
- is enabled, this command shall have no effect.
- .IP "\fB[\fIcount\fB]~\fR" 10
- Convert, if the current character is a lowercase letter, to the
- equivalent uppercase letter and
- .IR "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
- .BR '\(ti'
- command is preceded by a
- .IR 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
- .IR 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.
- .IP "\fB[\fIcount\fB].\fR" 10
- Repeat the most recent non-motion command, even if it was executed on
- an earlier command line. If the previous command was preceded by a
- .IR count ,
- and no count is given on the
- .BR '.'
- command, the count from the previous command shall be included as part
- of the repeated command. If the
- .BR '.'
- command is preceded by a
- .IR count ,
- this shall override any
- .IR count
- argument to the previous command. The
- .IR count
- specified in the
- .BR '.'
- command shall become the count for subsequent
- .BR '.'
- commands issued without a count.
- .IP "\fB[\fInumber\fB]v\fR" 10
- Invoke the
- .IR vi
- editor to edit the current command line in a temporary file. When the
- editor exits, the commands in the temporary file shall be executed and
- placed in the command history. If a
- .IR number
- is included, it specifies the command number in the command history to
- be edited, rather than the current command line.
- .IP "\fB[\fIcount\fB]l\fR\0\0\0(ell)" 10
- .sp -0.5v
- .IP "\fB[\fIcount\fB]\fR<space>" 10
- .br
- 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
- .IR 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.
- .IP "\fB[\fIcount\fB]h\fR" 10
- Move the current cursor position to the
- .IR count th
- (default 1) previous 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 considered an error;
- the cursor shall move to the first character on the line.
- .IP "\fB[\fIcount\fB]w\fR" 10
- 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
- .IR 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 character on
- the line.
- .IP "\fB[\fIcount\fB]W\fR" 10
- Move to the start 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
- .IR 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.
- .IP "\fB[\fIcount\fB]e\fR" 10
- 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
- .IR 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 character on
- the line.
- .IP "\fB[\fIcount\fB]E\fR" 10
- Move to the end of the current bigword. If at the end of a bigword,
- 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
- .IR 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.
- .IP "\fB[\fIcount\fB]b\fR" 10
- 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
- .IR count
- is larger than the number of words preceding the cursor, this shall not
- be considered an error; the cursor shall return to the first character
- on the line.
- .IP "\fB[\fIcount\fB]B\fR" 10
- Move to the beginning of the current bigword. If at the beginning of a
- bigword, move to the beginning of the previous bigword. 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
- .IR 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.
- .IP "\fB^\fR" 10
- Move the current cursor position to the first character on the input
- line that is not a
- <blank>.
- .IP "\fB$\fR" 10
- Move to the last character position on the current command line.
- .IP "\fB0\fR" 10
- (Zero.) Move to the first character position on the current command
- line.
- .IP "\fB[\fIcount\fB]\||\fR" 10
- Move to the
- .IR count th
- 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.
- .IP "\fB[\fIcount\fB]f\fIc\fR" 10
- Move to the first occurrence of the character
- .BR '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
- .BR 'c'
- does not occur in the line after the current cursor position, the
- terminal shall be alerted and the cursor shall not be moved.
- .IP "\fB[\fIcount\fB]F\fIc\fR" 10
- Move to the first occurrence of the character
- .BR '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
- .BR 'c'
- does not occur in the line before the current cursor position, the
- terminal shall be alerted and the cursor shall not be moved.
- .IP "\fB[\fIcount\fB]t\fIc\fR" 10
- Move to the character before the first occurrence of the character
- .BR '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
- .BR 'c'
- does not occur in the line after the current cursor position, the
- terminal shall be alerted and the cursor shall not be moved.
- .IP "\fB[\fIcount\fB]T\fIc\fR" 10
- Move to the character after the first occurrence of the character
- .BR '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
- .BR 'c'
- does not occur in the line before the current cursor position, the
- terminal shall be alerted and the cursor shall not be moved.
- .IP "\fB[\fIcount\fB];\fR" 10
- Repeat the most recent
- .BR f ,
- .BR F ,
- .BR t ,
- or
- .BR T
- command. Any number argument on that previous command shall be
- ignored. Errors are those described for the repeated command.
- .IP "\fB[\fIcount\fB],\fR" 10
- Repeat the most recent
- .BR f ,
- .BR F ,
- .BR t ,
- or
- .BR T
- command. Any number argument on that previous command shall be
- ignored. However, reverse the direction of that command.
- .IP "\fBa\fR" 10
- Enter insert mode after the current cursor position. Characters that
- are entered shall be inserted before the next character.
- .IP "\fBA\fR" 10
- Enter insert mode after the end of the current command line.
- .IP "\fBi\fR" 10
- Enter insert mode at the current cursor position. Characters that are
- entered shall be inserted before the current character.
- .IP "\fBI\fR" 10
- Enter insert mode at the beginning of the current command line.
- .IP "\fBR\fR" 10
- Enter insert mode, replacing characters from the command line beginning
- at the current cursor position.
- .IP "\fB[\fIcount\fB]c\fImotion\fR" 10
- .br
- 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 following
- any deleted characters. If
- .IR count
- is specified, it shall be applied to the motion command. A
- .IR count
- shall be ignored for the following motion commands:
- .RS 10
- .sp
- .RS 4
- .nf
- 0 \(ha $ c
- .fi
- .P
- .RE
- .P
- If the motion command is the character
- .BR 'c' ,
- the current command line shall be cleared and insert mode shall be
- entered. If the motion command 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 position toward the end of the command
- line, the character under the current cursor position shall be deleted.
- If the
- .IR 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.
- .RE
- .IP "\fBC\fR" 10
- Delete from the current character to the end of the line and enter
- insert mode at the new end-of-line.
- .IP "\fBS\fR" 10
- Clear the entire edit line and enter insert mode.
- .IP "\fB[\fIcount\fB]r\fIc\fR" 10
- Replace the current character with the character
- .BR 'c' .
- With a number
- .IR count ,
- replace the current and the following
- .IR count \-1
- characters. After this command, the current cursor position shall be
- on the last character that was changed. If the
- .IR count
- is larger than the number of characters after the cursor, this shall
- not be considered an error; all of the remaining characters shall be
- changed.
- .IP "\fB[\fIcount\fB]_\fR" 10
- 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
- .IR count ,
- append the
- .IR count th
- bigword in the previous line.
- .IP "\fB[\fIcount\fB]x\fR" 10
- 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
- .IR 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.
- .IP "\fB[\fIcount\fB]X\fR" 10
- 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 cursor was positioned on the
- first character of the line, the terminal shall be alerted, and the
- .BR X
- command shall have no effect. If the line contained a single
- character, the
- .BR X
- command shall have no effect. If the line contained no characters, the
- terminal shall be alerted and the cursor shall not be moved. If the
- .IR 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.
- .IP "\fB[\fIcount\fB]d\fImotion\fR" 10
- .br
- Delete the characters between the current cursor position and the
- character position that would result from the motion command. A number
- .IR count
- repeats the motion command
- .IR count
- times. If the motion command would move toward the beginning of the
- command line, the character under the current cursor position shall not
- be deleted. If the motion command is
- .BR d ,
- the entire current command line shall be cleared. If the
- .IR 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 buffer.
- .IP "\fBD\fR" 10
- Delete all characters from the current cursor position to the end of
- the line. The deleted characters shall be placed in the save buffer.
- .IP "\fB[\fIcount\fB]y\fImotion\fR" 10
- .br
- 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
- .IR 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
- .BR y ,
- the entire current command line shall be yanked into the save buffer.
- The current cursor position shall be unchanged. If the
- .IR 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.
- .IP "\fBY\fR" 10
- 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.
- .IP "\fB[\fIcount\fB]p\fR" 10
- 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
- .IR count
- shall indicate how many copies of the save buffer shall be put.
- .IP "\fB[\fIcount\fB]P\fR" 10
- 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
- .IR count
- shall indicate how many copies of the save buffer shall be put.
- .IP "\fBu\fR" 10
- Undo the last command that changed the edit line. This operation shall
- not undo the copy of any command line to the edit line.
- .IP "\fBU\fR" 10
- Undo all changes made to the edit line. This operation shall not undo
- the copy of any command line to the edit line.
- .IP "\fB[\fIcount\fB]k\fR" 10
- .sp -0.5v
- .IP "\fB[\fIcount\fB]\-\fR" 10
- Set the current command line to be the
- .IR count th
- previous command line in the shell command history. If
- .IR count
- is not specified, it shall default to 1. The cursor shall be positioned
- on the first character of the new command. If a
- .BR k
- or
- .BR \-
- command would retreat past the maximum number of commands in effect for
- this shell (affected by the
- .IR HISTSIZE
- environment variable), the terminal shall be alerted, and the command
- shall have no effect.
- .IP "\fB[\fIcount\fB]j\fR" 10
- .sp -0.5v
- .IP "\fB[\fIcount\fB]+\fR" 10
- Set the current command line to be the
- .IR count th
- next command line in the shell command history. If
- .IR count
- is not specified, it shall default to 1. The cursor shall be positioned
- on the first character of the new command. If a
- .BR j
- or
- .BR +
- command advances past the edit line, the current command line shall be
- restored to the edit line and the terminal shall be alerted.
- .IP "\fB[\fInumber\fB]G\fR" 10
- Set the current command line to be the oldest command line stored in
- the shell command history. With a number
- .IR number ,
- set the current command line to be the command line
- .IR number
- in the history. If command line
- .IR number
- does not exist, the terminal shall be alerted and the command line
- shall not be changed.
- .IP "\fB/\fIpattern\fR<newline>" 10
- .br
- 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
- .IR "Section 2.13" ", " "Pattern Matching Notation",
- except that the
- .BR '\(ha'
- character shall have special meaning when it appears as the first
- character of
- .IR pattern .
- In this case, the
- .BR '\(ha'
- is discarded and the characters after the
- .BR '\(ha'
- 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 shall be 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.
- .RS 10
- .P
- If
- .IR pattern
- is empty, the last non-empty pattern provided to
- .BR /
- or
- .BR ?
- shall be used. If there is no previous non-empty pattern, the terminal
- shall be alerted and the current command line shall remain unchanged.
- .RE
- .IP "\fB?\fIpattern\fR<newline>" 10
- .br
- Move forwards through the command history, searching for the specified
- pattern, beginning with the next command line. Patterns use the pattern
- matching notation described in
- .IR "Section 2.13" ", " "Pattern Matching Notation",
- except that the
- .BR '\(ha'
- character shall have special meaning when it appears as the first
- character of
- .IR pattern .
- In this case, the
- .BR '\(ha'
- is discarded and the characters after the
- .BR '\(ha'
- 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 shall be 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.
- .RS 10
- .P
- If
- .IR pattern
- is empty, the last non-empty pattern provided to
- .BR /
- or
- .BR ?
- shall be used. If there is no previous non-empty pattern, the terminal
- shall be alerted and the current command line shall remain unchanged.
- .RE
- .IP "\fBn\fR" 10
- Repeat the most recent
- .BR /
- or
- .BR ?
- command. If there is no previous
- .BR /
- or
- .BR ? ,
- the terminal shall be alerted and the current command line shall remain
- unchanged.
- .IP "\fBN\fR" 10
- Repeat the most recent
- .BR /
- or
- .BR ?
- command, reversing the direction of the search. If there is no previous
- .BR /
- or
- .BR ? ,
- the terminal shall be alerted and the current command line shall remain
- unchanged.
- .SH "EXIT STATUS"
- The following exit values shall be returned:
- .IP "\0\0\0\00" 8
- The script to be executed consisted solely of zero or more blank lines
- or comments, or both.
- .IP "1\(hy125" 8
- A non-interactive shell detected an error other than
- .IR command_file
- not found or executable, including but not limited to syntax,
- redirection, or variable assignment errors.
- .IP "\0\0126" 8
- A specified
- .IR command_file
- could not be executed due to an
- .BR [ENOEXEC]
- error (see
- .IR "Section 2.9.1.1" ", " "Command Search and Execution",
- item 2).
- .IP "\0\0127" 8
- A specified
- .IR command_file
- could not be found by a non-interactive shell.
- .P
- Otherwise, the shell shall return the exit status of the last command
- it invoked or attempted to invoke (see also the
- .IR exit
- utility in
- .IR "Section 2.14" ", " "Special Built-In Utilities").
- .SH "CONSEQUENCES OF ERRORS"
- See
- .IR "Section 2.8.1" ", " "Consequences of Shell Errors".
- .LP
- .IR "The following sections are informative."
- .SH "APPLICATION USAGE"
- Standard input and standard error are the files that
- determine whether a shell is interactive when
- .BR \-i
- is not specified. For example:
- .sp
- .RS 4
- .nf
- sh > file
- .fi
- .P
- .RE
- .P
- and:
- .sp
- .RS 4
- .nf
- sh 2> file
- .fi
- .P
- .RE
- .P
- create interactive and non-interactive shells, respectively. Although
- both accept terminal input, the results of error conditions are
- different, as described in
- .IR "Section 2.8.1" ", " "Consequences of Shell Errors";
- in the second example a redirection error encountered by a special
- built-in utility aborts the shell.
- .P
- A conforming application must protect its first operand, if it starts
- with a
- <plus-sign>,
- by preceding it with the
- .BR \(dq--\(dq
- argument that denotes the end of the options.
- .P
- Applications should note that the standard
- .IR PATH
- to the shell cannot be assumed to be either
- .BR /bin/sh
- or
- .BR /usr/bin/sh ,
- and should be determined by interrogation of the
- .IR PATH
- returned by
- .IR getconf
- .IR PATH ,
- ensuring that the returned pathname is an absolute pathname and not a
- shell built-in.
- .P
- For example, to determine the location of the standard
- .IR sh
- utility:
- .sp
- .RS 4
- .nf
- command -v sh
- .fi
- .P
- .RE
- .P
- On some implementations this might return:
- .sp
- .RS 4
- .nf
- /usr/xpg4/bin/sh
- .fi
- .P
- .RE
- .P
- Furthermore, on systems that support executable scripts (the
- .BR \(dq#!\(dq
- construct), it is recommended that applications using executable
- scripts install them using
- .IR getconf
- .IR PATH
- to determine the shell pathname and update the
- .BR \(dq#!\(dq
- script appropriately as it is being installed (for example, with
- .IR sed ).
- For example:
- .sp
- .RS 4
- .nf
- #
- # Installation time script to install correct POSIX shell pathname
- #
- # Get list of paths to check
- #
- Sifs=$IFS
- Sifs_set=${IFS+y}
- IFS=:
- set -- $(getconf PATH)
- if [ "$Sifs_set" = y ]
- then
- IFS=$Sifs
- else
- unset IFS
- fi
- #
- # Check each path for \(aqsh\(aq
- #
- for i
- do
- if [ -x "${i}"/sh ]
- then
- Pshell=${i}/sh
- fi
- done
- #
- # This is the list of scripts to update. They should be of the
- # form \(aq${name}.source\(aq and will be transformed to \(aq${name}\(aq.
- # Each script should begin:
- #
- # #!INSTALLSHELLPATH
- #
- scripts="a b c"
- #
- # Transform each script
- #
- for i in ${scripts}
- do
- sed -e "s|INSTALLSHELLPATH|${Pshell}|" < ${i}.source > ${i}
- done
- .fi
- .P
- .RE
- .SH EXAMPLES
- .IP " 1." 4
- Execute a shell command from a string:
- .RS 4
- .sp
- .RS 4
- .nf
- sh -c "cat myfile"
- .fi
- .P
- .RE
- .RE
- .IP " 2." 4
- Execute a shell script from a file in the current directory:
- .RS 4
- .sp
- .RS 4
- .nf
- sh my_shell_cmds
- .fi
- .P
- .RE
- .RE
- .SH RATIONALE
- The
- .IR sh
- utility and the
- .IR set
- special built-in utility share a common set of options.
- .P
- The name
- .IR IFS
- was originally an abbreviation of ``Input Field Separators''; however,
- this name is misleading as the
- .IR IFS
- characters are actually used as field terminators. One justification
- for ignoring the contents of
- .IR IFS
- upon entry to the script, beyond security considerations, is to
- assist possible future shell compilers. Allowing
- .IR IFS
- to be imported from the environment prevents many optimizations that
- might otherwise be performed via dataflow analysis of the script
- itself.
- .P
- The text in the STDIN section about non-blocking reads concerns an
- instance of
- .IR sh
- that has been invoked, probably by a C-language program, with standard
- input that has been opened using the O_NONBLOCK flag; see
- \fIopen\fR()
- in the System Interfaces volume of POSIX.1\(hy2017. 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.
- .P
- The options associated with a
- .IR "restricted shell"
- (command name
- .IR rsh
- and the
- .BR \-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.
- .P
- On systems that support set-user-ID scripts,
- a historical trapdoor has been to link a script to the name
- .BR \-i .
- When it is called by a sequence such as:
- .sp
- .RS 4
- .nf
- sh -
- .fi
- .P
- .RE
- .P
- or by:
- .sp
- .RS 4
- .nf
- #!\ usr/bin/sh\ -
- .fi
- .P
- .RE
- .P
- the historical systems have assumed that no option letters follow.
- Thus, this volume of POSIX.1\(hy2017 allows the single
- <hyphen-minus>
- to mark the end of the options, in addition to the use of the regular
- .BR \(dq--\(dq
- argument, because it was considered that the older practice was so
- pervasive. 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 POSIX.1\(hy2017.
- .TP 10
- .BR Note:
- There are other problems with set-user-ID scripts that the two
- approaches described here do not resolve.
- .P
- .P
- The initialization process for the history file can be dependent on the
- system start-up files, in that they may contain commands that
- effectively preempt the user's settings of
- .IR HISTFILE
- and
- .IR HISTSIZE .
- For example, function definition commands are recorded in the history
- file, unless the
- .IR set
- .BR \-o
- .IR nolog
- option is set. If the system administrator includes function
- definitions in some system start-up file called before the
- .IR 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
- .IR ENV
- file has been processed. Therefore, it is implementation-defined
- whether changes made to
- .IR HISTFILE
- after the history file has been initialized are effective.
- .P
- The default messages for the various
- .IR MAIL -related
- messages are unspecified because they vary across implementations.
- Typical messages are:
- .sp
- .RS 4
- .nf
- "you have mail\en"
- .fi
- .P
- .RE
- .P
- or:
- .sp
- .RS 4
- .nf
- "you have new mail\en"
- .fi
- .P
- .RE
- .P
- It is important that the descriptions of command line editing refer to
- the same shell as that in POSIX.1\(hy2008 so that interactive users can also be
- application programmers without having to deal with programmatic
- differences in their two environments. It is also essential that the
- utility name
- .IR sh
- be specified because this explicit utility name is too firmly rooted in
- historical practice of application programs for it to change.
- .P
- Consideration was given to mandating a diagnostic message when
- attempting to set
- .IR vi -mode
- on terminals that do not support command line editing. However, it is
- not historical practice for the shell to be cognizant of all terminal
- types and thus be able to detect inappropriate terminals in all cases.
- Implementations are encouraged to supply diagnostics in this case
- whenever possible, rather than leaving the user in a state where
- editing commands work incorrectly.
- .P
- In early proposals, the KornShell-derived
- .IR emacs
- mode of command line editing was included, even though the
- .IR emacs
- editor itself was not. The community of
- .IR emacs
- proponents was adamant that the full
- .IR 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
- .IR emacs
- program also expressed his desire to omit the program. Furthermore,
- there were a number of historical systems that did not include
- .IR emacs ,
- or included it without supporting it, but there were very few that did
- not include and support
- .IR vi .
- The shell
- .IR 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
- .IR emacs
- requested that the POSIX
- .IR 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 specification 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.
- .P
- Early proposals had the following list entry in
- .IR "vi Line Editing Insert Mode":
- .IP "\fR\e\fR" 6
- If followed by the
- .IR erase
- or
- .IR kill
- character, that character shall be inserted into the input line.
- Otherwise, the
- <backslash>
- itself shall be inserted into the input line.
- .P
- However, this is not actually a feature of
- .IR sh
- command line editing insert mode, but one of some historical terminal
- line drivers. Some conforming implementations continue to do this when
- the
- .IR stty
- .BR iexten
- flag is set.
- .P
- In interactive shells, SIGTERM is ignored so that
- .IR "kill 0"
- does not kill the shell, and SIGINT is caught so that
- .IR wait
- is interruptible. If the shell does not ignore SIGTTIN, SIGTTOU, and
- SIGTSTP signals when it is interactive and the
- .BR \-m
- option is not in effect, these signals suspend the shell if it is not
- a session leader. If it is a session leader, the signals are discarded
- if they would stop the process, as required by the System Interfaces volume of POSIX.1\(hy2017,
- .IR "Section 2.4.3" ", " "Signal Actions"
- for orphaned process groups.
- .SH "FUTURE DIRECTIONS"
- None.
- .SH "SEE ALSO"
- .IR "Section 2.9.1.1" ", " "Command Search and Execution",
- .IR "Chapter 2" ", " "Shell Command Language",
- .IR "\fIcd\fR\^",
- .IR "\fIecho\fR\^",
- .IR "\fIexit\fR\^",
- .IR "\fIfc\fR\^",
- .IR "\fIpwd\fR\^",
- .IR "invalid",
- .IR "\fIset\fR\^",
- .IR "\fIstty\fR\^",
- .IR "\fItest\fR\^",
- .IR "\fItrap\fR\^",
- .IR "\fIumask\fR\^",
- .IR "\fIvi\fR\^"
- .P
- The Base Definitions volume of POSIX.1\(hy2017,
- .IR "Chapter 8" ", " "Environment Variables",
- .IR "Section 12.2" ", " "Utility Syntax Guidelines"
- .P
- The System Interfaces volume of POSIX.1\(hy2017,
- .IR "\fIdup\fR\^(\|)",
- .IR "\fIexec\fR\^",
- .IR "\fIexit\fR\^(\|)",
- .IR "\fIfork\fR\^(\|)",
- .IR "\fIopen\fR\^(\|)",
- .IR "\fIpipe\fR\^(\|)",
- .IR "\fIsignal\fR\^(\|)",
- .IR "\fIsystem\fR\^(\|)",
- .IR "\fIulimit\fR\^(\|)",
- .IR "\fIumask\fR\^(\|)",
- .IR "\fIwait\fR\^(\|)"
- .\"
- .SH COPYRIGHT
- Portions of this text are reprinted and reproduced in electronic form
- from IEEE Std 1003.1-2017, Standard for Information Technology
- -- Portable Operating System Interface (POSIX), The Open Group Base
- Specifications Issue 7, 2018 Edition,
- Copyright (C) 2018 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 .
- .PP
- Any typographical or formatting errors that appear
- in this page are most likely
- to have been introduced during the conversion of the source files to
- man page format. To report such errors, see
- https://www.kernel.org/doc/man-pages/reporting_bugs.html .