Luc*_*one 6 debugging bash 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
Run Code Online (Sandbox Code Playgroud)
其中source.sh是
#!/bin/bash
testfunc "source"
Run Code Online (Sandbox Code Playgroud)
得到:
-->preexec command: testfunc "main"
testfunc called main
-->preexec command: source "source.sh"
testfunc called source
-->preexec command: exit 0
Run Code Online (Sandbox Code Playgroud)
这意味着源文件中的每个命令都不会被DEBUG陷阱捕获.
事实上,如果我添加该行
trap 'preexec' DEBUG
Run Code Online (Sandbox Code Playgroud)
在source.sh内部作为第二行,一切都按照需要工作(源文件中的命令也被捕获).
如何将此作为默认行为,以避免为我需要提供的任何文件重复上述行?换句话说:有没有机会告诉源文件继承DEBUG陷阱?
我解决了主文件中的设置:
set -o functrace
Run Code Online (Sandbox Code Playgroud)
来自BASH的人:
如果设置,则DEBUG和RETURN上的任何陷阱都由shell函数,命令替换和子shell环境中执行的命令继承.在这种情况下,DEBUG和RETURN陷阱通常不会被继承.
作为'source'的shell函数,它们是继承的.