bash错误陷阱是否保证不进行递归调用?

时间:2016-02-25 01:22:41

标签: bash recursion error-handling runtime-error

Bash陷阱似乎会自动避免递归。在这个例子中,我期望无限递归,因为我无法找到明确禁止它的文档;但是,输出停止了。

我可能遗漏了一些明显的东西,但我找不到保证手册页中非递归的文档。任何人都可以找到讨论此事的官方文件吗?

    #!/bin/bash
    set -Eu
    err1()
    {
        echo in err1
        false
    }
    err2()
    {
        echo in err2
        false
    }

    trap 'err1 ; err2' ERR

    false

Ouptput是:

    in err1
    in err2

1 个答案:

答案 0 :(得分:1)

除非set -o errtrace,否则子shell(包括函数调用)不会继承ERR陷阱。这将自动包括陷阱处理程序。

即使您设置了shell选项,也不会在陷阱处理程序内调用ERR陷阱。 bash手册似乎没有提到这一点。