A partir de la Manuel de référence Bash :
NOM DE FONCTION
Variable de type tableau contenant les noms de toutes les fonctions de l'interpréteur de commandes se trouvant actuellement dans la pile d'appels de l'exécution. L'élément d'index 0 est le nom de toute fonction shell en cours d'exécution. L'élément le plus bas (celui qui a l'indice le plus élevé) est "main". Cette variable n'existe que lorsqu'une fonction shell est en cours d'exécution. Les affectations à FUNCNAME n'ont aucun effet et renvoient un statut d'erreur. Si FUNCNAME est désactivée, elle perd ses propriétés spéciales, même si elle est réinitialisée par la suite.
Cette variable peut être utilisée avec BASH_LINENO et BASH_SOURCE. À chaque élément de FUNCNAME correspondent des éléments dans BASH_LINENO et BASH_SOURCE pour décrire la pile d'appels. Par exemple, ${FUNCNAME[$i]} a été appelé à partir du fichier ${BASH_SOURCE[$i+1]} à la ligne ${BASH_LINENO[$i]}. Le builtin caller affiche la pile d'appels en cours à l'aide de ces informations.
Lorsque les tableaux bash sont accédés sans index, le premier élément du tableau est retourné, ainsi $FUNCNAME
fonctionne dans les cas simples pour fournir le nom de la fonction en cours, mais elle contient également toutes les autres fonctions de la pile d'appels. Par exemple :
# in a file "foobar"
function foo {
echo foo
echo "In function $FUNCNAME: FUNCNAME=${FUNCNAME[*]}" >&2
}
function foobar {
echo "$(foo)bar"
echo "In function $FUNCNAME: FUNCNAME=${FUNCNAME[*]}" >&2
}
foobar
Sortie de secours :
$ bash foobar
In function foo: FUNCNAME=foo foobar main
foobar
In function foobar: FUNCNAME=foobar main
2 votes
En rapport : Cadre de journalisation Bash qui utilise
FUNCNAME
et d'autres variables Bash : github.com/codeforester/base/blob/master/lib/stdlib.sh . Voir les fonctionslog_debug_enter
ylog_debug_leave
en particulier.1 votes
Quelque chose pour un shell posix pur ?
0 votes
@Itération122442 : il semblerait qu'en dash on puisse utiliser
$_
mais je ne pense pas que cela soit standardisé dans POSIX.