The Single UNIX ® Specification, Version 2
Copyright © 1997 The Open Group

 NAME

sh - shell, the standard command language interpreter

 SYNOPSIS



sh [-abCefimnuvx][-o option][+abCefmnuvx][+o option]
[command_file [argument...]]

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

sh -s[-abCefimnuvx][-o option][+abCefmnuvx][+o option][argument]

 DESCRIPTION

The sh utility is a command language interpreter that executes commands read from a command-line string, the standard input or a specified file. The commands to be executed must be expressed in the language described in Shell Command Language .

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

Shell input and output redirections will have an implementation-dependent offset maximum that will be established in the open file description.

 OPTIONS

The sh utility supports the XBD specification, Utility Syntax Guidelines  .

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 are also accepted with a leading plus sign (+) instead of a leading hyphen (meaning the reverse case of the option as described in this specification).

The following additional options are 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 will be read from the standard input.
-i
Specify that the shell is interactive ; see below. An implementation 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 is 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 are supported:
-
A single hyphen is 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 undefined.
argument
The positional parameters ($1, $2 and so on) will be set to arguments, if any.
command_file
The pathname of a file containing commands. If the pathname contains one or more slash characters, the implementation will attempt to read that file; the file need not be executable. If the pathname does not contain a slash character:
  • The implementation will 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 ) is set to the value of command_file. If sh is called using a synopsis form that omits command_file, special parameter 0 is 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 commands in command_string. If command_name is not specified, special parameter 0 is 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_string
A string that is interpreted by the shell as one or more commands, as if the string were the argument to the XSH specification system() function. If the command_string operand is an empty string, sh will exit with a zero exit status.

 STDIN

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

See the INPUT FILES section.

When the shell is using standard input and it invokes a command that also uses standard input, the shell ensures that the standard input file pointer points directly after the command it has read when the command begins execution. It will 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.

If the standard input to sh is a FIFO or terminal device and is set to non-blocking reads, then sh will enable blocking reads on standard input. This will remain in effect when the command completes. (This 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 XSH specification. 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.)

 INPUT FILES

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

 ENVIRONMENT VARIABLES

The following environment variables affect the execution of sh:
FCEDIT
This variable, when expanded by the shell, determines the default value for the -e editor option's editor option-argument. If FCEDIT is null or unset, ed will be used as the editor.
HISTFILE
Determine a pathname naming a command history file. If the HISTFILE variable is not set, the shell may attempt to access or create a file .sh_history in the user's home directory. If the shell cannot obtain both read and write access to, or create, the history file, it will use an unspecified mechanism that allows the history to operate properly. (References to history "file" in this section are understood to mean this unspecified mechanism in such cases.) An implementation may choose to access this variable only when initialising the history file; this initialisation will 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-dependent system startup files. (The initialisation process for the history file can be dependent on the system startup files, in that they may contain commands that will effectively preempt the user's settings of HISTFILE and HISTSIZE . For example, 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 startup file called before the ENV file, the history file will be initialised before the user gets a chance to influence its characteristics.) In some historical shells, the history file is initialised just after the ENV file has been processed. Therefore, it is implementation-dependent whether changes made to HISTFILE after the history file has been initialised are effective. Implementations may choose to disable the history list mechanism for users with appropriate privileges who do not set HISTFILE ; the specific circumstances under which this will occur are implementation-dependent. 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 will be deleted oldest first. It is unspecified when history file entries are physically removed from the history file.
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 will be used. The maximum number of commands in the history list is unspecified, but will be at least 128. An implementation may choose to access this variable only when initialising the history file, as described under HISTFILE . Therefore, it is unspecified whether changes made to HISTSIZE after the history file has been initialised are effective.
HOME
Determine the pathname of the user's home directory. The contents of HOME are used in Tilde Expansion as described in Tilde Expansion .
IFS
Input field separators : a string treated as a list of characters that is used for field splitting and to split lines into words with the read command. See Field Splitting . If IFS is not set, the shell behaves as if the value of IFS were the space, tab and newline characters. 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 internationalisation variables that are unset or null. If LANG is unset or null, the corresponding value from the implementation-dependent default locale will be used. If any of the internationalisation variables contains an invalid setting, the utility will behave as if none of the variables had been defined.
LC_ALL
If set to a non-empty string value, override the values of all the other internationalisation variables.
LC_COLLATE
Determine the behaviour 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- versus multi-byte characters in arguments and input files), which characters are defined as letters (character class alpha), and the behaviour 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 will inform the user if the file named by the variable is created or if its modification time has changed. Informing the user is accomplished by writing a string of unspecified format to standard error prior to the writing of the next primary prompt string after the completion of an interval defined by the MAILCHECK variable. The user will be informed only if MAIL is set and MAILPATH is not set.
MAILCHECK
Establish a decimal integer value that specifies how often (in seconds) the shell will check for the arrival of mail in the files specified by the MAILPATH or MAIL variables. The default value is 600 seconds. If set to zero, the shell will check before issuing each primary prompt.
MAILPATH
Provide a list of pathnames and optional messages separated by colons. If this variable is set, the shell will 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 will 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 will be treated as a literal "%" in the pathname. The default message is unspecified. The MAILPATH environment variable takes precedence over the MAIL variable.
NLSPATH
Determine the location of message catalogues for the processing of LC_MESSAGES .
PATH
Establish a string formatted as described in the XBD specification, Environment Variables  , used to effect command interpretation. See Command Search and Execution .

 ASYNCHRONOUS EVENTS

Default.

 STDOUT

See the STDERR section.

 STDERR

Except as otherwise stated (by the descriptions of any invoked utilities or in interactive mode), standard error is used only for diagnostic messages.

 OUTPUT FILES

None.

 EXTENDED DESCRIPTION

See Shell Command Language . The following additional capabilities are supported.
 Command History List
When the sh utility is being used interactively, it maintains 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 command and the command history (see fc) can be edited using vi-mode command 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 v enables vi-mode editing and places sh into vi insert mode (see Command Line Editing (vi-mode) ). This command also disables any other editing mode that the implementation may provide. The command set +o v 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 v when using the shell on this terminal.

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)
With vi-mode enabled, sh can be switched between insert mode and command mode.

When in insert mode, an entered character will 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 will be in insert mode.

Typing an escape character wll switch sh into command mode (see vi Line Editing Command Mode ). In command mode, an entered character will 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 recognised as part of an editing command will terminate any specific editing command and will alert the terminal. Typing the interrupt character in command mode will 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 reentered into the history).

In the following sections, the phrase "move the cursor to the beginning of the word" means "move the cursor to the first character of the current word" and the phrase "move the cursor to the end of the word" means "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.

 vi Line Editing Insert Mode
While in insert mode, any character typed will be inserted in the current command line, unless it is from the following set.
newline
Execute the current command line being edited.
erase
Delete the character previous to the current cursor position and move the current cursor position back one character. In insert mode, characters will 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 Editing (vi-mode) .
kill
Clear all the characters from the input line.
<control>-V
Insert the next character input, even if the character is otherwise 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 classification of the current locale.
\
On some systems, when a backslash is followed by an erase or kill character, that character will be inserted into the input line. This is not actually a feature of sh command line editing insert mode, but one of terminal line drivers when the stty iexten flag is set. Otherwise, the backslash itself will be inserted into the input line.
end-of-file
Interpreted as the end of input in sh. This interpretation will 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 will 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

Any command that modifies the current line will cause a copy of the current line to be made at the end of the command history, the current line will become that copy, and the edit will be performed on that copy.

Any command that is preceded by count will take a count (the numeric value of any preceding decimal digits). Unless otherwise noted, this count will 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 will alert the terminal, but neither the cursor position, nor the command line, will 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 are recognised in command mode:

newline
Execute the current command line being edited.
<control>-L
Redraw the current command line. Position the cursor at the same location on the new command line.
#
Insert the character # at the beginning of the current command line and treat the current command line as a comment. This line will 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. These expansions will be displayed on subsequent terminal lines. If the bigword contains none of the characters "?", "*" or "[", an asterisk (*) will be implicitly assumed at the end. If any directories are matched, these expansions will have a "/" character appended. After the expansion, the line will be redrawn, the cursor will be repositioned at the current cursor position, and sh will be placed in command mode.
\
Perform pathname expansion (see 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 "?", "*" or "[", an asterisk (*) will be implicitly assumed at the end. This maximal expansion then will replace the original bigword in the command line, and the cursor will be placed after this expansion. If the resulting bigword completely and uniquely matches a directory, a "/" character will be inserted directly after the bigword. If some other file is completely matched, a single space character will be inserted after the bigword. After this operation, sh will 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 character. If at the end of the line, the current cursor position will be moved to the first column position following the expansions and sh will be placed in insert mode. Otherwise, the current cursor position will be the last column position of the first character after the expansions and sh will be placed in insert mode. If the current bigword contains none of the characters "?", "*" or "[", before the operation, an asterisk will 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 character set; implementations may support additional characters as an extension. If the alias _letter contains other editing commands, these commands will be performed as part of the insertion. If no alias _letter is enabled, this command will have no effect.
[count]~
Convert, if the current character is a lower-case letter, to the equivalent upper-case letter and viceversa, as prescribed by the current locale. The current cursor position then will be advanced by one character. If the cursor was positioned on the last character of the line, the case conversion will occur, but the cursor will not advance. If the ~ command is preceded by a count, that number of characters will be converted, and the cursor will 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 is not considered an error; the cursor will advance to the last character on the line.
[count].
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 count, and no count is given on the "." command, the count from the previous command will be included as part of the repeated command. If the "." command is preceded by a count, this will override any count argument to the previous command. The count specified in the "." command will become the count for subsequent "." commands issued without a count.
[number]v
Invoke the vi editor to edit the current command line in a temporary file. When the editor exits, the commands in the temporary file will be executed. If a number is prefixed to the command, it specifies the command number in the command history to be edited, rather than the current command line.
[count]l
[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 will be alerted and the cursor will not be advanced. If the count is larger than the number of characters after the cursor, this is not considered an error; the cursor will advance to the last character on the line.
[count]h
Move the current cursor position to the countth (default 1) previous character position. If the cursor was positioned on the first character of the line, the terminal will be alerted and the cursor will not be moved. If the count is larger than the number of characters before the cursor, this is not considered an error; the cursor will 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 will be alerted and the cursor will not be advanced. If the count is larger than the number of words after the cursor, this is not considered an error; the cursor will advance to the last character on the line.
[count]W
Move to the start of the next bigword. If the cursor was positioned on the last character of the line, the terminal will be alerted and the cursor will not be advanced. If the count is larger than the number of bigwords after the cursor, this is not considered an error; the cursor will 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 will be alerted and the cursor will not be advanced. If the count is larger than the number of words after the cursor, this is not considered an error; the cursor will advance to the last character on the line.
[count]E
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 will be alerted and the cursor will not be advanced. If the count is larger than the number of bigwords after the cursor, this is not considered an error; the cursor will 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 will be alerted and the cursor will not be moved. If the count is larger than the number of words preceding the cursor, this is not considered an error; the cursor will return to the first character on the line.
[count]B
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 will be alerted and the cursor will not be moved. If the count is larger than the number of bigwords preceding the cursor, this is not considered an error; the cursor will 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 character.
$
Move to the last character position on the current command line.
0
(Zero.) Move to the first character position on the current command 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 is numbered 1. If the count is larger than the number of characters on the line, this is not considered an error; the cursor will 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 will be alerted and the cursor will not be advanced. If the character c does not occur in the line after the current cursor position, the terminal will be alerted and the cursor will 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 will be alerted and the cursor will not be moved. If the character c does not occur in the line before the current cursor position, the terminal will be alerted and the cursor will not be moved.
[count]tc
Move to the character before 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 will be alerted and the cursor will not be advanced. If the character c does not occur in the line after the current cursor position, the terminal will be alerted and the cursor will not be moved.
[count]Tc
Move to the character after 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 will be alerted and the cursor will not be moved. If the character c does not occur in the line before the current cursor position, the terminal will be alerted and the cursor will not be moved.
[count];
Repeat the most recent f, F, t or T command. Any number argument on that previous command will be ignored. Errors are those described for the repeated command.
[count],
Repeat the most recent f, F, t or T command. Any number argument on that previous command will be ignored. However, reverse the direction of that command.
a
Enter insert mode after the current cursor position. Characters that are entered will 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 will 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 following any deleted characters. If count is specified, it will be applied to the motion command. A count will be ignored for the following motion commands:

0    ^    $    c

If the motion command is the character c, the current command line will be cleared and insert mode will 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 will 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 will 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 is not considered an error; all of the remaining characters in the aforementioned range will be deleted and insert mode will be entered. If the motion command is invalid, the terminal will be alerted, the cursor will not be moved, and no text will 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 current command 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 will be on the last character that was changed. If the count is larger than the number of characters after the cursor, this is not considered an error; all of the remaining characters will be changed.
[count]_
Append a space character after the current character position and then append the last bigword in the previous input line after the space character. 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 will be deleted and the cursor position will be moved to the previous character (the new last character). If the count is larger than the number of characters after the cursor, this is not considered an error; all the characters from the cursor to the end of the line will 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 will not change. If the cursor was positioned on the first character of the line, the terminal will be alerted, and the X command will have no effect. If the line contained a single character, the X command will have no effect. If the line contained no characters, the terminal will be alerted and the cursor will not be moved. If the count is larger than the number of characters before the cursor, this is not considered an error; all the characters from before the cursor to the beginning of the line will be deleted.
[count]dmotion
Delete the characters between the current cursor position and the character position that would result from the motion command. A number count repeats the motion command count times. If the motion command would move toward the beginning of the command line, the character under the current cursor position will not be deleted. If the motion command is d, the entire current command line will 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 is not considered an error; all of the remaining characters in the aforementioned range will be deleted. The deleted characters will be placed in the save buffer.
D
Delete all characters from the current cursor position to the end of the line. The deleted characters will 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 a save buffer. A number count will 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 will not be included in the set of yanked characters. If the motion command is y, the entire current command line will be yanked into the save buffer. The current cursor position will 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 is not considered an error; all of the remaining characters in the aforementioned range will 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 will be unchanged.
[count]p
Put a copy of the current contents of the save buffer after the current cursor position. The current cursor position will be advanced to the last character put from the save buffer. A count indicates how many copies of the save buffer will be put.
[count]P
Put a copy of the current contents of the save buffer before the current cursor position. The current cursor position will be moved to the last character put from the save buffer. A count indicates how many copies of the save buffer will be put.
u
Undo the last command that modified the text of the current command line.
U
Undo all changes made to the current command line since first entering command mode on the line.
[count]k
[count]-
Replace the current command line with the previous command line in the shell command history. The cursor will be positioned on the first character of the new command. A count preceding the command will have the same effect as executing the command count times. If a k or "-" command retreats past the maximum number of commands in effect for this shell (affected by the HISTSIZE environment variable), the terminal will be alerted and the command will have no effect.
[count]j
[count]+
Replace the current command line with the next command line in the shell command history. The cursor will be positioned on the first character of the new command. The command history position will be remembered, and any k or "-" command, or j or + command, will decrement or increment that position and then will fetch the line at the new position. If a j or command advances past the most recent line in the history, the current command line will be restored to the contents before the first k or "-".
[number]G
Replace the current command line with the contents of the oldest command line stored in the shell command history. With a number number, replace the current command line with the contents of command number in the history.
/string<newline>
Move backward through the command history, searching for the specified string, beginning with the previous command line. If it is not found, the current command line will be unchanged. If it is found in a previous line, this command will behave equivalently to a set of k commands to reach that line. If string begins with "^", the characters after the "^" will be matched only at the beginning of a line.
?string<newline>
Move forward through the command history, searching for the specified string. If it is not found, the current command line will be unchanged. If the string is found in the current command line, the current cursor position will be moved to the beginning of that string. If it is found in the history, this command will behave equivalently to a set of j commands to reach that line. If string begins with "^", the characters after the "^" will be matched only at the beginning of a line.
n
Repeat the most recent / or ? command.
N
Repeat the most recent / or ? command, reversing the direction of the search.

 EXIT STATUS

The following exit values are 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 variable assignment error.
127
A specified command_file could not be found by a non-interactive shell.

Otherwise, the shell will 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 .

 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 different, as described in Consequences of Shell Errors ; in the second example a redirection error encountered by a special built-in utility will abort the shell.

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:

#! /bin/sh -

the historical systems have assumed that no option letters follow. Thus, this specification allows the single hyphen to mark the end of the options, in addition to the use of the regular -- argument, because the older practice is so pervasive.

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

 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
    
    

 FUTURE DIRECTIONS

The IEEE PASC 1003.2 Interpretations Committee has forwarded concerns about parts of this interface definition to the IEEE PASC Shell and Utilities Working Group which is identifying the corrections. A future revision of this specification will align with IEEE Std. 1003.2b when finalised.

 SEE ALSO

cd, echo, pwd, test, umask, the XSH specification description of dup(), exec , exit(), fork(), pipe(), signal(), system(), ulimit(), umask(), wait().

UNIX ® is a registered Trademark of The Open Group.
Copyright © 1997 The Open Group
[ Main Index | XSH | XCU | XBD | XCURSES | XNS ]