Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1556 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [KSH-88] récupérer le code retour d'un sous-shell

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[KSH-88] récupérer le code retour d'un sous-shell

n°2354179
spark
Luc ?
Posté le 22-05-2020 à 07:38:02  profilanswer
 

Hello !
 
Je souhaiterais récupérer le code retour d'une fonction que j’appellerais de la façon suivante :
 
 

Code :
  1. toto=`ma_fonction "arg1" "arg2" "arg3"`
  2. echo $?


 
=> forcément, ca retourne 0, vu que c'est le résultat de l'affectation du sous-shell à la variable "toto"
 
J'ai donc tenté de feinter...
 

Code :
  1. export CR
  2. function ma_fonction
  3. {
  4.   blablabla
  5.   CR=$?
  6. }
  7. toto=`ma_fonction "arg1" "arg2" "arg3"`
  8. echo $CR
  9. => ''


 
=> ça ne fonctionne pas...
 
Si quelqu'un a une idée.... Je rappelle que c'est pour du KSH-88 (no comment)


---------------
Un cycle complet sera une série de 100.
mood
Publicité
Posté le 22-05-2020 à 07:38:02  profilanswer
 

n°2354182
Farian
Posté le 22-05-2020 à 08:11:31  profilanswer
 

spark a écrit :

Hello !
 
Je souhaiterais récupérer le code retour d'une fonction que j’appellerais de la façon suivante :
 
 

Code :
  1. toto=`ma_fonction "arg1" "arg2" "arg3"`
  2. echo $?


 
=> forcément, ca retourne 0, vu que c'est le résultat de l'affectation du sous-shell à la variable "toto"
 
J'ai donc tenté de feinter...
 

Code :
  1. export CR
  2. function ma_fonction
  3. {
  4.   blablabla
  5.   CR=$?
  6. }
  7. toto=`ma_fonction "arg1" "arg2" "arg3"`
  8. echo $CR
  9. => ''


 
=> ça ne fonctionne pas...
 
Si quelqu'un a une idée.... Je rappelle que c'est pour du KSH-88 (no comment)


 
Bonjour !
 
De mémoire, dans une fonction, on a "return", qui permet de renvoyer une valeur entière (celle testée par $?), mais il faut appeler la fonction, pas utiliser le `` (je ne savais pas que ça marchait avec des fonctions), qui prend la sortie standard de la commande.
 
J'espère avoir été clair et que cela vous aidera.
 
Bonne continuation !
 


---------------
On n'est jamais très fort pour ce calcul !
n°2354185
spark
Luc ?
Posté le 22-05-2020 à 08:51:09  profilanswer
 

Farian a écrit :


 
Bonjour !
 
De mémoire, dans une fonction, on a "return", qui permet de renvoyer une valeur entière (celle testée par $?), mais il faut appeler la fonction, pas utiliser le `` (je ne savais pas que ça marchait avec des fonctions), qui prend la sortie standard de la commande.
 
J'espère avoir été clair et que cela vous aidera.
 
Bonne continuation !
 


C'est justement bien le problème :)
dans  

Code :
  1. function ma_fonction
  2. {
  3. ...
  4. ...
  5. CR=valeur_qu'on_veut    # alors qu'elle est en export en dehors de la fonction, la valeur de 'CR' ne change pas...  :(
  6. ^
  7. return $CR
  8. }


 
la fonction retourne bien un code d'erreur suivant les cas. Seulement quand c'est appelé via un sous-shell ``, ça n'a pas d'effet


---------------
Un cycle complet sera une série de 100.
n°2354191
Farian
Posté le 22-05-2020 à 10:02:52  profilanswer
 

C'est normal : quand on crée un sous-shell, cela crée un nouveau processus, qui a sa propre copie de l'environnement, et il ne peut pas influer sur l'environnement du père. Impossible de récupérer la valeur de la variable CR après l'appel.


---------------
On n'est jamais très fort pour ce calcul !
n°2354226
rat de com​bat
attention rongeur méchant!
Posté le 22-05-2020 à 16:40:47  profilanswer
 

et en passant par un named pipe ou un fichier temporaire? C'est HB (peut-être) mais ça devrait marcher non?

n°2354229
spark
Luc ?
Posté le 22-05-2020 à 18:15:29  profilanswer
 

J'y ai effectivement pensé au fichier, mais si je dois faire ça pour chaque fonction :D
 
Le named pipe, je connais pas, (enfin juste le nom), tu peux m'en dire plus ? :)


---------------
Un cycle complet sera une série de 100.
n°2354230
spark
Luc ?
Posté le 22-05-2020 à 18:16:06  profilanswer
 

et surtout, pkoi la modification de la variable du script appelant qui est en export n'est pas modifiée dans la fonction ?


---------------
Un cycle complet sera une série de 100.
n°2354250
spark
Luc ?
Posté le 22-05-2020 à 20:01:39  profilanswer
 

C'est bon, j'ai trouvé un "workaround" :o
 
 

Code :
  1. function ma_fonction
  2. {
  3.   blablabla
  4.   blablabla
  5.   CR=xx
  6.  
  7.   return $CR
  8. }
  9. toto=`ma_fonction "arg1" "arg2" "arg3"`
  10. echo $?


 
=> marche pas. normal...
 

Code :
  1. function ma_fonction
  2. {
  3.   blablabla
  4.   blablabla
  5.   CR=xx
  6.  
  7.   return $CR
  8. }
  9. toto=`ma_fonction "arg1" "arg2" "arg3"; return $?`
  10. echo $?


 
=> fonctionne :o
 
Pas besoin de pipe ou de passer par un fichier.  
 
Bon, c'est pas "très propre", mais si on veut le code retour de ma_fonction, il suffit de rajouter

; return $?

dans l'appel du sous-shell.
 
 
Après si quelqu'un a une autre idée, je suis preneur ! :)


Message édité par spark le 22-05-2020 à 20:02:21

---------------
Un cycle complet sera une série de 100.
n°2354666
Profil sup​primé
Posté le 29-05-2020 à 02:59:02  answer
 

On peut pas exporter une variable ?

n°2354818
spark
Luc ?
Posté le 01-06-2020 à 02:55:41  profilanswer
 

ben visiblement ça ne fonctionne pas... pas en ksh en tout cas...
 
j'y ai pas retouché depuis, faudrait que je teste, mais je pense que ca sera un fail, j'avais déjà passé par mal de temps sur ce truc...


---------------
Un cycle complet sera une série de 100.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [KSH-88] récupérer le code retour d'un sous-shell

 

Sujets relatifs
Récupérer date de déplacement d'un fichierRécupérer 2 élément à part dans des variable à partir d'un liste.
Récupérer résultat d'une réquête dans un tableau en shell (ksh)[Python] Utilisation d'un code existant
Récupérer la valeur texte d'un site.CSS: récupérer la position courante d'une animation pour l'inverser ?
[FullCalendar] - Récupérer l'attribut className d'un élément mis en bg[xmlbean] Générer du code à partir d'une arborescence de schémas xsd
PHPMailer retour en cas d'erreur de réception 
Plus de sujets relatifs à : [KSH-88] récupérer le code retour d'un sous-shell


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR