pipeline is a sequence of simple commands separated by one of
the control operators ‘|’ or ‘|&’.
The format for a pipeline is
!] command1 [ [
|&] command2 ...]
The output of each command in the pipeline is connected via a pipe to the input of the next command. That is, each command reads the previous command's output. This connection is performed before any redirections specified by the command.
If ‘|&’ is used, the standard error of command1 is connected to
command2's standard input through the pipe; it is shorthand for
2>&1 |. This implicit redirection of the standard error is
performed after any redirections specified by the command.
The reserved word
time causes timing statistics
to be printed for the pipeline once it finishes.
The statistics currently consist of elapsed (wall-clock) time and
user and system time consumed by the command's execution.
The -p option changes the output format to that specified
The TIMEFORMAT variable may be set to a format string that
specifies how the timing information should be displayed.
See Bash Variables, for a description of the available formats.
The use of
time as a reserved word permits the timing of
shell builtins, shell functions, and pipelines. An external
time command cannot time these easily.
If the pipeline is not executed asynchronously (see Lists), the shell waits for all commands in the pipeline to complete.
Each command in a pipeline is executed in its own subshell
(see Command Execution Environment). The exit
status of a pipeline is the exit status of the last command in the
pipeline, unless the
pipefail option is enabled
(see The Set Builtin).
pipefail is enabled, the pipeline's return status is the
value of the last (rightmost) command to exit with a non-zero status,
or zero if all commands exit successfully.
If the reserved word ‘!’ precedes the pipeline, the
exit status is the logical negation of the exit status as described
The shell waits for all commands in the pipeline to terminate before
returning a value.