我有一个非常简单的脚本。
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
$
答案 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