如果设置-e
,我如何有选择地检查线路是否有错误(而不是失败)。
我的大多数命令都需要-e
,但有一个不需要。
set -e
foo
bar
biz
if [ ! $? -e 0 ]
echo oh noes
fi
$?
显然不起作用。
这样做的最佳方式是什么?
答案 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