[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The following may appear anywhere in a simple command or may precede or follow a complex command. Expansion occurs before word or digit is used except as noted below. If the result of substitution on word produces more than one filename, redirection occurs for each separate filename in turn.
If any character of word is quoted with single or double quotes or a `\', no interpretation is placed upon the characters of the document. Otherwise, parameter and command substitution occurs, `\' followed by a newline is removed, and `\' must be used to quote the characters `\', `$', ``' and the first character of word.
If <<- is used, then all leading tabs are stripped from word and from the document.
If one of the above is preceded by a digit, then the file descriptor referred to is that specified by the digit instead of the default 0 or 1. The order in which redirections are specified is significant. The shell evaluates each redirection in terms of the (file descriptor, file) association at the time of evaluation. For example:
... 1>fname 2>&1
first associates file descriptor 1 with file fname. It then associates file descriptor 2 with the file associated with file descriptor 1 (that is, fname). If the order of redirections were reversed, file descriptor 2 would be associated with the terminal (assuming file descriptor 1 had been) and then file descriptor 1 would be associated with file fname.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
date >foo >bar |
writes the date to two files, named `foo' and `bar'. Note that a pipe is an implicit redirection; thus
date >foo | cat |
writes the date to the file `foo', and also pipes it to cat.
If the MULTIOS option is set, the word after a redirection operator is also subjected to filename generation (globbing). Thus
: > * |
will truncate all files in the current directory, assuming there's at least one. (Without the MULTIOS option, it would create an empty file called `*'.) Similarly, you can do
echo exit 0 >> *.sh |
If the user tries to open a file descriptor for reading more than once, the shell opens the file descriptor as a pipe to a process that copies all the specified inputs to its output in the order specified, similar to cat, provided the MULTIOS option is set. Thus
sort <foo <fubar |
or even
sort <f{oo,ubar} |
is equivalent to `cat foo fubar | sort'.
Note that a pipe is an implicit redirection; thus
cat bar | sort <foo |
is equivalent to `cat bar foo | sort' (note the order of the inputs).
If the MULTIOS option is unset, each redirection replaces the previous redirection for that file descriptor. However, all files redirected to are actually opened, so
echo foo > bar > baz |
when MULTIOS is unset will truncate bar, and write `foo' into baz.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
If the parameter NULLCMD is not set or the option CSH_NULLCMD is set, an error is caused. This is the csh behavior and CSH_NULLCMD is set by default when emulating csh.
If the option SH_NULLCMD is set, the builtin `:' is inserted as a command with the given redirections. This is the default when emulating sh or ksh.
Otherwise, if the parameter NULLCMD is set, its value will be used as a command with the given redirections. If both NULLCMD and READNULLCMD are set, then the value of the latter will be used instead of that of the former when the redirection is an input. The default for NULLCMD is `cat' and for READNULLCMD is `more'. Thus
< file |
shows the contents of file on standard output, with paging if that is a terminal. NULLCMD and READNULLCMD may refer to shell functions.
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |