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 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 smile.

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 ... cool

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 hmm

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 tongue

@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 wink


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

#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

Christophe C #12 a écrit :
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 wink


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 29/03/2014, à 19:55

Watael

Re : [résolu] récupérer une variable dans un fichier

nesthib a écrit :

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.

Hors 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 : 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

#17 Le 29/03/2014, à 21:35

Josepe36

Re : [résolu] récupérer une variable dans un fichier

Excellent lol


Développeur distribution Hybryde
www.hybryde.org

Hors ligne