Ottenere la funzione backtrace in bash dalla trappola handler (usando chiamante)
-
25-10-2019 - |
Domanda
Lo so che è possibile utilizzare 'interlocutore' per ottenere un backtrace di chiamate di funzione in bash:
#! /bin/bash
Backtrace () {
echo "Backtrace is:"
i=0
while caller $i
do
i=$((i+1))
done
}
myFunc () {
Backtrace
}
myFunc
Stampe:
Backtrace is:
11 myFunc ./test.sh
13 main ./test.sh
La mia domanda è, consente di dire che ho uno script che usi 'set -e' per terminare in qualsiasi fallimento incontrollato. E 'possibile ottenere un numero di riga in cui lo script non è riuscita (e dei suoi chiamanti)
Ho provato a fare ingenuamente: trappola EXIT 'Backtrace', ma che mi dà '1 ./test.sh principale', piuttosto che il numero di riga della mancanza di comando
Soluzione
Non sono sicuro se funzionerà, ma prova ad aggiungere ERR
alla tua lista dei segnali trap
'd. Forse il tuo codice verrà richiamato prima la roba set -e
prende il sopravvento, nel qual caso sarete di nuovo nel mondo degli affari.