Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash vient d'être divulguée, il est recommandé de mettre à jour son système (plus de détails)

*** 28 sept. nouvelle mise à jour (4.2-2ubuntu2.5 ou 4.3-7ubuntu1.4) *** pour mettre à jour, lancez dans un terminal :
sudo apt-get update ; sudo apt-get upgrade bash

#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)


XL-WALLPAPER - changeur de fonds d'écran libre et très léger pour Xfce et LXDE.
Plank-config - Logiciel de configuration pour le dock Plank.

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


Utilisateur d'Archlinux | Cruncheur BOINC | Bépoiste
Admin de Flood.fr | Mon ~ | Mes dotfiles
«Your behavior is not funny and is wasting the time of the federal government !»

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)


XL-WALLPAPER - changeur de fonds d'écran libre et très léger pour Xfce et LXDE.
Plank-config - Logiciel de configuration pour le dock Plank.

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)


XL-WALLPAPER - changeur de fonds d'écran libre et très léger pour Xfce et LXDE.
Plank-config - Logiciel de configuration pour le dock Plank.

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)


XL-WALLPAPER - changeur de fonds d'écran libre et très léger pour Xfce et LXDE.
Plank-config - Logiciel de configuration pour le dock Plank.

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 ?


XL-WALLPAPER - changeur de fonds d'écran libre et très léger pour Xfce et LXDE.
Plank-config - Logiciel de configuration pour le dock Plank.

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


eval, c'est mal.

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

Haut de page ↑