Signaler

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

Posez votre question Zmon - Dernière réponse le 14 sept. 2017 à 14:41 par Zmon
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
Utile
+0
plus moins
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.

Zmon- 8 sept. 2017 à 17:04
Super !

Un grand Merci pour ton aide !! J'espère que ça fonctionnera, je reviendrais mettre un commentaire pour te donner le résultat ;)
Répondre
zipe31 34975Messages postés dimanche 7 novembre 2010Date d'inscription ContributeurStatut 20 septembre 2017 Dernière intervention - 8 sept. 2017 à 17:06
De rien. Bon week-end ;-)
Répondre
Zmon- 8 sept. 2017 à 17:20
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 ?
Répondre
zipe31 34975Messages postés dimanche 7 novembre 2010Date d'inscription ContributeurStatut 20 septembre 2017 Dernière intervention - 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.
Répondre
Zmon 9Messages 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 !
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !