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

Kan*_* Li 3 bash shell

我有这样的命令:

COMMAND1 &&
COMMAND2 | COMMAND3 | COMMAND4 &&
COMMAND5
Run Code Online (Sandbox Code Playgroud)

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

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

有办法轻松完成吗?

顺便说一句:我使用(退出n)获取一个命令,该命令除状态n退出外什么都不做.是否有一个UNIX命令直接执行此操作,如true和false?

谢谢.

Foo*_*Bah 8

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