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 :

Récupérer une variable exécuter dans un while


Sujet :

Shell et commandes GNU

  1. #1
    Membre actif
    Avatar de Blo0d4x3
    Inscrit en
    Octobre 2003
    Messages
    583
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 583
    Points : 265
    Points
    265
    Par défaut Récupérer une variable exécuter dans un while
    Bonjour,

    Je cherche comment récupéré le contenue dans une variable modifier dans un while, car ce while est exécuter dans un thread, du code vaut mieux que des explications:

    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
     
    RESULT=0
     
    LSTPROC=$(/bin/ps -e -o rss | \
                egrep -v RSS )
     
        printf "${LSTPROC}" | while read RSS
        do
     
          RESULT=$(echo "$RESULT+$RSS" | bc -l)
          printf "rss: $RSS\n"
          printf "RESULT: $RESULT\n"
     
        done
     
        printf "Mémoire RSS total utilisée: $RESULT\n"
    Le problème c'est la variable RESULT, elle est modifier dans le while, qui doit être éxécuter dans un thread, car je vois bien le calcul s'afficher avec printf "RESULT: $RESULT\n",
    Et après le printf suivant le done m'affiche 0.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    RESULT: 685044
    rss: 3580
    RESULT: 688624
    rss: 752
    RESULT: 689376
    Mémoire RSS total utilisée: 0
    Le but du script est d'afficher la mémoire consommer par tous les process.
    Donc comment récupérer le contenu de RESULT or du while?

    Merci.

  2. #2
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 168
    Points : 110
    Points
    110
    Par défaut
    Citation Envoyé par Blo0d4x3
    Bonjour,

    Je cherche comment récupéré le contenue dans une variable modifier dans un while, car ce while est exécuter dans un thread, du code vaut mieux que des explications:

    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
     
    RESULT=0
     
    LSTPROC=$(/bin/ps -e -o rss | \
                egrep -v RSS )
     
        printf "${LSTPROC}" | while read RSS
        do
     
          RESULT=$(echo "$RESULT+$RSS" | bc -l)
          printf "rss: $RSS\n"
          printf "RESULT: $RESULT\n"
     
        done
     
        printf "Mémoire RSS total utilisée: $RESULT\n"
    Le problème c'est la variable RESULT, elle est modifier dans le while, qui doit être éxécuter dans un thread, car je vois bien le calcul s'afficher avec printf "RESULT: $RESULT\n",
    Et après le printf suivant le done m'affiche 0.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    RESULT: 685044
    rss: 3580
    RESULT: 688624
    rss: 752
    RESULT: 689376
    Mémoire RSS total utilisée: 0
    Le but du script est d'afficher la mémoire consommer par tous les process.
    Donc comment récupérer le contenu de RESULT or du while?

    Merci.
    au début set RESULT=0

  3. #3
    Membre actif
    Avatar de Blo0d4x3
    Inscrit en
    Octobre 2003
    Messages
    583
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 583
    Points : 265
    Points
    265
    Par défaut
    J'ai fais:

    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
     
     
    function lsmemMax()
    {
     
    set RESULT=0
     
      if [ -x /bin/ps ]
      then
     
        LSTPROC=$(/bin/ps -e -o rss | \
                egrep -v RSS )
     
        printf "${LSTPROC}" | while read RSS
        do
     
          RESULT=$(echo "$RESULT+$RSS" | bc -l)
    ....
    Et lorsque j'execute:

    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
     
    (standard_in) 1: parse error
    rss: 14340
    RESULT:
    (standard_in) 1: parse error
    rss: 7784
    RESULT:
    (standard_in) 1: parse error
    rss: 3908
    RESULT:
    (standard_in) 1: parse error
    rss: 3580
    RESULT:
    (standard_in) 1: parse error
    rss: 752
    RESULT:
    Mémoire RSS total utilisée:

  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
    ton code n'est pas le même dans tes 2 posts :
    1 fois RESULT est affecté dans une fonction, l'autre pas .

    si tu desire affecter RESULT dans une fonction et l'afficher dans le corps du script, il faut que RESULT "existe" avant la fonction donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    RESULT=0 # "declaration" ou integer RESULT=0 pour les puristes (en bash)
    function machin
    {
     ((  RESULT = RESULT + RSS )) # plus simple non ?
    }
    printf "Mémoire RSS total utilisée: $RESULT\n" # la sa fonctionne

  5. #5
    Membre actif
    Avatar de Blo0d4x3
    Inscrit en
    Octobre 2003
    Messages
    583
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 583
    Points : 265
    Points
    265
    Par défaut
    La n'est pas le probleme. RESULT est utilisé uniquement dans ma fonction lsmemMax().

    Voila le code complet de la fonction:


    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
     
    function lsmemMax()
    {
      set RESULT=0
     
      if [ -x /bin/ps ]
      then
     
        LSTPROC=$(/bin/ps -e -o rss | \
                egrep -v RSS )
     
        printf "${LSTPROC}" | while read RSS
        do
     
          RESULT=$(echo "$RESULT+$RSS" | bc -l)
          printf "rss: $RSS\n"
          printf "RESULT: $RESULT\n"
     
        done
     
        printf "Mémoire RSS total utilisée: $RESULT\n"
     
      else
     
        printf "Commande /bin/ps introuvable.\n"
     
      fi
    }

  6. #6
    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
    Alors j ai pas d'explication mais en bash sa ne fonctionne pas alors que en ksh oui
    ajoute #/bin/ksh en premier ligne du script ..... mais je n'ai pas d'explication, bizar, vous avez dit bizar ?


    encore plus bisar :
    si je fait :
    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
    RESULT=0
    #LSTPROC=$(/bin/ps -e -o rss| egrep -v RSS )
    #    printf "${LSTPROC}" | while read RSS
         for RSS in $(/bin/ps -e -o rss| egrep -v RSS )
        do
          RESULT=$(echo "$RESULT+$RSS" | bc -l)
          printf "rss: $RSS\n"
          printf "RESULT: $RESULT\n"
     
        done
     
        printf "Mémoire RSS total utilisée: $RESULT\n"
    cela fonctionne ...... pas avec le while , !

  7. #7
    Membre actif
    Avatar de Blo0d4x3
    Inscrit en
    Octobre 2003
    Messages
    583
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 583
    Points : 265
    Points
    265
    Par défaut
    J'ai juste changer le shebang en #!/usr/bin/ksh, ca ne marche pas chez moi. Même résultat qu'en bash.

    Pas vraiment le temps de faire des tests ce soir, je verrais plus demain.

    [edit]

    J'ai trouver pour avec ksh ca ne fonctionnais pas chez moi. Parceque au tous debut du script je met une entête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ###########################################################################
    #                                                                         #
    #    Description: blablabla       #
    #               Créé le: blabla                             #
    #               Dernière mise à jour le: xx/xx/xx par xx                  #
    #                                                                         #
    ###########################################################################
     
    #!/usr/sbin/ksh
    Dans ce style, et seulement ensuite mon shebang, le ksh a pas l'air d'aimer, bien qu'il n'affiche aucune erreur, juste que le calcul dans le while s'execute comme dans le bash.
    Vraiment étrange .

    Et mettre le shebang avant l'entête en bash ne change rien.

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/06/2009, 10h54
  2. [Smarty] Récupérer une variable passée dans la barre d'adresse ?
    Par debie1108 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 25/04/2007, 02h35
  3. [PHP-JS] Récupérer une variable php dans un fichier javascript
    Par zoom61 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 03/11/2006, 11h00
  4. récupérer une variable php dans un vbscript
    Par el_butcho dans le forum VBScript
    Réponses: 3
    Dernier message: 14/09/2006, 11h39
  5. récupérer une variable javascript dans une variable java
    Par tx dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/07/2006, 17h55

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