2011-04-27 21 views
7

Sé que se puede utilizar 'la persona que llama para conseguir una traza de las llamadas a funciones en bash:Obtener traza la función en bash desde el manejador de trampa (usando persona que llama)

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

Lienzo:

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

Mi pregunta es, digamos que tengo un script que usa 'set -e' para terminar en cualquier falla no verificada. ¿Es posible obtener un número de línea donde falló la secuencia de comandos (y sus llamadas)

He intentado ingenuamente hacer: trampa 'Backtrace' SALIR, pero eso me da '1 principal ./test.sh' en lugar de el número de línea del comando que falla

Respuesta

4

No estoy seguro de si funcionará, pero intente agregar ERR a su lista de trap 'd señales. Tal vez su código será invocado antes de que el material set -e se haga cargo, en cuyo caso volverá a estar en el negocio.

Cuestiones relacionadas