检查管道命令是否失败

检查管道命令是否失败

可能的重复:
获取通过管道传输到另一个进程的退出代码

如果我将一个命令的输出通过管道传输到另一个命令中,有没有办法让我明确检查第一个命令是否失败?

例如,如果prog处理文件并输出到 STDOUT:

prog file1 | cmp - file2

有没有办法检查是否prog显式失败或成功(通过返回代码)?我想避免使用临时文件,并且不想依赖第二个命令的输出;因此,对于上面的示例,我想避免检查 的输出cmp来确定是否prog失败(如果我的问题没有肯定的答案,我将退回到精确地执行此操作)。

答案1

你要set -o pipefail

来自 Bash 联机帮助页:

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.

相关内容