TCL : fichier de configuration en shell

Fermé
bijnok Messages postés 62 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 6 octobre 2015 - Modifié par bijnok le 2/06/2010 à 14:53
bijnok Messages postés 62 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 6 octobre 2015 - 4 juin 2010 à 08:45
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

dubcek Messages postés 18778 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 5 avril 2025 5 630
2 juin 2010 à 16:19
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
bijnok Messages postés 62 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 6 octobre 2015 12
3 juin 2010 à 09:11
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
dubcek Messages postés 18778 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 5 avril 2025 5 630
Modifié par dubcek le 3/06/2010 à 09:59
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
bijnok Messages postés 62 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 6 octobre 2015 12
3 juin 2010 à 10:13
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
dubcek Messages postés 18778 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 5 avril 2025 5 630
Modifié par dubcek le 3/06/2010 à 13:20
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
bijnok Messages postés 62 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 6 octobre 2015 12
3 juin 2010 à 13:29
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
bijnok Messages postés 62 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 6 octobre 2015 12
Modifié par bijnok le 4/06/2010 à 14:33
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