我目前想知道如何对链式命令进行错误处理。以下只是一个容易证明我的问题的例子:
cat file | gzip >/tmp/test
如果 cat 失败(因为例如文件缺失), gzip 仍然执行,因此中最后存储的退出代码> $? 0 。在这种情况下, set -e 也无济于事。
我想知道什么是最佳解决方案?
谢谢!
答案 0 :(得分:8)
试试这个:
trap 'echo "ERR caught"' ERR
set -o pipefail
cat file | gzip >/tmp/test
仍将创建输出文件(创建并行完成)并运行gzip
,但您可以进行清理。使用${PIPESTATUS[@]}
数组查看错误发生的位置。您可以使用$BASH_COMMAND
和$BASH_LINENO
获取有关错误的其他信息。