Bash:如何检测管道中的错误

时间:2011-08-27 17:53:17

标签: bash shell

我有这样的命令:

COMMAND1 &&
COMMAND2 | COMMAND3 | COMMAND4 &&
COMMAND5

我想确保所有COMMAND 1-5都成功。有没有一种简单的方法来实现这一目标?通过研究,我发现PIPESTATUS可以使用,但屈服于一些非常复杂的命令,如

COMMAND1 &&
COMMAND2 | COMMAND3 | COMMAND4 &&
($PST=("${PIPESTATUS[@]}") && (exit ${PST[0]}) && (exit ${PST[1]})) &&
COMMAND5

有没有办法轻松完成?

BTW:我使用(退出n)获取一个命令,该命令除状态n退出外什么都不做。是否存在直接执行此操作的UNIX命令,如true和false?

感谢。

1 个答案:

答案 0 :(得分:8)

尝试使用set -o pipefail。这可以确保管道的错误代码是最后一个带错误的进程的错误代码。