从陷阱处理程序中获取bash中的函数回溯(使用调用者)

nos*_*ian 7 error-handling bash bash-trap

我知道你可以使用'caller'来获取bash函数调用的回溯:

#! /bin/bash
Backtrace () {
   echo "Backtrace is:"
   i=0
   while caller $i
   do
      i=$((i+1))
   done
}
myFunc () {
   Backtrace
}
myFunc
Run Code Online (Sandbox Code Playgroud)

打印:

Backtrace is:
11 myFunc ./test.sh
13 main ./test.sh
Run Code Online (Sandbox Code Playgroud)

我的问题是,假设我有一个脚本使用'set -e'来终止任何未经检查的失败.是否可以获取脚本失败的行号(及其调用者)

我天真地尝试过:陷阱'Backtrace'EXIT,但这给了我'1 main ./test.sh'而不是失败命令的行号

Joh*_*nck 5

我不确定它是否有效,但请尝试添加ERR到您的“d 信号”列表中trap。也许您的代码将在接管之前被调用set -e,在这种情况下您将重新开始工作。