Encontrar la definición de una función bash

Yo trabajo en un entorno que tiene una gran cantidad de magia de script de shell de legado que mienten alrededor. Una cosa que se utiliza pesado de la línea de comandos son funciones bash que se obtienen de algún archivo incluido de algún archivo incluido de algún archivo … incluido en mi .bash_profile. ¿Hay una manera de obtener la definición o incluso mejor la ubicación de la definición de estas funciones sin rastrear a través de 5 niveles de incluye?

Para obtener la definición de función:

type -a function_name 

Asumiendo que tiene una función llamada foo, los comandos que aparecen a continuación obtendrán la ubicación de la definición de la función, es decir, obtendrán el nombre del archivo en el que se define la función, así como el número de línea en el que se define la función dentro de ese archivo .

 # Turn on extended shell debugging shopt -s extdebug # Dump the function's name, line number and fully qualified source file declare -F foo # Turn off extended shell debugging shopt -u extdebug 

En mi caso la salida de estos comandos es:

 foo 32 /source/private/main/developer/cue.pub.sh 

Para ver la definición de la función (en contraposición a su procedencia), utilice:

 declare -f <functionname> 

bash -x volcará lo que se está ejecutando bash cuando se inicia, lo que debería permitirle rastrear más fácilmente. No se olvide de salir del shell recién abierto.

Otra manera, que me resulta aún más simple últimamente:

  which <functionname> 

(Esto también mostrará si es un alias o una secuencia de comandos, pero no rastrea el origen de un alias)