我的印象是exit无论如何都会终止当前的bash脚本,并且在我的脚本顶部有以下错误处理程序:
function err {
printf "\e[31m$1\e[0m\n" 1>&2
exit 1
}
Run Code Online (Sandbox Code Playgroud)
对于大多数情况来说,它就像一个魅力,直到这一行:
item=$(myfunc $1)
Run Code Online (Sandbox Code Playgroud)
通常情况下,该行正常工作,myfunc的STDOUT $item按预期转入.myfunc通过err上面看到的函数抛出错误时会出现问题.在$()结束了吞咽不回零和退出脚本本身守着退出.如果我理解正确,问题是$()实际上产生了一个新的子shell(就像被弃用的反引号一样),但我知道没有其他方法可以将函数的输出捕获到bash中允许其exit工作的变量中.
我也尝试使用set -e,也没有运气.有人可以建议如何构建我的错误处理程序,以便它甚至在这些情况下退出脚本?
bash ×1