运行以下代码段:
#!/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文件的第二行中,所有命令都会按预期运行(source文件中的命令也被捕获)。
我如何使此成为默认行为,以避免在需要使用source的任何文件中重复以上行为?
换句话说:有没有办法告诉所引用的文件继承DEBUG陷阱?