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