I'm trying to write a "stack trace" function and BASH_LINENO doesn't make sense sometimes and doesn't appear too accurate at others.
Here's my test script: shopt -s extdebug trap 'backtrace' ERR set -E backtrace() { echo "FUNCNAME: ${funcna...@]}" echo "BASH_SOURCE: ${bash_sour...@]}" echo "BASH_LINENO: ${bash_line...@]}" echo "BASH_ARGV: ${bash_ar...@]}" echo "BASH_ARGC: ${bash_ar...@]}" echo ${LINENO} ${FUNCNAME[0]} ${BASH_SOURCE[0]} echo ${BASH_LINENO[0]} ${FUNCNAME[1]} ${BASH_SOURCE[1]} echo ${BASH_LINENO[1]} ${FUNCNAME[2]} ${BASH_SOURCE[2]} } false_func() { echo "in false_func(), FUNCNAME: ${funcna...@]}" echo "in false_func(), BASH_LINENO: ${bash_line...@]}" echo "in false_func(), LINENO: ${LINENO}" false echo "after false" } false_func The output of which is: $ bash /tmp/bt.sh in false_func(), FUNCNAME: false_func main in false_func(), BASH_LINENO: 28 0 in false_func(), LINENO: 22 FUNCNAME: backtrace false_func main BASH_SOURCE: /tmp/bt.sh /tmp/bt.sh /tmp/bt.sh BASH_LINENO: 18 28 0 BASH_ARGV: BASH_ARGC: 0 0 13 backtrace /tmp/bt.sh 18 false_func /tmp/bt.sh 28 main /tmp/bt.sh after false The BASH_LINENO array has 18 as it's second argument which is the line number that false_func() is defined on, not the line number in that function where it left that function for the next one (backtrace by way of the ERR trap). Thots? b.
signature.asc
Description: This is a digitally signed message part