Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/05/2007, 13h49   #1
Membre actif
 
Avatar de Blo0d4x3
 
Inscription : octobre 2003
Messages : 456
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 456
Points : 152
Points : 152
Envoyer un message via AIM à Blo0d4x3 Envoyer un message via MSN à Blo0d4x3
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 :
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 :
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.
Blo0d4x3 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2007, 13h58   #2
Membre régulier
 
Inscription : juillet 2002
Messages : 150
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 150
Points : 83
Points : 83
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 :
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 :
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
__________________
Demain n'est plus à attendre mais à inventer !!!
turbo_chess est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2007, 19h16   #3
Membre actif
 
Avatar de Blo0d4x3
 
Inscription : octobre 2003
Messages : 456
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 456
Points : 152
Points : 152
Envoyer un message via AIM à Blo0d4x3 Envoyer un message via MSN à Blo0d4x3
J'ai fais:

Code :
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 :
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:
Blo0d4x3 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2007, 16h10   #4
Rédacteur
 
Inscription : mars 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 298
Points : 1 450
Points : 1 450
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 :
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
__________________
Marc
Slackware for ever ......
BASH - KSH ( http://marcg.developpez.com/ksh/ )
MarcG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2007, 21h00   #5
Membre actif
 
Avatar de Blo0d4x3
 
Inscription : octobre 2003
Messages : 456
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 456
Points : 152
Points : 152
Envoyer un message via AIM à Blo0d4x3 Envoyer un message via MSN à Blo0d4x3
La n'est pas le probleme. RESULT est utilisé uniquement dans ma fonction lsmemMax().

Voila le code complet de la fonction:


Code :
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
}
Blo0d4x3 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2007, 14h09   #6
Rédacteur
 
Inscription : mars 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 298
Points : 1 450
Points : 1 450
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 :
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 , !
__________________
Marc
Slackware for ever ......
BASH - KSH ( http://marcg.developpez.com/ksh/ )
MarcG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2007, 22h27   #7
Membre actif
 
Avatar de Blo0d4x3
 
Inscription : octobre 2003
Messages : 456
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 456
Points : 152
Points : 152
Envoyer un message via AIM à Blo0d4x3 Envoyer un message via MSN à Blo0d4x3
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 :
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.
Blo0d4x3 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h45.


 
 
 
 
Partenaires

Hébergement Web