我有这样的命令:
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?
感谢。
答案 0 :(得分:8)
尝试使用set -o pipefail
。这可以确保管道的错误代码是最后一个带错误的进程的错误代码。