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



我有一个非常简单的脚本

test.sh

_EXECUTE_METHOD () {
  exit 1
}
_EXECUTE_METHOD
ERROR_CODE=$?
if [[ $ERROR_CODE -eq 1 ]]; then
  echo "Got error"
  exit 0
fi

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

我试过set -e &set +e,仍然没有成功。我不能使用return语句

实际输出:

$ sh test.sh 
$ echo $?
1
$
实际输出:

$ sh test.sh
Got error 
$ echo $?
0
$

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

_EXECUTE_METHOD () { return 1; }
_EXECUTE_METHOD || echo "Got error"

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

declare -fx _EXECUTE_METHOD
_EXECUTE_METHOD () { exit 1; }
_EXECUTE_METHOD || echo "Got error"

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

不需要[[[

#!/bin/sh
set -eu
_EXECUTE_METHOD () {
  return 1
}
if ! _EXECUTE_METHOD; then
  echo "Got error"
  exit 0
fi

或者如果你想要简洁:

#!/bin/sh
set -eu
_EXECUTE_METHOD () {
  return 1
}
_EXECUTE_METHOD || { echo "Got error"; exit 0; }

相关内容

  • 没有找到相关文章

最新更新