bonjour comment pourrai je source un fichier a partir d'un script perl sous UNIx?
bonjour comment pourrai je source un fichier a partir d'un script perl sous UNIx?
Tu souhaites sourcer un ficher shell en perl ?
Il doit y avoir qq chose qui m'echappe car je ne vois pas a quoi cela peut servir , perl et shell n'etant pas les memes languages.
Souhaite tu 'inclure' un fichier perl dans un autre ? La directive require devrait t'aider :
Je crois que require est expliqué dans la FAQ Perl de developpez ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2require "monfichier.pl";
Si ce n'est pas ce que tu souhaites faire, alors pourrais tu expliquer un peu plus en detail ton probleme de 'sourcing' ?
sans doute que ouafaeinpt a un fichier qui assigne des variables d'environnement :
et qu'il veut évaluer ça dans son script perl
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 MY_APPLI_PATH=/app/gugus
Mais ça ne me parait pas très simple à réaliser. sans doute qu'il faut appeler le script, et récupérer chaque valeur séparément, ou alors écrire env dans un fichier après avoir exécuter le script, puis lire chaque valeur et l'attribuer dans @ENV
On peut stocker les vars dans une hashtable :
puis les utiliser :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 my $htParams = (); open ( FILEIN , "monfichier" ) or die("unable to read the file"); foreach my $line ( <FILEIN> ) { chomp($line); if ( $line ~= /(.*)\=(.*)/ ) { $htParams{$1}=$2; } } close( FILEIN );
devrait imprimer /app/gugus
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 print $htParms{MY_APPLI_PATH}."\n";
PS : un moderateur aurait supprimé mon precendent post ?
Envoyé par vosaray
![]()
oui, bien sûr. mais cela ne marche pas si on a quelque chose du style :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 BASE=/app APPL=$BASE/gugus
C'est sur, mais en modifiant la regexp on s'en sort tout de meme![]()
ah oui?
et tu fais quoi avec
tu écris ton propre interprétateur shell en perl? note, pourquoi pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 APPL_HOST=$(hostname|cut -d. -f1)![]()
Hihi, non j'ecris pas mon propre intepreteur shell, mais :
1/ je genere un fichier .sh qui source le fichier en question et dump les variables dans fichier2.vars
2/ j'execute ce .sh depuis perl avec la commande system
3/ je modifie le nom du fichier a sourcer dans le code posté et je retombe sur mes pattes
Bon ca devient un peu kafkaien comme delire, surtout que la personne qui a posé la question n'a pas l'air de se manifester beaucoup![]()
c'est bon comme méthode ça
desolee, mais j avai des examens c est pour cela que j ai laisser tomber en attendant de finir mes exam
mai mon problem persiste tjrs
c est vrai le fichier que je doit source doit declarer une variable d'environnement c est pour cela que je veu le sourcer
en plus meme si j ecris un fichier shell pour source un fichier qui s'apelle source.me cela ne marche pas
cette variable je la declare vide car apres dans le scripte une valeur lui sera attribuer par une variable
j sai pas si vous avez bien compris mon problem!!
J'ai une autre solution, qui impose cependant quelques contraintes ...
Soit ba.sh mon fichier shell à sourcer pour mon script Perl :Celui-ci (ba.sh) doit IMPERATIVEMENT contenir une variable d'environnement que lui et lui seul fixe. Dans mon exemple, c'est la variable BA.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 #!/bin/sh export BA="ba"
Ensuite, mon script Perl teste si cette variable est définie.
Si elle l'est, il n'y a rien à sourcer - puisque c'est manifestement déjà fait - et on exécute normalement nos commandes Perl.
Si elle ne l'est pas, on lance un processus fils, qui se substitue au processus père, au moyen de la fonction exec. Ce processus-fils source notre shell et relance le script Perl lui-même, ce qui nous ramène au premier cas :La première fois que j'ai imaginé ce mécanisme, je me suis dit que c'était certainement bourrin ... depuis j'ai muri et je le trouve finalement assez élégant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #!/usr/bin/perl if (exists $ENV{BA}) { print "[".$ENV{BA}."]\n" } else { print "Pas de BA\nOn source et on relance ...\n"; exec "source ./ba.sh ; $0"; }
Et vous ???
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager