Input and output redirection in the Korn shell or POSIX shell
Before the Korn shell executes a command, it scans the command line for redirection characters. These special notations direct the shell to redirect input and output.
Redirection characters can appear anywhere in a simple command or can precede or follow a command. They are not passed on to the invoked command.
The shell performs command and parameter substitution before using the Word or Digit parameter except as noted. File name substitution occurs only if the pattern matches a single file and blank interpretation is not performed.
Item | Description |
---|---|
<Word | Uses the file specified by the Word parameter as standard input (file descriptor 0). |
>Word | Uses the file specified by the Word parameter
as standard output (file descriptor 1). If the file does not exist, the shell
creates it. If the file exists and the noclobber option is on, an error
results; otherwise, the file is truncated to zero length. Note: When multiple
shells have the noclobber option set and they redirect output to the
same file, there could be a race condition, which might result in more than
one of these shell processes writing to the file. The shell does not detect
or prevent such race conditions.
|
>|Word | Same as the >Word command, except that this redirection statement overrides the noclobber option. |
> >Word | Uses the file specified by the Word parameter as standard output. If the file currently exists, the shell appends the output to it (by first seeking the end-of-file character). If the file does not exist, the shell creates it. |
<>Word | Opens the file specified by the Word parameter for reading and writing as standard input. |
<<[-]Word | Reads each line of shell input until it locates a line containing only the value of the Word parameter or an end-of-file character. The shell does not perform parameter substitution, command substitution, or file name substitution on the file specified. The resulting document, called a here document, becomes the standard input. If any character of the Word parameter is quoted, no interpretation is placed upon the characters of the document. |
[n]<<word
here document
delimiter
If any character in word is quoted, the delimiter is formed by removing the quote on word. The here document lines will not be expanded. Otherwise, the delimiter is the word itself. If no characters in word are quoted, all lines of the here document will be expanded for parameter expansion, command substitution, and arithmetic expansion.
The shell performs parameter substitution for the redirected data. To prevent
the shell from interpreting the \
, $
, and
single quotation mark ('
) characters and the first character
of the Word parameter, precede the characters with a \
character.
If a hyphen (-
) is appended to <<
,
the shell strips all leading tabs from the Word parameter
and the document.
Item | Description |
---|---|
<&Digit | Duplicates standard input from the file descriptor specified by the Digit parameter |
>& Digit | Duplicates standard output in the file descriptor specified by the Digit parameter |
<&- | Closes standard input |
>&- | Closes standard output |
<&p | Moves input from the co-process to standard input |
>&p | Moves output to the co-process to standard output |
... 2>&1
... 1>File 2>&1
the file descriptor 1 is associated with the file specified by the File parameter. The shell associates file descriptor 2 with the file associated with file descriptor 1 (File). If the order of redirections were reversed, file descriptor 2 would be associated with the terminal (assuming file descriptor 1 had previously been) and file descriptor 1 would be associated with the file specified by the File parameter.
If a command is followed by an ampersand (&
) and job
control is not active, the default standard input for the command is the empty
file /dev/null. Otherwise, the environment for the execution
of a command contains the file descriptors of the invoking shell as modified
by input and output specifications.