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 :

Boucle qui teste la valeur de retour d'une fonction et affiche un resultat


Sujet :

Shell et commandes GNU

  1. #1
    Membre actif Avatar de Fango
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 197
    Points : 205
    Points
    205
    Par défaut Boucle qui teste la valeur de retour d'une fonction et affiche un resultat
    Bonjour a tous!

    J'ai un script (qui fonctionne relativement bien ) de demarrage (dans /etc/init.d/). A la fin de ce script, il appelle dans une boucle une fonction (locale au script) qui controle le statut d'une application (si elle est lancee ou non) et affiche un rapport sur la console. Cette boucle s'arrete quand l'appli est lancee, en controlant la valeur de retour de la fonction.

    L'amelioration souhaitee serait d'effacer le rapport precedent a chaque fois qu'un nouveau est affichee (pour plus de clarte).

    J'ai bien sur essaye en rajoutant un appel a "clear" dans la boucle avant l'appel a la fonction de statut, mais cette fonction prend un certain temps (appel asynchrone a priori) et du coup, l'ecran de la console restait noir trop longtemps (le temps d'executer cette fonction) au lieu d'afficher le dernier rapport puis d'effacer quand le nouveau arrive.

    J'ai essaye aussi avec watch au lieu de faire une boucle. Mais comment arreter le watch ?


    J'espere avoir ete clair

    Merci!

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    si tu veux un controle permanant d'evenement sur un log ou autre il faut le lancer dans l'inittab et pa comme un script de demarrage (bien sur en mode respawn) sans modifier le script originel sauf lui ajouter une ligne comme par exemple :
    pour que ca check que toutes les 10secondes afin de ne pas saturer les ressources.

  3. #3
    Membre actif Avatar de Fango
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 197
    Points : 205
    Points
    205
    Par défaut
    Merci de ta reponse. J'ai deja une instruction "sleep" dans ma boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while ([ ${run_status} -eq 0 ]) 
    do
    my_fonction_check_status
    sleep 6
    done
    Le fait que ce soit un script de demarrage est independant. L'appel est justement la pour controler l'etat d'avancement (l'appli est assez grosse et demande bien environ 15 minutes pour demarrer, et passe par des etats intermediaires du style noir-marron-jaune-vert selon l'avancement). Le probleme (qui, je te l'accorde, n'est pas d'une importance capitale, mais je ne vois pas comment y arriver et je suis curieux) vient vraiment de l'affichage de ces etats.
    Pour le moment, cette solution (la meme que tu m'as propose) fonctionne tres bien. C'est juste que les precedents etats sont toujours affiches et visibles.
    J'espere avoir ete plus clair... encore merci de ton aide en tout cas.

    PS : c'est quoi le mode respawn ? Ok, je file sur mon ami google

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    en utilisant les caractere de cariage return et de non changer de ligne de la fonction echo du shell, un exemple a lancer DEPUIS UN SCRIPT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    echo -e "bonjour\c"
    sleep 2
    echo -e "\r en cours\c"
    sleep 2
    echo -e "\r ok fin du lancement"
    il n'y a pas de changement de ligne a chaque affichage mais recopie sur la ligne courante.

  5. #5
    Membre actif Avatar de Fango
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 197
    Points : 205
    Points
    205
    Par défaut
    Merci pour cette solution, c'est super! Le seul probleme, c'est que cela suppose que le resultat tienne sur une ligne non?

  6. #6
    Membre actif Avatar de Fango
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 197
    Points : 205
    Points
    205
    Par défaut
    Comment faire donc quand le resultat a afficher comprend plusieurs lignes ?

    (je dois ecraser plusieurs lignes du coup, pas seulement la ligne courante...)

Discussions similaires

  1. Récupérer la valeur de retour d'une fonction JS
    Par gobgob dans le forum Bibliothèques et frameworks
    Réponses: 12
    Dernier message: 17/02/2009, 18h22
  2. Problème avec valeur de retour d'une fonction
    Par ouranos21 dans le forum SQL Procédural
    Réponses: 11
    Dernier message: 20/01/2009, 08h52
  3. Réponses: 4
    Dernier message: 19/01/2009, 11h12
  4. Réponses: 5
    Dernier message: 14/06/2008, 13h30
  5. Réponses: 5
    Dernier message: 18/09/2006, 14h17

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