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 :

Débugger des fonctions de mon script avec echo


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 Débugger des fonctions de mon script avec echo
    Bonjour,

    Je souhaite afficher le resultats d'opérations dans mes fonctions via echo, hors mes fonctions renvoient à la fin une valeur via echo.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    fonction ()
    {
     
    echo $test1
    echo $test2
     
    echo $valeur_retour # la valeur que ma fonction doit me retourner
     
    }

    lorsque je fais ca, ma fonction renvoie en sortie $test1 et non $valeur_retour comme je voudrais, je suis donc pour l'instant obligé d'enlever mes "echo $test" ce qui ne me facilite pas les choses.
    Avez vous une idée?

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    Tu peux retourner tes messages de débogage sur le périphérique d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    fonction ()
    {
     
    echo $test1 >&2
    echo $test2 >&2
     
    echo $valeur_retour # la valeur que ma fonction doit me retourner
     
    }
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Et pourquoi pas écrire les variables dans un fichier de log?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo $test1 > fichierdelog

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par leon1983 Voir le message
    Bonjour,

    Je souhaite afficher le resultats d'opérations dans mes fonctions via echo, hors mes fonctions renvoient à la fin une valeur via echo.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    fonction ()
    {
     
    echo $test1
    echo $test2
     
    echo $valeur_retour # la valeur que ma fonction doit me retourner
     
    }

    lorsque je fais ca, ma fonction renvoie en sortie $test1 et non $valeur_retour comme je voudrais, je suis donc pour l'instant obligé d'enlever mes "echo $test" ce qui ne me facilite pas les choses.
    Avez vous une idée?
    Salut
    je présume que tu "simules" un retour en utilisant un sous-shell style var=$(fonction).

    D'ailleurs si c'est le cas tu te trompes en disant que tu n'obtiens que "$test1". Si tu fais un echo "$var" (en n'oubliant pas les guillemets) tu verras que tu as tous tes echos.

    En compilant les messages de al1_24 et Beginner.j, tu peux te créer carrément ton outil de debug qui n'interfèrera pas avec ton programme ni avec tes fonctions
    Code bash : 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
    #!/bin/sh
     
    # Création d'un nouveau canal relié au debug
    exec 3>/tmp/$(basename $0).debug
     
    fonction ()
    {
        # Debug des valeurs
        echo $test1 1>&3
        echo $test2 1>&3
     
        # Retour de fonction
        echo $valeur_retour
    }
     
    var=$(fonction)
    echo "$var"    # récupère $valeur_retour

    Et ton fichier debug sera créé dans /tmp et aura le nom de ton script avec l'extension ".debug"

    Ensuite tu peux rajouter des niveaux de debug pour améliorer le truc

    Code bash : 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
    #!/bin/sh
     
    # Création d'un nouveau canal relié au debug
    exec 3>/tmp/$(basename $0).debug
     
    # Positionnement du niveau de debug du source
    debugLevel=1
     
    # Fonction de debug
    debug()
    {
        level=$1; shift
        test $level -ge $debugLevel && echo $* 1>&3
    }
     
    fonction ()
    {
        # Debug des valeurs selon la criticité demandée
        debug 1 $test1            # Sera enregistré si le debugLevel est >= 1
        debug 2 $test2            # Sera enregistré si le debugLevel est >= 2
     
        # Retour de fonction
        echo $valeur_retour
    }
     
    var=$(fonction)
    echo "$var"
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    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
    Tu peux aussi utiliser des outils simples d'emploi et robustes comme log4sh.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    LOG4SH_CONFIGURATION=log4sh.properties
    . path/to/log4sh
    fonction ()
    {
     
    logger_debug "${test1}"
    logger_debug "${test2}"
     
    echo "${valeur_retour}" # la valeur que ma fonction doit me retourner
     
    }
    Remarque: si valeur_retour est un status/code de retour, il faut remplacer 'echo' par 'return'

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Remarque: si valeur_retour est un status/code de retour, il faut remplacer 'echo' par 'return'
    Non, je pense qu'il utilise le echo pour pouvoir intégrer la fonction dans un sous-shell en récupérant ce qu'elle affiche comme si c'était une valeur retournée (style var=$(fonction)). Sinon il n'aurait pas eu ses pb avec ses echos parasites.
    De plus, le status est difficilement utilisable comme retour de fonction car
    • il est obligatoirement numérique
    • il est obligatoirement compris entre 0 et 255


    Et donc je vois mal une fonction, par exemple "carre", être définie ainsi
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    carre()
    {
        return $(expr $1 \* $1)
    }
    Car elle ne pourra pas être utilisée pour les valeurs dépassant 16...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    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
    Je suis complètement d'accord avec toi, Sve@r!

    Toutefois, je persiste mais précise et nuance mon propos:
    Remarque: si jamais valeur_retour était destinée à être un status/code de retour (ce qui, a priori, ne semble pas être l'intention de leon1983 ici), alors il faudrait remplacer 'echo' par 'return' et, du coup, tous les problèmes de debug liés aux echo précédents disparaîtraient...

  8. #8
    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
    Merci pour votre aide.
    Je fais des echo "debug" 1 >&2 qui ne parasitent pas ma sortie.

    Donc return ne renvoie que des codes entre 0 et 255.

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

Discussions similaires

  1. Passer des fonctions de mon script local sur une machine distante
    Par leon1983 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 28/01/2013, 11h27
  2. Récupération des fonctions d'un dll avec JNA
    Par tamtam12 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 30/03/2011, 22h04
  3. Peut-on définir des fonctions dans un script ?
    Par nchristedem dans le forum MATLAB
    Réponses: 20
    Dernier message: 11/08/2009, 11h38
  4. Actualisations automatiques des liens dans mon script
    Par Geekolin dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/01/2008, 14h01

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