运行以下代码段:
#!/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内部作为第二行,一切都按照需要工作(源文件中的命令也被捕获).