2

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

Jeff Schaller
  • 67,283
  • 35
  • 116
  • 255
Zorawar
  • 845

1 Answers1

3

You want set -o pipefail.

From the Bash manpage:

pipefail

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.
CodeGnome
  • 7,820