#1 Le 12/07/2012, à 18:06
- Arbiel
[Résolu] expansion par bash de paramètres présents dans un fichier
Bonsoir à tous
Je veux créer un fichier à partir d'un modèle, avec quelques paramètres dont les valeurs sont calculées par un script bash.
J'ai pour l'instant codé mes paramètres dans le fichier modèle et j'utilise sed avec des motifs tels que
-e "s/\${source}/${source}/g"
qui me permettent de remplacer toute occurrence de ${source} par la valeur du paramètre ${source}.
Cependant, avec cette méthode, toute introduction d'un nouveau paramètre dans mon fichier modèle nécessite que je modifie la commande
sed {liste de mes substitution} fichier_modèle 1>fichier_créé
L'utilisation de l'option "Here document" de bash,
cat 1>fichier_créé <<EOF
contenu du fichier modèle
EOF
donne le même résultant, mais je ne sais pas comment introduire le contenu du fichier entre les deux lignes.
J'ai essayé de construire un paramètre, x, contenant l'ensemble et de faire ensuite
eval ${x}
mais je ne m'en sors pas.
Je remercie quiconque pourra m'indiquer comment faire.
Arbiel
Dernière modification par Arbiel (Le 12/07/2012, à 22:19)
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#2 Le 12/07/2012, à 18:26
- pingouinux
Re : [Résolu] expansion par bash de paramètres présents dans un fichier
Bonjour,
Est-ce que ceci peut faire l'affaire ?
$ cat modele
echo "parametre 1=$param1"
echo "parametre 2=$param2"
$ param1="A A"
$ param2="B B"
$ source modele >fichier_cree
$ cat fichier_cree
parametre 1=A A
parametre 2=B B
Hors ligne
#3 Le 12/07/2012, à 18:31
- Arbiel
Re : [Résolu] expansion par bash de paramètres présents dans un fichier
Bonsoir
et merci pour ta suggestion, mais elle ne fait pas l'affaire car elle nécessite que le fichier modèle soit un script bash, qui ne contiennent que des ordres echo, et ce n'est pas du tout le cas.
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#4 Le 12/07/2012, à 19:03
- pingouinux
Re : [Résolu] expansion par bash de paramètres présents dans un fichier
Autre méthode :
$ cat modele
parametre 1=$param1
parametre 2=$param2
$ cat modele_to_fichier
echo "cat >fichier_cree <<EOF" >fichier_tmp
cat modele >>fichier_tmp
echo "EOF" >>fichier_tmp
source fichier_tmp
rm fichier_tmp
$ param1="A A"
$ param2="B B"
$ source modele_to_fichier
$ cat fichier_cree
parametre 1=A A
parametre 2=B B
Hors ligne
#5 Le 12/07/2012, à 19:08
- Arbiel
Re : [Résolu] expansion par bash de paramètres présents dans un fichier
Entretemps, j'ai continué mes tests, et je trouve des choses extrêmement bizarres :
x=$(echo "cat 1>toto.txt<<EOF" $'\n' $(cat lien)$'\n'EOF)
devrait mettre dans ma variable ${x}
cat 1>toto.txt<<EOF
contenu du fichier lien
EOF
Voici le contenu du fichier lien
cat lien
<?xml version="1.0"?>
<!--
** DO NOT EDIT THIS FILE.
** If you make changes to this file while any VirtualBox related application
** is running, your changes will be overwritten later, without taking effect.
** Use VBoxManage or the VirtualBox Manager GUI to make changes.
-->
<VirtualBox xmlns="http://www.innotek.de/VirtualBox-settings" version="1.12-linux">
<Machine uuid="{${vbx_mv_uuid}}" name="${Jeu}" OSType="WindowsXP" snapshotFolder="Snapshots">
<MediaRegistry>
<HardDisks>
<HardDisk uuid="{ed4bb816-0646-4522-9a79-2dac6e9170f6}" location="/.ciel/${mv}/${mv}.vdi" format="VDI" type="Normal"/>
</HardDisks>
<DVDImages>
<Image uuid="{b7aab406-9171-4901-a718-05ff8e5b904f}" location="${iconiochore}/${Jeu}/${Jeu}${source}"/>
<Image uuid="{7b67f2b2-7fbd-4aff-ae30-630c6f7f1346}" location="/.ciel/scripts/CielWindows.iso"/>
</DVDImages>
<FloppyImages/>
</MediaRegistry>
<ExtraData>
.......
et voila ce que j'obtiens dans ${x} par une commande
echo ${x} 1>liste.txt
cat liste.txt
cat 1>toto.txt<<EOF <?xml version="1.0"?> <!--
2011_09_23 [Orange] {RM} Internet @ Courseulles (21,00 €).ps 2011_09_24 [Pacitel] Liste rouge démarchage téléphonique.ps 2011_12_04 [Cristal_Arques] Verres Rambouillet (71,50 €).ps 2011_12_04 [Rue des Puzzles] Puzzle Philippe Noël (24,45 €).ps 2011_12_05 [Rasoir service] Réveil pour Philippe (26,98 €).ps 2011_12_11 [Pixmania] Radio cassettes Philippe (102,89€).ps 2011_12_17 [Orange] {RM} Recharge Philippe (100,00 €).ps 2012_01_11 [Pixmania] {RM} Commande téléviseur (508,00 €).ps 2012_05_14 [RM] {Amicale} Pouvoir AG @ Jean Claude Marut.pdf 2012_05_21 [Terraeco]Rcçu abonnement 1 anps bookstore bookstore~ Bureau cp.txt df.txt Documents examples.desktop fdisk.txt Fiche de Garou.pdf grep grml.iso.cfg~ grub.cfg grub.cfg~ hypervc-0.4.1-gtk2-generic.tar.bz2 Images install.log jeu.log lien log lspci.log ls.txt mailtb mailtb~ Modèles mount.txt Musique Prog_Windows Public purge.log réparer l'installation de X r.txt set.log spider.sav Téléchargements Téléphonie avec Sipdroid.ps testdisk_static toto.txt Ubuntu One Vidéos VirtualBox2 VMs VirtualBox VMs WUtils
DO NOT EDIT THIS FILE.
2011_09_23 [Orange] {RM} Internet @ Courseulles (21,00 €).ps 2011_09_24 [Pacitel] Liste rouge démarchage téléphonique.ps 2011_12_04 [Cristal_Arques] Verres Rambouillet (71,50 €).ps 2011_12_04 [Rue des Puzzles] Puzzle Philippe Noël (24,45 €).ps 2011_12_05 [Rasoir service] Réveil pour Philippe (26,98 €).ps 2011_12_11 [Pixmania] Radio cassettes Philippe (102,89€).ps 2011_12_17 [Orange] {RM} Recharge Philippe (100,00 €).ps 2012_01_11 [Pixmania] {RM} Commande téléviseur (508,00 €).ps 2012_05_14 [RM] {Amicale} Pouvoir AG @ Jean Claude Marut.pdf 2012_05_21 [Terraeco]Rcçu abonnement 1 anps bookstore bookstore~ Bureau cp.txt df.txt Documents examples.desktop fdisk.txt Fiche de Garou.pdf grep grml.iso.cfg~ grub.cfg grub.cfg~ hypervc-0.4.1-gtk2-generic.tar.bz2 Images install.log jeu.log lien log lspci.log ls.txt mailtb mailtb~ Modèles mount.txt Musique Prog_Windows Public purge.log réparer l'installation de X r.txt set.log spider.sav Téléchargements Téléphonie avec Sipdroid.ps testdisk_static toto.txt Ubuntu One Vidéos VirtualBox2 VMs VirtualBox VMs WUtils
If you make changes to this file while any VirtualBox related application
2011_09_23 [Orange] {RM} Internet @ Courseulles (21,00 €).ps 2011_09_24 [Pacitel] Liste rouge démarchage téléphonique.ps 2011_12_04 [Cristal_Arques] Verres Rambouillet (71,50 €).ps 2011_12_04 [Rue des Puzzles] Puzzle Philippe Noël (24,45 €).ps 2011_12_05 [Rasoir service] Réveil pour Philippe (26,98 €).ps 2011_12_11 [Pixmania] Radio cassettes Philippe (102,89€).ps 2011_12_17 [Orange] {RM} Recharge Philippe (100,00 €).ps 2012_01_11 [Pixmania] {RM} Commande téléviseur (508,00 €).ps 2012_05_14 [RM] {Amicale} Pouvoir AG @ Jean Claude Marut.pdf 2012_05_21 [Terraeco]Rcçu abonnement 1 anps bookstore bookstore~ Bureau cp.txt df.txt Documents examples.desktop fdisk.txt Fiche de Garou.pdf grep grml.iso.cfg~ grub.cfg grub.cfg~ hypervc-0.4.1-gtk2-generic.tar.bz2 Images install.log jeu.log lien log lspci.log ls.txt mailtb mailtb~ Modèles mount.txt Musique Prog_Windows Public purge.log réparer l'installation de X r.txt set.log spider.sav Téléchargements Téléphonie avec Sipdroid.ps testdisk_static toto.txt Ubuntu One Vidéos VirtualBox2 VMs VirtualBox VMs WUtils
is running, your changes will be overwritten later, without taking effect.
2011_09_23 [Orange] {RM} Internet @ Courseulles (21,00 €).ps 2011_09_24 [Pacitel] Liste rouge démarchage téléphonique.ps 2011_12_04 [Cristal_Arques] Verres Rambouillet (71,50 €).ps 2011_12_04 [Rue des Puzzles] Puzzle Philippe Noël (24,45 €).ps 2011_12_05 [Rasoir service] Réveil pour Philippe (26,98 €).ps 2011_12_11 [Pixmania] Radio cassettes Philippe (102,89€).ps 2011_12_17 [Orange] {RM} Recharge Philippe (100,00 €).ps 2012_01_11 [Pixmania] {RM} Commande téléviseur (508,00 €).ps 2012_05_14 [RM] {Amicale} Pouvoir AG @ Jean Claude Marut.pdf 2012_05_21 [Terraeco]Rcçu abonnement 1 anps bookstore bookstore~ Bureau cp.txt df.txt Documents examples.desktop fdisk.txt Fiche de Garou.pdf grep grml.iso.cfg~ grub.cfg grub.cfg~ hypervc-0.4.1-gtk2-generic.tar.bz2 Images install.log jeu.log lien log lspci.log ls.txt mailtb mailtb~ Modèles mount.txt Musique Prog_Windows Public purge.log réparer l'installation de X r.txt set.log spider.sav Téléchargements Téléphonie avec Sipdroid.ps testdisk_static toto.txt Ubuntu One Vidéos VirtualBox2 VMs VirtualBox VMs WUtils
Use VBoxManage or the VirtualBox Manager GUI to make changes. -->
<VirtualBox xmlns="http://www.innotek.de/VirtualBox-settings" version="1.12-linux"> <Machine uuid="{${vbx_mv_uuid}}" name="${Jeu}" OSType="WindowsXP" snapshotFolder="Snapshots"> <MediaRegistry> <HardDisks> <HardDisk uuid="{ed4bb816-0646-4522-9a79-2dac6e9170f6}" location="/.ciel/${mv}/${mv}.vdi" format="VDI" type="Normal"/> </HardDisks> <DVDImages> <Image uuid="{b7aab406-9171-4901-a718-05ff8e5b904f}" location="${iconiochore}/${Jeu}/${Jeu}${source}"/> <Image uuid="{7b67f2b2-7fbd-4aff-ae30-630c6f7f1346}" location="/.ciel/scripts/CielWindows.iso"/>
Ce n'est pas très lisible, mais on reconnaît en début de ${x} "cat 1>toto.txt" et les deux premières lignes de mon fichier, puis tout se passe comme si la ligne de début de commentaire xml
<!--
provoquait l'insertion de quelque chose qui ressemble à l'affichage de mon répertoire courant entre chaque ligne de commentaire, jusqu'à la fin du commentaire xml
-->
pour repartir normalement sur le fichier modèle.
J'ai introduit moi-même les sauts de ligne pour rendre le texte plus lisible.
Quelqu'un a-t-il une explication ?
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#6 Le 12/07/2012, à 19:12
- sputnick
Re : [Résolu] expansion par bash de paramètres présents dans un fichier
Oublie le bricolage si je puis me permettre, certains ont réfléchit au problème de façon brillante. C'est basé sur Perl, mais il n'est pas necessaire de connaitre UNE LIGNE de perl pour s'en servir, demo de Template :
sudo apt-get install libtemplate-perl
$ cat /tmp/test.tpl
Salut les Ubunteros et autres Linuxiens.
Ceci est un [% type %], ouvrez bien grand vos [% ouverture %] !
++
$ tpage --define type=hold-up --define ouverture=caisses /tmp/test.tpl
Salut les Ubunteros et autres Linuxiens.
Ceci est un hold-up, ouvrez bien grand vos caisses !
++
$ tpage --define type="test de Perl Template" --define ouverture=yeux /tmp/test.tpl
Salut les Ubunteros et autres Linuxiens.
Ceci est un test de Perl Template, ouvrez bien grand vos yeux !
++
Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. Confucius
https://sputnick.fr
Hors ligne
#7 Le 12/07/2012, à 19:13
- Arbiel
Re : [Résolu] expansion par bash de paramètres présents dans un fichier
@ pingouinux
Oui, effectivement, ta solution devrait faire l'affaire. C'est la même idée que celle que j'ai voulu utiliser. Et comme la tienne fonctionne indiscutablement, je vais l'appliquer.
Il n'en reste pas moi que les résultats que j'ai obtenus sont surprenants. Je laisse donc la discussion ouverte pendant quelque temps, pour voir si quelqu'un peut apporter quelques explications.
@ sputnick
OK, mais c'est dans le même style que ce que je fais actuellement avec ma liste de motifs sed. Si je modifie mon fichier modèle pour y introduire de nouvelles variables, je dois venir modifier la commande
tpage --define type="test de Perl Template" --define ouverture=yeux /tmp/test.tpl
Arbiel
Dernière modification par Arbiel (Le 12/07/2012, à 19:18)
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#8 Le 12/07/2012, à 19:14
- pingouinux
Re : [Résolu] expansion par bash de paramètres présents dans un fichier
@Arbiel #5 :
Peut-être, au lieu de :
x=$(echo "cat 1>toto.txt<<EOF" $'\n' $(cat lien)$'\n'EOF)
essayer :
x=$(printf "cat 1>toto.txt<<EOF\n$(cat lien)\nEOF")
Dernière modification par pingouinux (Le 12/07/2012, à 19:15)
Hors ligne
#9 Le 12/07/2012, à 19:21
- Arbiel
Re : [Résolu] expansion par bash de paramètres présents dans un fichier
même topo
x=$(printf "cat 1>toto.txt<<EOF\n$(cat lien)\nEOF")
eval ${x}
bash: Erreur de syntaxe près du symbole inattendu « < »
bash: avertissement : « here-document » à la ligne 2 délimité par la fin du fichier (au lieu de « EOF »)
echo ${x}
cat 1>toto.txt<<EOF <?xml version="1.0"?> <!-- 2011_09_23 [Orange] {RM} Internet @ Courseulles (21,00 €).ps 2011_09_24 [Pacitel] Liste rouge démarchage téléphonique.ps 2011_12_04 [Cristal_Arques] Verres Rambouillet (71,50 €).ps 2011_12_04 [Rue des Puzzles] Puzzle Philippe Noël (24,45 €).ps 2011_12_05 [Rasoir service] Réveil pour Philippe (26,98 €).ps 2011_12_11 [Pixmania] Radio cassettes Philippe (102,89€).ps 2011_12_17 [Orange] {RM} Recharge Philippe (100,00 €).ps 2012_01_11 [Pixmania] {RM} Commande téléviseur (508,00 €).ps 2012_05_14 [RM] {Amicale} Pouvoir AG @ Jean Claude Marut.pdf 2012_05_21 [Terraeco]Rcçu abonnement 1 anps bookstore bookstore~ Bureau cp.txt df.txt Documents examples.desktop fdisk.txt Fiche de Garou.pdf grep grml.iso.cfg~ grub.cfg grub.cfg~ hypervc-0.4.1-gtk2-generic.tar.bz2 Images install.log jeu.log lien liste.txt log lspci.log ls.txt mailtb mailtb~ Modèles mount.txt Musique Prog_Windows Public purge.log réparer l'ins
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#10 Le 12/07/2012, à 19:27
- pingouinux
Re : [Résolu] expansion par bash de paramètres présents dans un fichier
eval ${x}
Essayer :
source <(echo "$x")
Ajouté :
eval "${x}"
semble marcher aussi.
Dernière modification par pingouinux (Le 12/07/2012, à 19:33)
Hors ligne
#11 Le 12/07/2012, à 21:24
- Arbiel
Re : [Résolu] expansion par bash de paramètres présents dans un fichier
Pour l'insertion du répertoire, cela provient de l'interprétation, tout à fait normale, de * par bash comme signifiant tous les fichiers (expansion de fichiers)
x=*
echo ${x}
2011_09_23 [Orange] {RM} Internet @ Courseulles (21,00 €).ps 2011_09_24 [Pacitel] Liste rouge démarchage téléphonique.ps 2011_12_04 [Cristal_Arques] Verres Rambouillet (71,50 €).ps 2011_12_04 [Rue des Puzzles] Puzzle Philippe Noël (24,45 €).ps 2011_12_05 [Rasoir service] Réveil pour Philippe (26,98 €).ps 2011_12_11 [Pixmania] Radio cassettes Philippe (102,89€).ps 2011_12_17 [Orange] {RM} Recharge Philippe (100,00 €).ps 2012_01_11 [Pixmania] {RM} Commande téléviseur (508,00 €).ps 2012_05_14 [RM] {Amicale} Pouvoir AG @ Jean Claude Marut.pdf 2012_05_21 [Terraeco]Rcçu abonnement 1 anps bookstore bookstore~ Bureau cp.txt df.txt Documents examples.desktop fdisk.txt Fiche de Garou.pdf grep grml.iso.cfg~ grub.cfg grub.cfg~ hypervc-0.4.1-gtk2-generic.tar.bz2 Images install.log jeu.log lien liste.txt log lspci.log ls.txt mailtb mailtb~ Modèles mount.txt Musique Prog_Windows Public purge.log réparer l'installation de X r.txt set.log spider.sav Téléchargements Téléphonie avec Sipdroid.ps testdisk_static toto.txt toto.txt~ toto.xml toto.xml~ Ubuntu One Vidéos VirtualBox2 VMs VirtualBox VMs WUtils
J'ai supprimé les ** en début des lignes concernées, et le problème est à ce niveau là, résolu.
Les deux commandes que tu m'as indiquées fonctionnent à peu près, mais j'ai constaté une anomalie en milieu de fichier :
Voila le résultat obtenu (fichier toto.txt) (mes variables ne sont pas initialisées)
<?xml version="1.0"?> <!-- DO NOT EDIT THIS FILE. If you make changes to this file while any VirtualBox related application is running, your changes will be overwritten later, without taking effect. Use VBoxManage or the VirtualBox Manager GUI to make changes. --> <VirtualBox xmlns="http://www.innotek.de/VirtualBox-settings" version="1.12-linux"> <Machine uuid="{}" name="" OSType="WindowsXP" snapshotFolder="Snapshots"> <MediaRegistry> <HardDisks> <HardDisk uuid="{ed4bb816-0646-4522-9a79-2dac6e9170f6}" location="/.ciel//.vdi" format="VDI" type="Normal"/> </HardDisks> <DVDImages> <Image uuid="{b7aab406-9171-4901-a718-05ff8e5b904f}" location="//"/> <Image uuid="{7b67f2b2-7fbd-4aff-ae30-630c6f7f1346}" location="/.ciel/scripts/CielWindows.iso"/> .......
<GuestProperties>x=cat 1>toto.txt<<EOF
<?xml version="1.0"?> <!-- DO NOT EDIT THIS FILE. If you make changes to this file while any VirtualBox related application is running, your changes will be overwritten later, without taking effect. Use VBoxManage or the VirtualBox Manager GUI to make changes. --> <VirtualBox xmlns="http://www.innotek.de/VirtualBox-settings" version="1.12-linux"> <Machine uuid="{}" name="" OSType="WindowsXP" snapshotFolder="Snapshots"> <MediaRegistry> <HardDisks> <HardDisk uuid="{ed4bb816-0646-4522-9a79-2dac6e9170f6}" location="/.ciel//.vdi" format="VDI" type="Normal"/> </HardDisks> <DVDImages> <Image uuid="{b7aab406-9171-4901-a718- ......
<GuestProperties>x=cat 1>toto.txt<<EOF
<?xml version="1.0"?> <!-- DO NOT EDIT THIS FILE. If you make changes to this file while any VirtualBox related application is running, your changes will be overwritten later, without taking effect. Use VBoxManage or the VirtualBox Manager GUI to make changes. --> <VirtualBox xmlns="http://www.innotek.de/VirtualBox-settings" version="1.12-linux"> <Machine uuid="{}" name="" OSType="WindowsXP" snapshotFolder="Snapshots"> <MediaRegistry> <HardDisks> <HardDisk uuid="{ed4bb816-0646-4522-9a79-2dac6e9170f6}" location="/.ciel//.vdi" format="VDI" type="Normal"/> </HardDisks> <DVDImages> <Image uuid="{b7aab406-9171-4901-a718-
il faut encore que je fasse quelques tests et je te tiens informé.
Arbiel
Dernière modification par Arbiel (Le 12/07/2012, à 21:25)
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#12 Le 12/07/2012, à 22:18
- Arbiel
Re : [Résolu] expansion par bash de paramètres présents dans un fichier
Mes manipulations ont abîmé le fichier modèle et c'est ce qui explique les anomalies que j'ai vues au milieu du fichier.
Je vais finalement passer par la constitution du fichier temporaire pour les raisons suivantes
- conservation des sauts de ligne
- absence du problème potentiel de l'interprétation des ** en début de ligne
- plus facile à comprendre à la lecture.
Je te remercie pour ton aide.
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#13 Le 12/07/2012, à 23:07
- sputnick
Re : [Résolu] expansion par bash de paramètres présents dans un fichier
Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. Confucius
https://sputnick.fr
Hors ligne
#14 Le 13/07/2012, à 06:15
- nesthib
Re : [Résolu] expansion par bash de paramètres présents dans un fichier
+1 pour utiliser un module adapté comme l'a présenté sputnick.
Sinon pour le fun, une solution qui devrait fonctionner pas trop mal :
for i in $(compgen -A variable)
do
sed -i "s|\${${i}}|${!i//$'\n'/\\n}|g" fichier
done
encore plus simple s'il est possible de faire en sorte que les variables commencent par un motif constant, ex. ${XXX_machin}, ${XXX_truc} :
for i in ${!XXX_@}
do
sed -i "s|\${${i}}|${!i}|g" fichier
done
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#15 Le 13/07/2012, à 08:35
- Arbiel
Re : [Résolu] expansion par bash de paramètres présents dans un fichier
Cette dernière méthode semble effectivement intéressante, mais elle présente les inconvénients suivants :
- elle nécessite la recopie préalable du modèle vers le fichier cible (un inconvénient mineur, éventuellement négligeable)
- elle nécessite que, dans le fichier modèle, toute invocation des variables se fasse par ${xxx}, sauf à devoir engendrer pour chaque appel deux motifs, avec et sans les accolades
- elle itère un grand nombre de fois sur l'appel de sed, sauf peut-être avec l'utilisation du préfixe
- elle nécessite la création de variables supplémentaires, pour celles des variables qui contiennent des chemins vers des fichiers
chemin_sed="${chemin//\//\\\/}"
Pour ce qui concerne le module adapté dont a parlé sputnick, il me semble présenter pratiquement les mêmes inconvénients que l'utilisation de sed, avec, en plus
- la codification du fichier modèle d'une manière différente de celle que nous utilisons couramment
- et pour ceux qui n'ont pas lu la présente discussion, de reposer sur un module inconnu
Mais il présente l'avantage d'utiliser des arguments infiniment (infiniment est abusif, alors beaucoup) plus compréhensibles que les expressions régulières.
Au total, la solution présentée par pingouinux me semble vraiment la plus intéressante, et c'est celle que j'ai codée dans mon script.
Encore merci à vous trois pour votre aide
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#16 Le 13/07/2012, à 10:11
- sputnick
Re : [Résolu] expansion par bash de paramètres présents dans un fichier
Pour ce qui concerne le module adapté dont a parlé sputnick, il me semble présenter pratiquement les mêmes inconvénients que l'utilisation de sed, avec, en plus
- la codification du fichier modèle d'une manière différente de celle que nous utilisons couramment
- et pour ceux qui n'ont pas lu la présente discussion, de reposer sur un module inconnu
inconnu Template Toolkit ? C'est un module des plus connus sur les 108 056 modules libre disponibles, un must-have. Et ce que j'ai proposé n'est qu'un court exemple, on peux aller bien plus loin. Par exemple inclure des fichiers avec une directive, placer du code Perl dans le fichier template... Mais bon, pour utiliser les bons outils, ça demande une certaine maturité. Dans un sens, vouloir tout coder soi même c'est bien, ça fais apprendre le code, sauf qu'on fait toujours moins bien que des mecs archi compétents qui se sont fais chier la b... sur le sujet à plusieurs pendant des années. Dans un milieu pro, la deuxième solution est bien sur la meilleure, car on cherche l'efficacité, la ré-utilisabilité, la maintenabilité...
Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. Confucius
https://sputnick.fr
Hors ligne
#17 Le 13/07/2012, à 14:42
- Arbiel
Re : [Résolu] expansion par bash de paramètres présents dans un fichier
Je suis désolé, je suis un béotien et le monde s'arrête à ma porte !!
Cependant, pour moi qui ne connais donc pas grand chose
sudo apt-get install libtemplate-perl
ne me parle pas beaucoup, et ne m'évoque absolument pas "Template Toolkit".
Cependant, maintenant que tu m'en as parlé, je vais aller y faire un tour, pour ne pas mourir idiot (mais là, rien n'est moins sûr, non que ma mort ne soit proche, mais parce que mes neurones pataugent un peu dans la choucroute).
Mais encore une fois, et en toute sincérité, merci pour tes interventions.
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne