运行以下代码段:
#!/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内部作为第二行,一切都按照需要工作(源文件中的命令也被捕获).
我解决了主文件中的设置:
set -o functrace
来自BASH的人:
If set,any traps on DEBUG and RETURN are inherited by shell
functions,command substitutions,and commands executed in a subshell
environment. The DEBUG and RETURN traps are normally not inherited in
such cases.
作为’source’的shell函数,它们是继承的.
原文地址:https://www.jb51.cc/bash/383543.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。