可能的重复:
获取通过管道传输到另一个进程的退出代码
如果我将一个命令的输出通过管道传输到另一个命令中,有没有办法让我明确检查第一个命令是否失败?
例如,如果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.