Trouver la définition d'une fonction bash

Je travaille dans un environnement qui a beaucoup de magie de script shell existant. Une chose utilisée lourd de la ligne de commande est des fonctions bash qui proviennent de certains fichiers inclus à partir d'un fichier inclus dans un fichier … inclus dans mon fichier .bash_. Existe-t-il un moyen d'obtenir la définition ou encore mieux l'emplacement de la définition de ces fonctions sans les suivre à travers 5 niveaux d'inclusions?

Pour obtenir la définition de fonction:

type -a function_name 

En supposant que vous avez une fonction nommée foo, les commandes ci-dessous permettront d'obtenir l'emplacement de la définition de la fonction, c'est-à-dire qu'il obtiendra le nom du fichier dans lequel la fonction est définie ainsi que le numéro de ligne à laquelle la fonction est définie dans ce fichier .

 # 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 

Dans mon cas, la sortie de ces commandes est:

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

Pour voir la définition de la fonction (par opposition à son origine), utilisez:

 declare -f <functionname> 

bash -x va décharger ce que bash exécute au démarrage, ce qui devrait vous permettre de le retrouver plus facilement. N'oubliez pas de quitter le shell nouvellement ouvert.

D'une autre manière, je trouve encore plus simple ces derniers temps:

  which <functionname> 

(Cela montrera également s'il s'agit d'un alias ou d'un script, mais ne répertorie pas la source d'un alias)