捕获 bash 函数的结果并允许其退出

捕获 bash 函数的结果并允许其退出

该函数应该退出调用脚本:

crash() {
  echo error
  exit 1
}

这按预期工作:

echo before
crash
echo after         # execution never reaches here

但这并不:

echo before
x=$(crash)         # nothing is printed, and execution continues
echo after         # this is printed

如何捕获函数的结果并允许其退出?

答案1

这是因为在子 shell 中$(crash)执行crash,因此exit适用于子 shell 而不是您的脚本。

如果由于脚本无论如何都退出而不会使用它,那么在变量中捕获输出有什么意义呢?

答案2

这应该可以解决您的问题:

echo before
x=$(crash) || exit       # if crash give -gt 0 value then exit with the same value
echo after

相关内容