Получите функцию Backtrace в Bash от Grap Gansler (с помощью Caller)

StackOverflow https://stackoverflow.com/questions/5811002

  •  25-10-2019
  •  | 
  •  

Вопрос

Я знаю, что вы можете использовать «вызывающего абонента», чтобы получить обратную связь функциональных вызовов в 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' выход, но это дает мне «1 Main ./test.sh '», а не номер строки команды неудачи

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top