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).


1 Answer 1


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.
  • 1
    also have a look at PIPESTATUS Jun 1, 2012 at 20:02

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