Menu

Shell > Contourner des Exit de sous procédure [Résolu]

Zmon - 8 sept. 2017 à 12:23 - Dernière réponse : Zmon 9 Messages postés mercredi 5 juin 2013Date d'inscription 14 septembre 2017 Dernière intervention
- 14 sept. 2017 à 14:41
Bonjour,

Je vais essayer d'expliquer le plus clairement possible ma problématique !

Je suis en train de développer un shell, disons qu'il s'appelle PROGPRINCIPAL.

Dans celui ci, je lance un autre shell : SOUSPROG
Ce dernier lance plusieurs autres shells : CALCUL1, CALCUL2 etc.
et après chacun de ces calculs il lance un shell : CONTROL.

Dans ce dernier shell (CONTROL), s'il y a eu une erreur, on fait un exit :
     if [ $? = 0 ]
then
exit 1
fi


On a donc en résumé une arborescence de ce type :

> PROGPRINCIPAL
>> SOUSPROG
>>> CALCUL1
>>> CONTROL
>>>> if [ $? = 0 ] then exit 1
>>> CALCUL2
>>> CONTROL
>>>> if [ $? = 0 ] then exit 1
etc...


Le problème est le suivant :
J'aimerais, lorsqu'il y a un exit 1, que ça ne me fasse pas quitter toute la chaîne mais que ça me ramène dans le PROGPRINCIPAL (ou dans la chaîne SOUSPROG à la limite, tant que ça ne quitte pas toute la procédure) et pouvoir récupérer l'info disant qu'il y a eu une erreur, pour en définitive lancer un SOUSPROG2.

Donc si je reprend le schéma ci dessus

> PROGPRINCIPAL
>> SOUSPROG
>>> CALCUL1
>>> CONTROL
>>>> if [ $? = 0 ] then exit 1
>>> CALCUL2
>>> CONTROL
>>>> if [ $? = 0 ] then exit 1
etc...
>> S'il y a eu une erreur > SOUSPROG2

Si quelqu'un a une idée pour résoudre mon problème ce serait avec plaisir que je lirais votre réponse !! :)


Si ce n'est pas clair j'essayerais d'être plus précis.

D'avance merci, ne serait ce que pour avoir lu le problème !

Zmon
Afficher la suite 

Votre réponse

14 réponses

zipe31 35643 Messages postés dimanche 7 novembre 2010Date d'inscriptionContributeurStatut 20 juin 2018 Dernière intervention - 8 sept. 2017 à 16:00
0
Merci
Salut,

Normalement la commande
return
en lieu et place de
exit
devrait faire le job ;-)

man bash
pour plus de détails ou :

$ help return
return: return [n]
Termine depuis une fonction du shell.

Entraine l'arrêt d'une fonction ou d'un script sourcé, avec le code de retour spécifié par N.
Si N est omis, le code de retour est celui de la dernière commande exécutée
à l'intérieur de la fonction ou du script

Code de retour :
Renvoie N ou le code d'échec si le shell n'est pas en train d'exécuter une fonction ou un script.

Super !

Un grand Merci pour ton aide !! J'espère que ça fonctionnera, je reviendrais mettre un commentaire pour te donner le résultat ;)
zipe31 35643 Messages postés dimanche 7 novembre 2010Date d'inscriptionContributeurStatut 20 juin 2018 Dernière intervention > Zmon - 8 sept. 2017 à 17:06
De rien. Bon week-end ;-)
Quels sont les grandes différences entre . Proc et ./Proc ?

Si je comprend bien ce qu'il vient de se passer, je dirais que lorsque je lance ./Proc, il ne garde pas les variables précédemment calculées ?
zipe31 35643 Messages postés dimanche 7 novembre 2010Date d'inscriptionContributeurStatut 20 juin 2018 Dernière intervention > Zmon - 8 sept. 2017 à 18:20
Quels sont les grandes différences entre . Proc et ./Proc ?

. Proc
est exécuté dans l'environnement courant (le père) et hérite des variables déjà définies.
./Proc
est exécuté dans un shell fils et n'hérite pas des variables du père, sauf si celles-ci ont été exportées au préalable.
Zmon 9 Messages postés mercredi 5 juin 2013Date d'inscription 14 septembre 2017 Dernière intervention - 14 sept. 2017 à 14:41
J'ai fini par trouver une solution.

Pour info :

J'ai créé une procédure qu'on appellera LANCEUR
qui appelle ./PROGPRINCIPAL

De cette manière s'il y a une erreur dans les SOUSPROG, on revient dans le LANCEUR.

Du coup, dans LANCEUR, après l'appel au PROGPRINCIPAL je peux donc continuer mon code après le retour en erreur.

Encore merci !
Commenter la réponse de zipe31