@@ -23,36 +23,6 @@ readonly __source_guard_84949D19_1C7A_40AF_BC28_BA5967A0B6CE=${__source_guard_84
23
23
24
24
set -eEu -o pipefail -o functrace
25
25
26
- # trap_error_info::get_caller_line_no $level
27
- #
28
- # level 0 is caller of `trap_error_info::get_caller_line_no`.
29
- #
30
- # CAUTION: do NOT call this function in sub-shell!
31
- # e.g. $(trap_error_info::get_caller_line_no)
32
- #
33
- #
34
- # related info:
35
- #
36
- # What is the "caller" command?
37
- # https://unix.stackexchange.com/questions/19323
38
- # Bash - Caller - Stack Trace (Builtin command)
39
- # https://datacadamia.com/lang/bash/caller
40
- # Get the name of the caller script in bash script
41
- # https://stackoverflow.com/questions/20572934
42
- #
43
- trap_error_info::get_caller_line_no () {
44
- local level=" $1 "
45
-
46
- TRAP_ERROR_INFO_CALLER_LINE_NO=' '
47
-
48
- # level 0 of caller means this `trap_error_info::get_caller_line_no` self
49
- # set level 1 to skip `trap_error_info::get_caller_line_no` self
50
- local line_no _
51
- read -r line_no _ < <( caller $(( level + 1 )) )
52
-
53
- TRAP_ERROR_INFO_CALLER_LINE_NO=" $line_no "
54
- }
55
-
56
26
# show stack trace.
57
27
#
58
28
# usage:
@@ -67,20 +37,16 @@ trap_error_info::get_caller_line_no() {
67
37
# example:
68
38
# foo_function(bar.sh:42)
69
39
#
70
- # CAUTION: do NOT call this function in sub-shell!
71
- # e.g. $(trap_error_info::get_stack_trace)
72
- #
73
40
trap_error_info::get_stack_trace () {
74
41
local indentation=" ${1:- } " hide_level=" ${2:- 0} "
75
42
local func_stack_size=" ${# FUNCNAME[@]} "
76
43
77
44
TRAP_ERROR_INFO_STACK_TRACE=' '
78
45
79
- local i stack_trace nl= $' \n '
46
+ local i stack_trace=
80
47
for (( i = hide_level + 1 ; i < func_stack_size; i++ )) ; do
81
- trap_error_info::get_caller_line_no " $(( i - 1 )) "
82
-
83
- stack_trace=" ${stack_trace: +$stack_trace$nl }${indentation}${FUNCNAME[i]} (${BASH_SOURCE[i]} :${TRAP_ERROR_INFO_CALLER_LINE_NO} )"
48
+ [ -n " ${stack_trace:- } " ] && printf -v stack_trace ' %s\n' " $stack_trace "
49
+ printf -v stack_trace ' %s%s%s(%s:%s)' " $stack_trace " " $indentation " " ${FUNCNAME[i]} " " ${BASH_SOURCE[i]} " " ${BASH_LINENO[i - 1]} "
84
50
done
85
51
86
52
TRAP_ERROR_INFO_STACK_TRACE=" $stack_trace "
0 commit comments