如何使用-e检查bash中的错误

时间:2014-08-12 17:14:19

标签: bash error-handling

如果设置-e,我如何有选择地检查线路是否有错误(而不是失败)。

我的大多数命令都需要-e,但有一个不需要。

set -e
foo
bar

biz
if [ ! $? -e 0 ]
   echo oh noes
fi

$?显然不起作用。

这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:3)

来自bash选项的(4.1)-e手册页:

  

如果失败的命令是part,则shell不会退出                         紧跟一个while或者直到关键字的命令列表,if或elif保留字之后的部分测试,执行的任何命令的一部分                         a&&或者││列表,除了最后一个&&amp ;;之后的命令或││

biz || echo "oh noes"

仅当biz失败时,||的RHS才会执行,并且echo保证以状态0退出,因此不会导致脚本失败。

您也可以使用if语句运行命令,如Etan所建议的那样:

if ! biz; then
    echo "oh noes"
fi

您也可以暂时关闭-e

set +e
biz
if [ $? -ne 0 ]; then
   echo oh noes
fi
set -e

答案 1 :(得分:2)

将命令内联到if检查。

if ! biz; then
    echo oh noes
fi