Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Possible Duplicate:
Get exit code of process that's piped to another

If I pipe the output of one command into another, is there a way for me to check explicitly whether the first command failed?

For example, if prog processes a file and outputs to STDOUT:

prog file1 | cmp - file2

is there a way to check if prog explicitly failed or succeeded (by return code)? I want to avoid the use of temporary files, and don't want to rely on the output of the second command; so, for the example above, I want to avoid examining the output of cmp to determine if prog failed (if there is no affirmative answer to my question, I'll just fall back to doing precisely that).

share|improve this question

marked as duplicate by Michael Mrozek Jun 1 '12 at 20:06

This question was marked as an exact duplicate of an existing question.

up vote 0 down vote accepted

You want set -o pipefail.

From the Bash manpage:


If set, the return value of a  pipeline  is  the value  of
the  last (rightmost) command to exit with a non-zero status,
or zero if all  commands in  the pipeline exit successfully.
This option is disabled by default.
share|improve this answer
also have a look at PIPESTATUS – Ulrich Dangel Jun 1 '12 at 20:02

Not the answer you're looking for? Browse other questions tagged or ask your own question.