源文件如何继承陷阱DEBUG?

时间:2012-11-04 21:47:04

标签: 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

testfunc "source"


给出:

-->preexec command: testfunc "main"
testfunc called main

-->preexec command: source "source.sh"
testfunc called source

-->preexec command: exit 0


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

trap 'preexec' DEBUG

在source.sh里面作为第二行,一切都按照需要工作(源文件中的命令也被捕获)。

如何将此作为默认行为,以避免为我需要提供的任何文件重复上述行? 换句话说:有没有机会告诉源文件继承DEBUG陷阱?

1 个答案:

答案 0 :(得分:9)

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

set -o functrace


来自BASH男子:

  

如果设置,则DEBUG和RETURN上的任何陷阱都将由shell继承   子shell中执行的函数,命令替换和命令   环境。 DEBUG和RETURN陷阱通常不会继承   这种情况。

作为'source'一个shell函数,它们是继承的。