我有很多功能经常相互嵌套。为了简单调试,我决定使用FUNCNAME
提供的bash
环境变量数组来跟踪代码流。这是示例代码:
test1(){ test2;}
test2(){ test3;}
test3(){ test4;}
test4(){ echo ${FUNCNAME[@]};}
输出看起来像这样:
test4 test3 test2 test1
这很清楚地显示了嵌套,但是如果您使用
ctr+c
终止函数,然后再次运行它,则不会刷新FUNCNAME
,因此输出可能看起来像这样(取决于您何时终止它):test4 test3 test2 test1 test3 test2 test1
我尝试手动清除或
unset
FUNCNAME
,但随后得到空输出。关于如何解决此问题的任何想法? 最佳答案
有人可能会说此问题是功能而不是错误。如果堆栈中的任何函数崩溃,则可以echo ${funcname[@]}
查看崩溃发生的位置。最终结论是:该问题被报告为错误,已在bash
v4.4.0中修复。