Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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

Arbiel #9 a écrit :

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

roll


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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde 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

Arbiel a écrit :

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