![使用 set -o pipelinefail 时确定 Bash 管道中的失败命令](https://linux22.com/image/192434/%E4%BD%BF%E7%94%A8%20set%20-o%20pipelinefail%20%E6%97%B6%E7%A1%AE%E5%AE%9A%20Bash%20%E7%AE%A1%E9%81%93%E4%B8%AD%E7%9A%84%E5%A4%B1%E8%B4%A5%E5%91%BD%E4%BB%A4.png)
set -o pipefail
我像往常一样在脚本中使用。这工作得很好,并且记录如下
curl ... | jq ... | psql ...
但是,有没有办法确定管道中的哪个命令实际上使整个过程失败了?
我正在研究此问题的唯一目的是更简洁的日志记录,但找不到任何相关文档。
答案1
使用PIPESTATUS
内置数组:
true | true | false | true | true
declare -p PIPESTATUS
declare -a PIPESTATUS=([0]="0" [1]="0" [2]="1" [3]="0" [4]="0")