我下的印象是exit
将终止当前的bash脚本不管是什么,并且有以下错误处理程序在我的脚本的顶部:
function err {
printf "\e[31m$1\e[0m\n" 1>&2
exit 1
}
它的工作像大多数情况下,魅力直到这条线:
item=$(myfunc $1)
通常情况下,该行正常工作,与MYFUNC的STDOUT倒入$item
,如预期。当myfunc
通过上面看到的err
函数引发错误时,会出现此问题。 $()
最终吞噬非零回报,并防止退出退出脚本本身。如果我理解正确,问题是$()
实际上产生了一个新的子shell(就像弃用的反引号一样),但是我知道没有其他方法将函数的输出捕获到bash中允许exit
工作的变量中。
我也尝试过使用set -e
,并且没有任何运气。有人可以建议如何构建我的错误处理程序,以便在这些情况下退出脚本吗?
'$()'最终吞噬了一切,因为*命令替换*在* subshell *中占有一席之地。什么是关于subshell的bash规则? *子外壳中没有任何操作可以影响父进程... *是的,您可以返回退出状态('$?'),但您无法执行其他任何操作。 –