web-dev-qa-db-fra.com

Bash peut-il afficher la définition d'une fonction?

Existe-t-il un moyen de visualiser une définition de la fonction bash dans bash?

Par exemple, disons que j'ai défini la fonction foobar

function foobar {
    echo "I'm foobar"
}

Existe-t-il un moyen de récupérer plus tard le code que foobar exécute?

$ # non-working pseudocode
$ echo $foobar
echo "I'm foobar"
234
k107

Utilisez type. Si foobar est par exemple défini dans votre ~/.profile:

$ type foobar
foobar is a function
foobar {
    echo "I'm foobar"
}

Cela permet de savoir ce que foobar était, et si elle était définie en tant que fonction, elle appelle declare -f comme expliqué par pmohandras.

Pour n’imprimer que le corps de la fonction (c’est-à-dire le code), utilisez sed:

type foobar | sed '1,3d;$d'
315
Benjamin Bannier

Vous pouvez afficher la définition d'une fonction dans bash en utilisant declare. Par exemple:

declare -f foobar
178
pmohandas
set | grep -A999 '^foobar ()' | grep -m1 -B999 '^}'

avec foobar étant le nom de la fonction.

6
pyroscope
set | sed -n '/^foobar ()/,/^}/p'

En gros, cela affiche les lignes de votre commande set en commençant par le nom de la fonction foobar () et en finissant par}

4