265 votes

Comment lister les fonctions définies dans mon shell ?

Je peux taper alias pour afficher une liste de tous les alias.

Mais pour les fonctions, tout ce que je peux faire c'est grep mon .bash_profile .

Cela ne récupère que ceux qui se trouvent dans ce fichier, et non ceux qui sont définis dans des fichiers subsidiaires ou dynamiquement.

Existe-t-il un moyen plus pratique de savoir quelles fonctions sont actuellement définies ?

4 votes

@AlastairIrvine Merci pour la nomination du doublon ; cependant, je l'ai résolu dans l'autre sens. Cette question a beaucoup plus de vues et de votes positifs, ainsi qu'une sélection plus large de réponses ; et la réponse acceptée sur votre doublon nommé est décidément obscure et sans doute simplement fausse.

323voto

Paul Points 18124

declare -F

Les noms et les définitions des fonctions peuvent être listés avec la fonction -f à l'option declare (voir les commandes intégrées de Bash). Le site -F option pour declare ne listera que les noms des fonctions (et optionnellement le fichier source et le numéro de ligne).

Manuel de référence Bash

3 votes

Dans GNU bash 4.3.46(1)-release (x86_64-pc-linux-gnu) -F liste les noms / -f liste la fonction entière

5 votes

Pour obtenir le fichier source "optionnel" / ligne#, il semble que vous devez activer extdebug ( shopt -s extdebug ) ET fournir un ou plusieurs noms de fonctions à la fonction declare -F commande. C'EST-À-DIRE, declare -F fait no fournit les noms de fichiers/lignes même lorsque extdebug est activé, ce qui n'est pas clair dans la documentation et n'est pas particulièrement intuitif, IMO.

0 votes

Voir la réponse de @user495470 ci-dessous pour une meilleure solution.

96voto

Randall Bohn Points 1134

En supposant que le shell bash :

typeset -f

énumère les fonctions.

typeset -F

ne listera que les noms des fonctions.

9 votes

Mon bash v4.1.17(9)-release dit : Obsolete. See `help declare'.

5 votes

C'est quand même bien de savoir que c'est un synonyme.

71voto

declare -F

vous donnera les noms de toutes les fonctions

type function_name

vous donnera la source d'une fonction particulière

3 votes

Ou utilisez simplement declare -f (minuscule) pour la source

0 votes

+1 pour type car cela fonctionne également pour les alias (sans que vous ayez besoin de savoir si votre commande est l'une ou l'autre).

63voto

Lri Points 8342

declare -F imprime en fait les commandes de déclaration et pas seulement les noms de fonctions :

$ declare -F
declare -f function1
declare -f function2

Vous pouvez utiliser compgen -A function pour imprimer uniquement les noms de fonctions :

$ compgen -A function
function1
function2

34voto

Robert Points 91

Composition est obsolète, veuillez utiliser :

declare -f

ou

declare -f function_name

ou

type function_name

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X