Skip to main content
edited tags
Link
user147505
user147505
Added Supplemental: set -E...
Source Link
DocSalvager
  • 2.3k
  • 2
  • 27
  • 42

Supplemental: set -E, etc. not working

In /share/sbin/gshlib ...

set -e set -E set -T shopt -s extdebug trap $(callStack) ERR function initialize () { : logstatus #<<< ERROR FOR TESTING trap } export -f initialize 

Misnaming logStatus to logstatus within /share/sbin/gshlib.initialize() to spring the trap ERR, the best I get is...

 Function call stack ... | /share/sbin/archive.main() | /share/sbin/include.include() | /share/sbin/gshlib.source() | /share/sbin/include.callStack() /share/sbin/gshlib: line 109: logstatus: command not found 

What I'm looking to get is...

 Function call stack ... | /share/sbin/archive.main() | /share/sbin/include.include() | /share/sbin/gshlib.source() | /share/sbin/gshlib.initialize() | /share/sbin/include.callStack() /share/sbin/gshlib: line 109: logstatus: command not found 

Supplemental: set -E, etc. not working

In /share/sbin/gshlib ...

set -e set -E set -T shopt -s extdebug trap $(callStack) ERR function initialize () { : logstatus #<<< ERROR FOR TESTING trap } export -f initialize 

Misnaming logStatus to logstatus within /share/sbin/gshlib.initialize() to spring the trap ERR, the best I get is...

 Function call stack ... | /share/sbin/archive.main() | /share/sbin/include.include() | /share/sbin/gshlib.source() | /share/sbin/include.callStack() /share/sbin/gshlib: line 109: logstatus: command not found 

What I'm looking to get is...

 Function call stack ... | /share/sbin/archive.main() | /share/sbin/include.include() | /share/sbin/gshlib.source() | /share/sbin/gshlib.initialize() | /share/sbin/include.callStack() /share/sbin/gshlib: line 109: logstatus: command not found 
Source Link
DocSalvager
  • 2.3k
  • 2
  • 27
  • 42

bash: Accessing function call stack in trap function

Working on a bash function call stack trace...

Script traps errors and runs a callStack() function. But on trapping, It always shows a call stack for the callStack() function itself instead of the function where the trap occurred as in ...

/share/sbin/zimdialog: line 647: status: command not found Function call stack ( command.function() ) ... /share/sbin/zimdialog.main() /share/sbin/include.callStack() 

Looking to get a stack trace that includes the errantFunction() like...

/share/sbin/zimdialog: line 647: status: command not found Function call stack ( command.function() ) ... /share/sbin/zimdialog.main() /share/sbin/zimdialog.errantFunction() /share/sbin/include.callStack() 

The trap is coded as...

trap callStack HUP INT QUIT TERM ERR 

The callStack() function is coded as...

function callStack () { { isNotNull "$1" && isHelp "$1"; } && { helpShow 'callStack Diagnostics regarding where the call to this function came from' return } local T="${T} " local STACK= i=${#FUNCNAME[@]} ((--i)) printf "${T}Function call stack ( command.function() ) ...\n" >&2 T="${T} " while (( $i >= 0 )) do STACK+="${T}${BASH_SOURCE[$i]}.${FUNCNAME[$i]}()\n" T="${T} " ((--i)) done printf "$STACK" >&2 }