TCL : fichier de configuration en shell

bijnok Messages postés 87 Statut Membre -  
bijnok Messages postés 87 Statut Membre -
Bonjour,

j'ai un script tcl qui utilise un fichier de configuration codé en Shell pour se connecter à mysql. Les paramètres de connexion sont dans le fichier de configuration.
Mon problème est que je n'arrive pas à rapatrier les variables du fichier de configuration dans tcl.
Il est hors de question de changer le fichier de configuration en format tcl car il est utilisé par d'autres ressources.

J'ai essayé
set fichier_conf [source ./chemin/du/fichier/de/conf/conf.cfg]


mais une erreur intervient à l'execution parce que tcl essaie de compilé la déclaration des variables qui sont en Shell...

Merci par avance

2 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    hello
    je dirais: depuis le shell, appeller le fichier de configuration shell, appeller le script TCL et récupérer les variables d'environnement avec env
    0
    1. bijnok Messages postés 87 Statut Membre 12
       
      Désolé mais je n'y arrive pas. Le but est de tout faire à partir du script tcl (le tout fait partie d'une application).
      0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      depuis le tcl, tu veux:
      - juste exécuter le script shell ?
      - l'exécuter et recupérer dans le tcl des variables du shell ?
      - l'exécuter et récupérer dans tcl les sorties du script shell ?

      pour exécuter du shell depuis tcl, il faut utiliser exec plutot que source, qui attend du tcl
      0
    3. bijnok Messages postés 87 Statut Membre 12
       
      Je vais essayer d''éclaircir mes propos.

      J'ai un script tcl qui a besoin de variables pur fonctionner Ces variables sont contenues dans un fichier de configuration codé en Shell.
      Le but est d'executer le script TCL en utilisant les variables contenues dans la configuration Shell sans faire de modifications dans le fichier de configuration parce que celui-ci est aussi utilisé par des scripts shell.

      Merci de prendre de ton temps pour m'aider.

      Fais moi signe si d'autres éclaircissements sont nécessaires ou si tu veux un exemple.
      0
    4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      oui, un exemple
      mais tu peux modifier le tcl ?
      depuis un shell, tu exécutes le fichier de configuration shell, puis tu exécutes le tcl duquel tu pourras récupérer les variables shell
      par ex.
      $ export AAA=aaaaaaaaaaaaaaa 
      $
      $ tclsh 
      %  
      % puts $env(AAA) 
      aaaaaaaaaaaaaaa 
      %  
      % exit 
      $  
      
      0
    5. bijnok Messages postés 87 Statut Membre 12
       
      Dans ton exemple cela fonctionne avec une variable, mais pas avec un fichier contenant la déclaration des variables; il me semble avoir essayer.

      Voici un exemple, avec la descritpion de chaque fichier.

      Fichier de configuration: variables.cfg (Shell)

      Nom =  'Bijnok'
      Date = 'Aujourd'hui'
      Sujet = 'galère avec tcl'



      Fichier à executer: execution.tcl

      puts $Nom a  ecrit $Date  dans le sujet $Sujet



      Le but est donc de rapatrier toutes les variables de "variables.cfg" pour l'execution du tcl...


      Encore merci.
      0
  2. bijnok Messages postés 87 Statut Membre 12
     
    Réponse obtenue à partir de http://wiki.tcl.tk/706
    ::::::::::::::
    test.cfg
    ::::::::::::::
    #!/bin/bash   
    
    export a=toto   
    export b=tata   
    


    ::::::::::::::
    test.sh ou test.tcl (peut importe)
    ::::::::::::::
    #!/bin/bash   
    #\   
    . "./test.cfg"   
    #\   
    exec tclsh "$0" "$@"   
    
    puts $env(a)   
    
    puts $env(b)   
    
    puts "fin"


    Finalement, il faut transformer le tcl en sh (l'extension ne change rien, là je parle de la première ligne du fichier qui indique l'interpréteur à utiliser).

    Il faut ajouter
    #\
    avant chaque ligne de code shell afin que ces lignes de code ne provoque pas d'erreur lorsque l'on appel le script en tcl avec la commande
    exec tclsh "$0" "$@"
    .
    En fait #\ est un commentaire pour le shell ET pour le tcl mais pour le tcl la ligne qui suit #\ est aussi un commentaire !!

    Il faut aussi faire un export de toutes les variables du fichier de configuration utilisées par le tcl.

    dubcek
    hello
    je dirais: depuis le shell, appeller le fichier de configuration shell, appeller le script TCL et récupérer les variables d'environnement avec env

    En effet, avec ajout des
    #\

    Encore merci à toi dubcek

    ________________________________
    EDIT
    ________

    Pour éviter d'avoir à trop modifier le fichier tcl, on a déclarer les variables tcl en début de fichier en récupérant les variables shell: exemple:
    var1_tcl=$env(var1_shell) 
    var2_tcl=$env(var2_shell) 
    var3_tcl=$env(var3_shell)


    Comme ça on ne touche oas dut otu au corps du code tcl.
    0