从陷阱RETURN处理程序中访问函数的返回码

时间:2015-08-19 04:30:06

标签: bash

在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”类似。

1 个答案:

答案 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
}