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

时间:2015-07-30 09:11:14

标签: shell exit

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

test.sh

bool

当函数内部执行_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
$

2 个答案:

答案 0 :(得分:3)

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

_EXECUTE_METHOD () { return 1; }

_EXECUTE_METHOD
ERROR_CODE=$?
if [[ $ERROR_CODE -eq 1 ]]; then echo "Got error"; fi

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

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

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

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

答案 1 :(得分:0)

不需要 [[[

#!/bin/sh

_EXECUTE_METHOD () {
  return 1
}

if ! _EXECUTE_METHOD; then
  echo "Got error"
  exit 0
fi