Script réentrant en shell

boiteasel Messages postés 14 Statut Membre -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je suis actuellement bloquée sur un problème de non-réentrance d'une script shell. En effet j'ai un script lambda.sh qui doit être appelé par deux autres scripts en shell qui s'exécutent en parallèle. Il se trouve que le script lambda.sh n'est pourtant exécuté que une seule fois ...
J'ai fait de nombreuses recherches sur le net pour trouver mais je ne vois vraiment pas comment faire ...

Est-ce qe quelqu'un aurait une idée sur ce problème ?
merci d'avance

11 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    hello
    peut-on voir les scripts, il ne devrait pas y avoir de problèmes, chaque script étant exécuté dans une tâche
    0
  2. boiteasel Messages postés 14 Statut Membre
     
    je ne peux pas montrer les scripts mais apr contre je peux dire que le script qui ne veut pas se réexcuter plusieurs fois contient notamment un EXPORT et aussi un EXEC ...
    donc au final c'est deux fois le même processus qui doit être appelé
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Salut,

      je ne peux pas montrer les scripts
      Ben dans ce cas reproduis-en les bribes essentielles et colles nous ça au moins, parce que sans boules de cristal à portée de mains ça va être difficile d'y voir clair ;-(
      0
  3. boiteasel Messages postés 14 Statut Membre
     
    les deux scripts qui lancent sont similaires et font en gros :

    une boucle infinie
    dans cette boucle ils font :
    ./lambda.sh

    + divers affichages

    le script lambda.sh se contente de déclarer un nouveau chemin de rep dans la variable PATH
    et de lancer une autre commande à l'aide d'un exec ( ce lancement n'a lieu que dans le cas où les bons paramètres sont passés aux scripts précédents ) C'est ce dernier script qui n'est pas réentrant
    0
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    tu exécutes ?
    ./lambda.sh
    ou
    . ./lambda.sh
    dans le premier cas, les variables modifiées par lambda.sh ne seront pas disponibles dans la suite du script
    0
    1. boiteasel Messages postés 14 Statut Membre
       
      euh , je ne comprends pas trop ta réponse :

      . ./lambda.sh ?? je ne connais même pas cette façon de faire ... peux tu m'éclairer ?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    Si on ne veut pas lancer un nouveau Shell mais exécuter le script dans le Shell actif, on le source:

    source script_name.sh
    source = .

    L'intégrée Bash source est un synonyme de la commande Bourne shell . (dot).

    Le script n'a pas besoin de permission d'exécution dans ce cas. Les commandes sont exécutées dans l'environnement du Shell actif, par conséquent tout changement restera tel quel quand le script aura terminé:

    http://www.traduc.org/~gleu/ykerb/ch02.html#sect_02_01_03
    0
    1. boiteasel Messages postés 14 Statut Membre
       
      merci pour cette explication
      0
  7. boiteasel Messages postés 14 Statut Membre
     
    mais bon tout ceux-ci ne m'aide pas ... je ne vois toujours pas comment rendre mon script réentrant... si quelqu'un avait une illumination ... merci
    0
  8. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    Je ne pense pas qu'un script puisse être réentrant comme du code. Un script peut être exécuté autant de fois en parallèle, chaque exécution est une tâche séparée avec son propre environnement. Par contre, il peut y avoir un problème, si par exemple, on crée des fichiers:
    echo "- démarrré à $(date)" > log
    log sera celui du dernier script démarré, il faudrait le singulariser, avec par ex. le PID
    echo "- démarrré à $(date)" > log$$

    Explique ce que tu veux faire.
    0
  9. boiteasel Messages postés 14 Statut Membre
     
    les deux scripts qui lancent le script lambda.sh pour se finir font un wait sur le pid du processus fils qui ont lancés ( lambda.sh) peut être que le problème vient de là ??
    0
  10. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    en principe non, parce que chaque lambda.sh lancé en background a un unique PID
    0
  11. boiteasel Messages postés 14 Statut Membre
     
    pour récupérer le pid du processus lancé en arriére plan on utilise : $! or cela normalement récupère le pid du dernier processus lancé en arrière plan je me demande si c'est pas ça qui pose le problème tout de même ....
    0
  12. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    il faut le récupérer immédiatement
    ./lambda.sh &
    PID=$!
    0