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

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

Marsh Posté le 22-05-2020 à 07:38:02    

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.
Reply

Marsh Posté le 22-05-2020 à 07:38:02   

Reply

Marsh Posté le 22-05-2020 à 08:11:31    

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 !
Reply

Marsh Posté le 22-05-2020 à 08:51:09    

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.
Reply

Marsh Posté le 22-05-2020 à 10:02:52    

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 !
Reply

Marsh Posté le 22-05-2020 à 16:40:47    

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

Reply

Marsh Posté le 22-05-2020 à 18:15:29    

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.
Reply

Marsh Posté le 22-05-2020 à 18:16:06    

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.
Reply

Marsh Posté le 22-05-2020 à 20:01:39    

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.
Reply

Marsh Posté le 29-05-2020 à 02:59:02    

On peut pas exporter une variable ?

Reply

Marsh Posté le 01-06-2020 à 02:55:41    

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.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed