#1 Le 29/03/2014, à 12:02
- Christophe C
[résolu] récupérer une variable dans un fichier
Bonjour,
Je souhaite récupérer une variable Theme1 dans un fichier de config. Sur le principe, c'est simple :
#!/bin/bash
source ~/test
zenity --info --text=$Theme1
sachant que le fichier de config contient :
blabla
blabla
Theme1=Minimalistic
blabla
Jusque là, tout va bien .
Sauf que en fait le fichier de config contient une ligne avec des ";"
blabla;;babl;;blabla;;
blabla
Theme1=Minimalistic
blabla
et avec ces points-virgules la reconnaissance de la variable Theme1 ne se fait plus (1 seul suffit, en fait). Snif.
Le fichier de config, je ne le maitrise pas, donc je ne peux retoucher ce contenu. Je voudrais donc trouver une solution.
Je me disais qu'il fallait peut-être que j'accède au fichier directement en-dessous des 2 ";", ou que j'envoie tout dans une variable avec une fonction de remplacement de ces saletés ?
Je peux aussi faire une boucle, mais cela rallonge mon traitement, je préfère éviter.
bref, si quelqu'un a une solution simple ...
Dernière modification par Christophe C (Le 29/03/2014, à 18:17)
BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».
Hors ligne
#2 Le 29/03/2014, à 12:07
- Kooothor
Re : [résolu] récupérer une variable dans un fichier
Salut,
#!/bin/sh
var=$(grep Theme1 ~/test)
zenity --info --text=$var
@+
~ktr
Hors ligne
#3 Le 29/03/2014, à 12:24
- pingouinux
Re : [résolu] récupérer une variable dans un fichier
Bonjour,
Pour ne récupérer que la valeur de Theme1 :
var=$(sed -rn 's/^Theme1=(.*)/\1/p' ~/test)
zenity --info --text=$var
Hors ligne
#4 Le 29/03/2014, à 13:23
- Christophe C
Re : [résolu] récupérer une variable dans un fichier
Oui, la variante de pingouinux correspond mieux à mon besoin. Merci.
sed est vraiment puissant, mais tellement illisible
Sinon, certaines des variables possibles sont sur 2 voir 3 mots (genre Theme1=Minimalistic toto tata). Et là, la fonction de pingouinux ne marche pas. Sur un traitement "classique" je mettrais des quotes, mais avec sed, je ne sais pas faire.
Dernière modification par Christophe C (Le 29/03/2014, à 13:25)
BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».
Hors ligne
#5 Le 29/03/2014, à 13:45
- pingouinux
Re : [résolu] récupérer une variable dans un fichier
Le sed est correct, même dans ce cas-là, mais il faut faire :
zenity --info --text="$var"
Hors ligne
#6 Le 29/03/2014, à 13:47
- Christophe C
Re : [résolu] récupérer une variable dans un fichier
Trouvé : grep Theme1 ~/test | cut -d = -f 2-
Oups : ok avec ta méthode aussi : chouette, 2 soluces.
Dernière modification par Christophe C (Le 29/03/2014, à 13:48)
BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».
Hors ligne
#7 Le 29/03/2014, à 13:53
- pingouinux
Re : [résolu] récupérer une variable dans un fichier
Tu peux aussi faire le sed ainsi :
var=$(sed -n '/^Theme1=/s/.*=//p' ~/test)
Ajouté : Ou avec awk
var=$(awk -F= '/Theme1/{print$2}' ~/test)
Dernière modification par pingouinux (Le 29/03/2014, à 13:57)
Hors ligne
#8 Le 29/03/2014, à 14:44
- Josepe36
Re : [résolu] récupérer une variable dans un fichier
Bonjour
. test 2>/dev/null
echo $Theme1
Développeur distribution Hybryde
www.hybryde.org
Hors ligne
#9 Le 29/03/2014, à 15:16
- Christophe C
Re : [résolu] récupérer une variable dans un fichier
@pingouinux : merci. Abondance de solutions ne nuit pas
@Josepe36 : non, en l'état ça ne marche pas.
Dernière modification par Christophe C (Le 29/03/2014, à 15:54)
BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».
Hors ligne
#10 Le 29/03/2014, à 15:37
- nesthib
Re : [résolu] récupérer une variable dans un fichier
C'est de toute façon une très mauvaise idée que de faire « source fichier_de_config », car on peut lancer par inadvertance des commandes et casser son système.
Une alternative à la solution awk de pingouinux (que je recommande) pour le cas où le nom de thème pourrait comprendre le caractère « = » :
awk '/^Theme1/{gsub("^Theme1=", "", $0); print}' <<<"Theme1=Minimalistic toto tata"
@pingouinux : pour le sed, je conseille de remplacer « .*= » par « ^[^=]+= », pour la raison indiquée ci dessus
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
#11 Le 29/03/2014, à 17:32
- pingouinux
Re : [résolu] récupérer une variable dans un fichier
@nesthib : Tu as raison
Hors ligne
#12 Le 29/03/2014, à 18:17
- Christophe C
Re : [résolu] récupérer une variable dans un fichier
Et sinon, ce VAR=$(grep Theme ~/.config/settings | cut -d = -f 2-), c'est passe-partout ? Il peut y avoir des inconvénients ?
BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».
Hors ligne
#13 Le 29/03/2014, à 18:36
- pingouinux
Re : [résolu] récupérer une variable dans un fichier
VAR=$(grep Theme ~/.config/settings | cut -d = -f 2-)
Je ferais quand même ceci (la chaîne Theme pouvant apparaître ailleurs) :
VAR=$(grep '^Theme=' ~/.config/settings | cut -d = -f 2-)
Dernière modification par pingouinux (Le 29/03/2014, à 18:37)
Hors ligne
#14 Le 29/03/2014, à 19:46
- nesthib
Re : [résolu] récupérer une variable dans un fichier
tu peux faire :
grep -oP '(?<=^Theme1=).*'
c'est plus court et ça évite un pipe + une commande supplémentaire inutilement
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 29/03/2014, à 19:55
- Watael
Re : [résolu] récupérer une variable dans un fichier
C'est de toute façon une très mauvaise idée que de faire « source fichier_de_config »,[...]
d'ailleurs, je me suis débarrassé de tous mes fichiers ~/.bash* : mon terminal est dégueu, je n'ai plus d'alias, ni de fonctions, il faut que je les tape chaque fois que j'ouvre un terminal, c'est tellement plus sûr.
</sarcasme>
XD
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#16 Le 29/03/2014, à 19:58
- nesthib
Re : [résolu] récupérer une variable dans un fichier
(on aura bien compris que je parlais de fichiers de config fait maison pour une appli et non des fichiers de configuration du shell…)
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
#17 Le 29/03/2014, à 21:35
- Josepe36
Re : [résolu] récupérer une variable dans un fichier
Excellent
Développeur distribution Hybryde
www.hybryde.org
Hors ligne