在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”类似。
答案 0 :(得分:2)
在RETURN
语句实际设置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 exit
与您要返回的值一起使用:
a () {
...
(exit $1)
return $1
}