Получить функцию backtrace в bash из обработчика ловушек (используя вызывающую программу) - PullRequest
7 голосов
/ 28 апреля 2011

Я знаю, что вы можете использовать 'caller', чтобы получить обратный след вызовов функций в bash:

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

Отпечатки:

Backtrace is:
11 myFunc ./test.sh
13 main ./test.sh

Мой вопрос, скажем, у меня естьскрипт, который использует 'set -e' для завершения при любой непроверенной ошибке.Можно ли получить номер строки, в которой произошел сбой скрипта (и его вызывающих)

Я пытался наивно делать: trap 'Backtrace' EXIT, но это дает мне '1 main ./test.sh'а не номер строки ошибочной команды

1 Ответ

4 голосов
/ 28 апреля 2011

Я не уверен, что это будет работать, но попробуйте добавить ERR в ваш список trap 'd сигналов. Возможно, ваш код будет вызван до того, как начнут действовать set -e, и в этом случае вы вернетесь в бизнес.

...