我希望我的ksh脚本在意外错误时停止。我还使用嵌套的函数来重用循环代码。
所以我使用了errexit功能(' set -e')。该脚本在出错时崩溃 - >大。
我有时想抓住错误而不是崩溃。
我有一个函数func。我想要(要求):
:它应该在出错时停止
:它也应该在出错时停止
除了在父母中执行'功能'应该被抓住
我编码了这个:
# parent script
func()
{ (
set -e # function should crash on 1st error
rm foo ; rm foo # this will trigger error
echo "Since -e is set, this part of the script should never get reached"
) }
set -e # parent script should crash on 1st error
echo "do stuff"
# we want to execute 'function' and catch error
if func ; then
echo "Execution of func was ok"
else
echo "Execution of func was not ok"
fi
echo "do more stuff"
它不起作用。
do stuff
rm: impossible de supprimer 'foo': No such file or directory
rm: impossible de supprimer 'foo': No such file or directory
Since -e is set, this part of the script should never get reached
Execution of func was ok
do more stuff
因为' func'在测试中执行(如果是func),则禁用errexit。这意味着func中的错误不会使函数崩溃。该功能以状态0继续并退出,并且不会通知父级错误。即使我在func中再次明确设置了errexit,也没有启用errexit。
如果我没有在测试中执行func,那么errexit就会启动并且父进程崩溃:我无法捕获异常(换句话说:I' m func' ed)。我可以在func的调用下临时禁用errexit,但这似乎是一个不干净的解决方法。
知道如何达到我的要求吗?
答案 0 :(得分:0)
您是否尝试在“set -e”(包含引号)上运行搜索?
或者也许是谷歌搜索,例如:ksh“set -e”site:stackoverflow.com
......几个点击/匹配/建议答案。