捕获 shell 脚本中函数的退出状态

Amb*_*ish 6 shell exit

我有一个非常简单的脚本。

测试文件

_EXECUTE_METHOD () {
  exit 1
}

_EXECUTE_METHOD
ERROR_CODE=$?
if [[ $ERROR_CODE -eq 1 ]]; then
  echo "Got error"
  exit 0
fi
Run Code Online (Sandbox Code Playgroud)

exit 1该脚本在函数内执行时立即终止。我想从函数中捕获此退出状态并在主脚本中处理它。

我已经尝试过set -eset +e但仍然没有成功。我不能使用return声明。

实际输出:

$ sh test.sh 
$ echo $?
1
$
Run Code Online (Sandbox Code Playgroud)

实际输出:

$ sh test.sh
Got error 
$ echo $?
0
$
Run Code Online (Sandbox Code Playgroud)

anu*_*ava 6

您需要使用return而不是exit在函数内部:

_EXECUTE_METHOD () { return 1; }

_EXECUTE_METHOD || echo "Got error"
Run Code Online (Sandbox Code Playgroud)

exit将终止您当前的 shell。如果必须使用,exit请将此函数放入脚本或子 shell 中,如下所示:

declare -fx _EXECUTE_METHOD
_EXECUTE_METHOD () { exit 1; }

_EXECUTE_METHOD || echo "Got error"
Run Code Online (Sandbox Code Playgroud)

(..)将在子 shell 中执行该函数,因此exit只会终止子 shell。