Tester l'existence d'une fonction
Bonjour,
Je dois factoriser des scripts shell. Chacun possède des particularités.
J'ai dans l'idée de créer un fichier common.sh qui sera charger au démarrage des autres scripts. Ce fichier common.sh appellerait des fonctions définies dans les scripts fils pour les parties non-communes.
Voici un exemple :
common.sh :
Code:
1 2 3 4 5 6 7 8 9 10
| #!/bin/sh
go()
{
before
echo "go"
after
}
echo "Librairie chargee." |
perso.sh :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #!/bin/sh
source lib.sh
before()
{
echo "before"
}
after()
{
echo "after"
}
go |
Ceci fonctionne sans soucis et répond à ma demande. Cepedant, j'aimerais vérifier que les fonction before() et after() soit bien définies. Ce serait la première fonction a être appelé par go(). Voici l'exemple :
common.sh :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| #!/bin/sh
allFunctionAreSet(){
echo "Checking for personal functions..."
if !(type -t before) ; then
echo "before doesn't exist"
fi
if !(type -t myPerso) ; then
echo "myPerso doesn't exist"
# exit 1
fi
echo "Check done."
}
toBeOverriden()
{
# may be overriden
true
}
go()
{
allFunctionAreSet
before
echo "go"
after
toBeOverriden
}
echo "Librairie chargee." |
perso.sh :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #!/bin/sh
source lib.sh
before()
{
export MY_VAR="my var"
echo "before"
}
after()
{
echo "after, MY_VAR=$MY_VAR"
}
toBeOverriden()
{
echo "Override OK"
}
echo "Script perso..."
go |
La seule façon de vérifier l'existence d'une fonction a été d'utiliser la commande 'type' (dans la fonction allFunctionAreSet()).
Je ne trouve pas que ce soit judicieux car type sert à vérifier/récupérer le type d'un élément existant.
N'y aurait-il pas une méthode du genre 'isdeclared myfunction' ou 'isset' ?
merci