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 :

Faire un exit 1 depuis une fonction exécutée au sein d'un script


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 158
    Par défaut Faire un exit 1 depuis une fonction exécutée au sein d'un script
    Bonjour les amis.

    Je rencontre le problème suivant.

    J'ai une fonction qui prend un paramètre en entrée et renvoie une valeur.
    Si le paramètre en entrée n'est pas correct je fais un echo d'un message d'erreur puis un exit 1.
    Ma fonction est appelée comme ceci dans mon script:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VARIABLE=$(fonction $PARAMETRE)

    en testant je constate que lorsque je mets un mauvais paramètre, mon script n'exit pas car il est appelé via $().
    Lorsque je positionne dans mon script, celui ci exit bien mais le message d'erreur n'est pas affiché

    une idée?

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/bash
     
    f() { test "$1" = "foo" || { echo "$1: mauvais paramètre"; return 1;};}
    var=$(f bar) || { echo "$var"; exit 1;} 
    echo "la suite du script"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ./monScript
    bar: mauvais paramètre
    ...
    ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Ben oui
    C'est l'une des ([troll]nombreuses?[/troll]) faiblesses des langages de script (sh ksh bash...): il n'existe pas de "véritable" appel fonctionnel SANS création d'un sous-process, ni de structure genre 'try catch'

    Du coup, c'est la galère pour faire une fonction qui peut sortir ET retourner un résultat sur la stdout.
    C'est la galère pour faire une fonction qui voudrait affecter une variable globale (comme IS_INITIALIZED) ET retourner un résultat sur la stdout.
    etc.

    Du coup, comme nous voulions privilégier la fonctionnalité "sortie en cas de problème", nous avons choisi de ne PAS utiliser la stdout et sa récupération par '$()', mais d'utiliser une ou des variables de sortie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function toto {
      if pb then message; exit 1; fi
      IS_INITIALIZED=true
      THE_RETURN_VALUE=valeur_calculee_par_toto
    }
    toto args # Si pb, on est déjà sorti...
    resultat_de_toto=${THE_RETURN_VALUE}
    ...
    if [[ ${IS_INITIALIZED} = true ]] ; then ... ; fi
    C'est pas complètement satisfaisant, mais ça marche!

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 158
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/bash
     
    f() { test "$1" = "foo" || { echo "$1: mauvais paramètre"; return 1;};}
    var=$(f bar) || { echo "$var"; exit 1;} 
    echo "la suite du script"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ./monScript
    bar: mauvais paramètre
    ...
    ?
    ca marche nickel merci
    ah le bash et toutes ses subltilités ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/02/2007, 06h30
  2. Réponses: 2
    Dernier message: 13/12/2006, 11h37
  3. [AS2] Atteindre attribut d'une classe depuis une fonction interne a la classe
    Par Demco dans le forum ActionScript 1 & ActionScript 2
    Réponses: 6
    Dernier message: 18/04/2006, 21h03
  4. Retourner un tableau depuis une fonction
    Par obalais dans le forum C++
    Réponses: 2
    Dernier message: 20/10/2005, 16h49
  5. Ecrire dans un tableau html depuis une fonction js ?
    Par botanica dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/10/2005, 12h48

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