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 :
perso.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."
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 :
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
common.sh :
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
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."
La seule façon de vérifier l'existence d'une fonction a été d'utiliser la commande 'type' (dans la fonction allFunctionAreSet()).
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
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
Partager