在bash中,RETURN处理程序如何访问当前的返回代码?
例如
#!/usr/bin/env bash
function A() {
function A_ret() {
# How to access the return code here?
echo "${FUNCNAME} ???"
}
trap A_ret RETURN
echo -n "${FUNCNAME} returning code $1 ... "
return $1
}
A 1
这打印
A returning code 1 ... A_ret ???
我想要打印
A returning code 1 ... A_ret 1
A_ret如何访问A返回码?
与this stackoverflow question Get the exitcode of the shell script in a “trap EXIT”相似.
最佳答案 看起来RETURN陷阱在return语句实际设置$的新值之前执行.考虑这个设置$的例子?就在退货声明之前.
a () {
a_ret () {
echo "${FUNCNAME} $?"
}
trap a_ret RETURN
printf "${FUNCNAME} returning code $1 ... "
(exit 54)
return $1
}
a 1
在bash 3.2和4.3中,我得到了输出
a returning code 1 ... a_ret 54
我要说这是一个要报告的错误.作为一种变通方法,您始终可以使用子shell出口以及要返回的值:
a () {
...
(exit $1)
return $1
}