Shell > Contourner des Exit de sous procédure

Résolu
Zmon -  
Zmon Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -
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
A voir également:

1 réponse

zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
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.

0
Zmon
 
Salut,

Merci pour ta réponse.

Effectivement si ça ne tenait qu'à moi j'aurais remplacé les exit par des return dans le shell CONTROL, malheureusement je ne peux pas toucher aux shells autre que PROGPRINCIPAL.

J'aurais aimé savoir s'il existe une commande qui permet par exemple d'interdire l'exécution des "exit" aux shells fils qui seront lancés (et à leurs fils), ou une solution de ce genre, en ne touchant donc qu'à mon PROGPRINCIPAL.

Et si en plus de cela il existe une solution qui me permet quand même de savoir s'il y a eu une erreur dans les shells fils dans mon PROGPRINCIPAL, ce serait la perfection ! :)
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430 > Zmon
 
Comment est appelé le shell CONTROL depuis ton PROGPRINCIPAL ?
0
Zmon
 
CONTROL est appelé dans SOUSPROG, lui même appelé dans PROGPRINCIPAL

plus précisément, PROGPRINCIPAL lance SOUSPROG, et ce dernier lance à la suite CALCUL1, CONTROL, CALCUL2, CONTROL etc.
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430 > Zmon
 
Euh… ce que je voulais savoir c'est comment il est appelé ;-\

Est-ce que le programme est sourcé (
. CONTROL
) ou simplement appelé (
./CONTROL
) ?
0
Zmon
 
Il est sourcé :
. chemin/CONTROL
0