2010-12-17 59 views
6

我目前想知道如何对链接命令进行错误处理。下面就是一个例子来简单的证明我的问题:在bash脚本中使用链接命令(管道)进行错误处理?

cat file | gzip >/tmp/test 

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

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

谢谢!

+0

你试过'$ PIPESTATUS'吗?它应该为bash工作。 – khachik 2010-12-17 16:11:48

+0

我甚至不知道,这是存在的。谢谢! – aurora 2010-12-20 09:07:49

回答

8

试试这个:

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

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

+0

哇 - 非常酷。我不知道这种可能性。非常感谢! – aurora 2010-12-20 09:07:14