Bash 源文件如何继承陷阱调试?

Bash 源文件如何继承陷阱调试?,bash,debugging,bash-trap,Bash,Debugging,Bash Trap,运行以下代码段: #!/bin/bash function preexec () { echo -e "\n-->preexec command: $BASH_COMMAND" } trap 'preexec' DEBUG function testfunc () { echo "testfunc called $1" } testfunc "main" source "source.sh" exit 0 source.sh在哪里 #!/bin/bash te

运行以下代码段:

#!/bin/bash

function preexec ()
{
    echo -e "\n-->preexec command: $BASH_COMMAND"
}
trap 'preexec' DEBUG

function testfunc ()
{
    echo "testfunc called $1"
}

testfunc "main"
source "source.sh"

exit 0

source.sh在哪里

#!/bin/bash

testfunc "source"

给出:


这意味着源文件中的每个命令都不会被调试陷阱捕获。
事实上,如果我加上这一行

trap 'preexec' DEBUG
在第二行source.sh中,一切都可以正常工作(源文件中的命令也被捕获)。

如何将此作为默认行为,以避免对任何需要源文件重复上述行?
换句话说:是否有机会告诉源文件继承调试陷阱?

我解决了主文件中的设置:

set -o functrace

来自BASH man:

如果设置,则调试和返回时的任何陷阱都将由shell继承 在子shell中执行的函数、命令替换和命令 环境调试和返回陷阱通常不会在中继承 这类案件

作为shell函数的“源”,它们是继承的

set -o functrace