mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-11-19 21:44:11 +01:00
226 lines
7.5 KiB
Plaintext
226 lines
7.5 KiB
Plaintext
texinode(Redirection)(Command Execution)(Shell Grammar)(Top)
|
|
chapter(Redirection)
|
|
cindex(redirection)
|
|
ifzman(\
|
|
sect(Redirection)
|
|
)\
|
|
cindex(file descriptors)
|
|
cindex(descriptors, file)
|
|
If a command is followed by tt(&)
|
|
and job control is not active,
|
|
then the default standard input
|
|
for the command is the empty file tt(/dev/null).
|
|
Otherwise, the environment for the execution of a command contains the
|
|
file descriptors of the invoking shell as modified by
|
|
input/output specifications.
|
|
|
|
The following may appear anywhere in a simple command
|
|
or may precede or follow a complex command.
|
|
Expansion occurs before var(word) or var(digit)
|
|
is used except as noted below.
|
|
If the result of substitution on var(word)
|
|
produces more than one filename,
|
|
redirection occurs for each
|
|
separate filename in turn.
|
|
|
|
startitem()
|
|
item(tt(<) var(word))(
|
|
Open file var(word) for reading as standard input.
|
|
)
|
|
item(tt(<>) var(word))(
|
|
Open file var(word) for reading and writing as standard input.
|
|
If the file does not exist then it is created.
|
|
)
|
|
item(tt(>) var(word))(
|
|
Open file var(word) for writing as standard output.
|
|
If the file does not exist then it is created.
|
|
If the file exists, and the tt(CLOBBER) option is unset,
|
|
this causes an error;
|
|
otherwise, it is truncated to zero length.
|
|
)
|
|
xitem(tt(>|) var(word))
|
|
item(tt(>!) var(word))(
|
|
Same as tt(>), except that the file is truncated to zero length
|
|
if it exists, even if tt(CLOBBER) is unset.
|
|
)
|
|
item(tt(>>) var(word))(
|
|
Open file var(word) for writing in append mode as standard output.
|
|
If the file does not exist, and the tt(CLOBBER)
|
|
option is unset, this causes an error;
|
|
otherwise, the file is created.
|
|
)
|
|
xitem(tt(>>|) var(word))
|
|
item(tt(>>!) var(word))(
|
|
Same as tt(>>), except that the file is created if it does not
|
|
exist, even if tt(CLOBBER) is unset.
|
|
)
|
|
item(tt(<<)[tt(-)] var(word))(
|
|
The shell input is read up to a line that is the same as
|
|
var(word), or to an end-of-file.
|
|
No parameter expansion, command substitution or
|
|
filename generation is performed on var(word).
|
|
The resulting document, called a
|
|
em(here-document), becomes the standard input.
|
|
|
|
If any character of var(word) is quoted with
|
|
single or double quotes or a `tt(\)',
|
|
no interpretation is placed upon the characters of the document.
|
|
Otherwise, parameter and command substitution
|
|
occurs, `tt(\)' followed by a newline is removed,
|
|
and `tt(\)' must be used to quote the characters
|
|
`tt(\)', `tt($)', `tt(`)' and the first character of var(word).
|
|
|
|
If tt(<<-) is used, then all leading
|
|
tabs are stripped from var(word) and from the document.
|
|
)
|
|
item(tt(<<<) var(word))(
|
|
Perform shell expansion on var(word) and pass the result
|
|
to standard input. This is known as a em(here-string).
|
|
)
|
|
xitem(tt(<&) var(number))
|
|
item(tt(>&) var(number))(
|
|
The standard input/output is duplicated from file descriptor
|
|
var(number) (see manref(dup2)(2)).
|
|
)
|
|
xitem(tt(<& -))
|
|
item(tt(>& -))(
|
|
Close the standard input/output.
|
|
)
|
|
xitem(tt(<& p))
|
|
item(tt(>& p))(
|
|
The input/output from/to the coprocess is moved to the standard input/output.
|
|
)
|
|
xitem(tt(>&) var(word))
|
|
item(tt(&>) var(word))(
|
|
(Except where `tt(>&) var(word)' matches one of the above syntaxes;
|
|
`tt(&>)' can always be used to avoid this ambiguity.)
|
|
Redirects both standard output and standard error (file descriptor 2)
|
|
in the manner of `tt(>) var(word)'.
|
|
Note that this does em(not) have the same effect as `tt(>) var(word) tt(2>&1)'
|
|
in the presence of multios (see the section below).
|
|
)
|
|
xitem(tt(>&|) var(word))
|
|
xitem(tt(>&!) var(word))
|
|
xitem(tt(&>|) var(word))
|
|
item(tt(&>!) var(word))(
|
|
Redirects both standard output and standard error (file descriptor 2)
|
|
in the manner of `tt(>|) var(word)'.
|
|
)
|
|
xitem(tt(>>&) var(word))
|
|
item(tt(&>>) var(word))(
|
|
Redirects both standard output and standard error (file descriptor 2)
|
|
in the manner of `tt(>>) var(word)'.
|
|
)
|
|
xitem(tt(>>&|) var(word))
|
|
xitem(tt(>>&!) var(word))
|
|
xitem(tt(&>>|) var(word))
|
|
item(tt(&>>!) var(word))(
|
|
Redirects both standard output and standard error (file descriptor 2)
|
|
in the manner of `tt(>>|) var(word)'.
|
|
)
|
|
enditem()
|
|
|
|
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
|
|
(em(file descriptor), em(file))
|
|
association at the time of evaluation.
|
|
For example:
|
|
|
|
indent(... tt(1>)var(fname) tt(2>&1))
|
|
|
|
first associates file descriptor 1 with file var(fname).
|
|
It then associates file descriptor 2 with the file associated with file
|
|
descriptor 1 (that is, var(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 var(fname).
|
|
sect(Multios)
|
|
pindex(MULTIOS, use of)
|
|
If the user tries to open a file descriptor for writing more than once,
|
|
the shell opens the file descriptor as a pipe to a process that copies
|
|
its input to all the specified outputs, similar to bf(tee),
|
|
provided the tt(MULTIOS) option is set, as it is by default. Thus:
|
|
|
|
example(date >foo >bar)
|
|
|
|
writes the date to two files, named `tt(foo)' and `tt(bar)'.
|
|
Note that a pipe is an implicit redirection; thus
|
|
|
|
example(date >foo | cat)
|
|
|
|
writes the date to the file `tt(foo)', and also pipes it to cat.
|
|
|
|
If the tt(MULTIOS)
|
|
option is set, the word after a redirection operator is also subjected
|
|
to filename generation (globbing). Thus
|
|
|
|
example(: > *)
|
|
|
|
will truncate all files in the current directory,
|
|
assuming there's at least one. (Without the tt(MULTIOS)
|
|
option, it would create an empty file called `tt(*)'.)
|
|
Similarly, you can do
|
|
|
|
example(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 bf(cat),
|
|
provided the tt(MULTIOS) option is set. Thus
|
|
|
|
example(sort <foo <fubar)
|
|
|
|
or even
|
|
|
|
example(sort <f{oo,ubar})
|
|
|
|
is equivalent to `tt(cat foo fubar | sort)'.
|
|
|
|
Note that a pipe is an implicit redirection; thus
|
|
|
|
example(cat bar | sort <foo)
|
|
|
|
is equivalent to `tt(cat bar foo | sort)' (note the order of the inputs).
|
|
|
|
If the tt(MULTIOS) option is em(un)set,
|
|
each redirection replaces the previous redirection for that file descriptor.
|
|
However, all files redirected to are actually opened, so
|
|
|
|
example(echo foo > bar > baz)
|
|
|
|
when tt(MULTIOS) is unset will truncate bar, and write `tt(foo)' into baz.
|
|
|
|
sect(Redirections with no command)
|
|
vindex(NULLCMD, use of)
|
|
vindex(READNULLCMD, use of)
|
|
pindex(CSH_NULLCMD, use of)
|
|
pindex(SH_NULLCMD, use of)
|
|
When a simple command consists of one or more redirection operators
|
|
and zero or more parameter assignments, but no command name, zsh can
|
|
behave in several ways.
|
|
|
|
If the parameter tt(NULLCMD) is not set or the option tt(CSH_NULLCMD) is
|
|
set, an error is caused. This is the bf(csh) behavior and tt(CSH_NULLCMD)
|
|
is set by default when emulating bf(csh).
|
|
|
|
If the option tt(SH_NULLCMD) is set, the builtin `tt(:)' is inserted as a
|
|
command with the given redirections. This is the default when emulating
|
|
bf(sh) or bf(ksh).
|
|
|
|
Otherwise, if the parameter tt(NULLCMD) is set, its value will be used as a
|
|
command with the given redirections. If both tt(NULLCMD) and
|
|
tt(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
|
|
tt(NULLCMD) is `tt(cat)' and for tt(READNULLCMD) is `tt(more)'. Thus
|
|
|
|
example(< file)
|
|
|
|
shows the contents of tt(file) on standard output, with paging if that is a
|
|
terminal. tt(NULLCMD) and tt(READNULLCMD) may refer to shell functions.
|
|
|