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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
#!/bin/sh
 
go()
{
        before
        echo "go"
        after
}
 
echo "Librairie chargee."
perso.sh :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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