Gourou Dsecours a écrit :
Bonjour à tous,
Je développe une fonction pour un script shell sous ksh qui doit me renvoyer le nombre d'instances du programme principal en cours de traitement, et s'arrêter si ce nombre est supérieur à 1.
Relativement simple, pensai-je.
Seulement voilà, les résultats que j'obtiens sont différents de ce que je suis en droit d'attendre. Le nombre de processus que j'obtiens en résultat est souvent supérieur ou inférieur.
J'ai probablement dû me tromper quelque part, mais impossible de trouver où est mon erreur !
Même en appelant deux fois mon calcul, je n'ai pas deux fois le même résultat !
Toute aide est la bienvenue !
Mon code :
function NombreDeProcessus
{
PROCESSUS=$1 ;
VAL_1=`ps -eo args | grep -F "${PROCESSUS}" | grep -vF "grep" | wc -l | tr -d [:blank:]`;
VAL_2=$(ps -eo args | grep -F "${PROCESSUS}" | grep -vF "grep" | wc -l | tr -d [:blank:]);
echo "Valeur 1 : '$VAL_1'" ;
echo "Valeur 2 : '$VAL_2'" ;
return $VAL_2;
}
|
Bon, grosse erreur: tu utilises le return comme un retour de valeur or, ce n'est pas fait pour ça. Un return dans une fonction renvoie son état. Bien sûr, ça marche dans ton cas car la valeur ne dépasse probablement pas 255 mais voilà quoi.
Le renvoi d'une valeur par une fonction doit se faire via un affichage. Et l'appelant récupère la valeur avec le mécanisme des backquottes ou du $()
Ex:
Code :
- #!/bin/sh
- carre()
- {
- expr $1 \* $1
- }
- a=$(carre 5)
- echo "le carré de 5 est $a"
|
Sinon je ne vois pas ce qui peut clocher. Sauf que je ne sais pas ce que fait "ps -eo args".
Ptet tu pourrais décomposer les résultats avec des logs. loguer le résultat du ps quoi...
Au fait, c'est quoi $1 dans ta fonction ? Le nom du script passé en paramètre ? Ben tu l'as déjà dans $0 donc c'est pas la peine de le passer...
---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.