48 votes

Trouver la définition d'une fonction bash

Je travaille dans un environnement qui a beaucoup de magie Shell Shell qui traîne. L'une des choses les plus utilisées depuis la ligne de commande sont les fonctions bash qui proviennent d'un fichier quelconque inclus dans un fichier quelconque inclus dans un fichier quelconque ... inclus dans mon .bash_profile. Existe-t-il un moyen d'obtenir la définition ou mieux encore l'emplacement de la définition de ces fonctions sans avoir à les traquer à travers 5 niveaux d'inclusions ?

73voto

Frankie Drake Points 191

En supposant que vous ayez une fonction nommée foo, les commandes ci-dessous obtiendront l'emplacement de la définition de la fonction, c'est-à-dire qu'elles obtiendront le nom du fichier dans lequel la fonction est définie ainsi que le numéro de ligne auquel la fonction est définie à l'intérieur de 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 la suivante :

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

50voto

Damian Powell Points 315

Pour obtenir la définition de la fonction :

type -a function_name

12voto

Joshua Goldberg Points 310

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

declare -f <functionname>

7voto

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

-2voto

Joshua Goldberg Points 310

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

  which <functionname>

(ceci montrera également s'il s'agit d'un alias ou d'un script, mais ne permettra pas de retrouver la source d'un alias)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X