IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Tester l'existence d'une fonction


Sujet :

Shell et commandes GNU

  1. #1
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut 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 : 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

  2. #2
    Membre averti
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Points : 328
    Points
    328
    Par défaut
    Bonjour,

    Peut-être que tu devrais t'orienter vers l'utilisation du FPATH, au moins ce n'est pas toi qui te charge du chargement des fonctions.

    Lilian.

  3. #3
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    Bonjour,

    Non ce n'est pas ce que je veux.

    Le problème n'est pas le chargement de fonctions mais de vérifier l'existence d'une fonction.


    Merci

  4. #4
    Membre averti
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Points : 328
    Points
    328
    Par défaut
    Effectivement, mais avec FPATH y'a qd même un plus

    Une fonction chargee
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $ type dum
    dum is a function
    $
    Une fonction existante, non chargée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $ type xgz
    xgz is an undefined function
    $
    Une fonction qui n'existe pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $ type ma_fonction
    ma_fonction not found
    $
    Je pense donc que ca répond précisément à ton besoin.

    Lilian.

Discussions similaires

  1. [2008] Tester l'existence d'une fonction en Transact SQL
    Par bza88 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 20/11/2014, 17h09
  2. Fonction pour tester l'existence d'une page
    Par erwmat dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/09/2007, 00h06
  3. Tester l'existence d'une fonction
    Par alen dans le forum MFC
    Réponses: 2
    Dernier message: 28/03/2007, 10h33
  4. Fonction pour tester l'existence d'une image
    Par nais_ dans le forum Langage
    Réponses: 4
    Dernier message: 10/09/2006, 11h38
  5. Fonction pour tester l'existence d'une image
    Par nais_ dans le forum Langage
    Réponses: 4
    Dernier message: 10/09/2006, 11h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo