使用bash脚本中的链式命令(管道)进行错误处理?

时间:2010-12-17 16:01:21

标签: bash error-handling

我目前想知道如何对链式命令进行错误处理。以下只是一个容易证明我的问题的例子:

cat file | gzip >/tmp/test

如果 cat 失败(因为例如文件缺失), gzip 仍然执行,因此中最后存储的退出代码> $? 0 。在这种情况下, set -e 也无济于事。

我想知道什么是最佳解决方案?

谢谢!

1 个答案:

答案 0 :(得分:8)

试试这个:

trap 'echo "ERR caught"' ERR
set -o pipefail
cat file | gzip >/tmp/test

仍将创建输出文件(创建并行完成)并运行gzip,但您可以进行清理。使用${PIPESTATUS[@]}数组查看错误发生的位置。您可以使用$BASH_COMMAND$BASH_LINENO获取有关错误的其他信息。