从 shell 脚本中的函数捕获退出状态
Capture exit status from function in shell script
我有一个非常简单的脚本。
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; }
我有一个非常简单的脚本。
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; }