Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
BASH: ini file auslesen, kommentare auslassen

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
killerhippy



Anmeldungsdatum: 19.05.2000
Beiträge: 529

BeitragVerfasst am: 27. Apr 2003 19:18   Titel: BASH: ini file auslesen, kommentare auslassen

Hi coders und andere,

ich habe ein somefile.ini, das folgende Struktur hat:

---schnipp---
####### comment frame start

# comment
KEYWORD=VALUE

...

####### comment frame end

...
---schnapp---

und ein bash-script, das die KEYWORD=VALUEs auslesen und verwerten soll. Bisher bin ich zu folgendem code gekommen:

code:

for I in `awk '{ print $1 }' somefile.ini`; do
HAVE_COMMENT=`echo $I | grep "^#"`
if [ ! $HAVE_COMMENT ]; then
export $I
fi
done



...was aber elendig langsam ist. In perl hätte ich sowas wie ~/^#/ gefragt, aber das ist in bash-scripten wohl nicht direkt möglich.

Wie macht man das eleganter und vor allem schneller, das ein ini-file geparst wird, wobei Kommentare beginnend mit # nicht beachtet werden?
_________________
Es gibt keine dumme Fragen!

Killerhippy
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

rattengift
Gast





BeitragVerfasst am: 27. Apr 2003 21:05   Titel: Re: BASH: ini file auslesen, kommentare auslassen

hi, am einfachsten und schnellsten geht das wohl mit
code:

source somefile.rc


mfg rg
 

rattengift
Gast





BeitragVerfasst am: 27. Apr 2003 21:08   Titel: Re: BASH: ini file auslesen, kommentare auslassen

oops. nee, war natürlich mist. ich geh jetzt besser schlafen.
 

rattengift
Gast





BeitragVerfasst am: 27. Apr 2003 22:15   Titel: Re: BASH: ini file auslesen, kommentare auslassen

bin nun doch noch da.
richtig, du wolltest ja nicht nur zuweisen sondern auch exportieren.
code:
#!/bin/bash

while read I IGNORE; do
[ "${I#\#}" = "$I" ] && [ "$I" != "" ] && export $I
done < somefile.rc

ich hoffe, das geht nun. PS: der erste vergleich prüft auf kommentar, der zweite filtert leerzeilen aus.
 

killerhippy



Anmeldungsdatum: 19.05.2000
Beiträge: 529

BeitragVerfasst am: 27. Apr 2003 22:50   Titel: Re: BASH: ini file auslesen, kommentare auslassen

Hi rattengift,

vielen Dank, das fluppt ja wie gewienert

...und schon wieder eine Konstruktion kennengelernt, auf die ich nicht von alleine gekommen wäre
_________________
Es gibt keine dumme Fragen!

Killerhippy
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

rattengift
Gast





BeitragVerfasst am: 27. Apr 2003 23:02   Titel: Re: BASH: ini file auslesen, kommentare auslassen

> vielen Dank, das fluppt ja wie gewienert

schön, dass es klappt.
deine version war langsam, weil für jede zeile sowohl awk als auch grep aufgerufen werden mussten. (in meiner version nur bash-builtins).

> ...und schon wieder eine Konstruktion kennengelernt, auf die ich nicht von alleine gekommen wäre

ääh, allein wär ich da ja wohl auch nicht draufgekommen....
den trick mit dem "while .... done < file" hab ich auch hier im forum mal aufgeschnappt.
die sache mit der parametersubstitution (#\#) kannst du im kofler nachlesen. es gibt natürlich noch viel mehr möglichkeiten (wie immer bei linux).
 

rattengift
Gast





BeitragVerfasst am: 28. Apr 2003 11:37   Titel: Re: BASH: ini file auslesen, kommentare auslassen

hier ist noch eine andere variante, die nochmal einfacher ist. sie ist deiner ursprünglichen version ähnlich (aber grep wird hier nur 2x gerufen):
code:
for I in $(grep -v "^\W*\#" somefile.rc | grep -v "^$"); do
export $I
done


1.grep: kommentarzeilen raus, 2.grep: leerzeilen raus. (das 2.grep bräuchte man nicht, da "for" leerzeilen auch ignoriert, aber mir ist es lieber, wenn das gleich von grep erledigt wird).

mir ist noch eingefallen, dass es am elegantesten/schnellsten wohl mit xargs gehen müsste. bin aber grad auf arbeit u kanns nicht ausprobieren.
 

Jochen
Gast





BeitragVerfasst am: 29. Apr 2003 10:55   Titel: Re: BASH: ini file auslesen, kommentare auslassen

@rattengift: Kein xargs! export ist Shell-Builtin, daher werden die Variablen alle für die ausführende Shell gesetzt. Wenn Du xargs verwendest, wird für die Ausführung der von xargs zusammengestoppelten Prozesse eine Subshell gestartet. Diese bekommt dann jede Menge Umgebungsvariablne gesetzt, aber nicht die eigentliche Shell, die sie bekommen soll!

Rückfrage: Ist das export denn wirklich nötig? Ansonsten würde ". somefile.ini" (wie rattengift als allererstes gepostet hat) ja vollkommen ausreichen. Mir schien es, als wäre das ein Überbleibsel von killerhippies ersten Näherung an sein Problem?

Jochen
 

killerhippy



Anmeldungsdatum: 19.05.2000
Beiträge: 529

BeitragVerfasst am: 29. Apr 2003 11:19   Titel: Re: BASH: ini file auslesen, kommentare auslassen

Hi Jochen,

ob das export wirklich nötig ist? Hm, wie du dir ja sicher denken kannst, geht es nur darum, dem script die Variablen und deren Zuweisungen aus dem ini File zugänglich zu machen.

Wenn ich also z. B. in $I den Inhalt "MYVAR=/dies/und/das" (ohne Anführungszeichen) habe, habe ich es bisher nicht gebacken gekriegt, die für das script neue Variable MYVAR mit "/dies/und/das" zu belegen, außer mit export. Nach Beendigung des scripts, sind die exportieren Variablen ja wieder weg, damit bin ich so schon zufrieden...

@rattengift: Die Lösung mit der while Schleife gefällt mir bisher am Besten, da ich da ohne eine weitere Subshell mit grep auskomme.

@beide: Eine andere Lösung ohne export und weiteren Subshells würde mich schon interessieren...
_________________
Es gibt keine dumme Fragen!

Killerhippy
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

Jochen
Gast





BeitragVerfasst am: 29. Apr 2003 12:26   Titel: Re: BASH: ini file auslesen, kommentare auslassen

Sag ich ja!

Du hast es nicht gebacken bekommen, weil Du Dich unnötigerweise in die while-Schleife verbissen hast. Probier mal folgendes:

  • Datei namens "variablen" mit Inhalt
    VAR1=hempel ; VAR2=egal    # Auch mit Kommentar!

  • Datei namens "skript"
    code:
    #!/bin/sh
    . variablen
    echo $VAR1
    echo $VAR2

    Wetten, Du erhältst "hempel" und "egal" ausgegeben, wenn Du "./skript" aufrufst? Und ganz ohne export...

    Alternativ kannst auch mal folgendes ausprobieren:
    ZEILE="VAR=irgendwas" ; eval "$ZEILE" ; echo $VAR
    Geht auch ohne export...

    Es ist eher eine Sache des Prinzips, zugegebenermassen. Aber es könnten ja andere Programme die exportierten Variablen sehen und versuchen zu interpretieren. Wenn man die Variablen nicht exportiert, sind sie nur für die Shell interessant.

    Jochen
  •  

    killerhippy



    Anmeldungsdatum: 19.05.2000
    Beiträge: 529

    BeitragVerfasst am: 29. Apr 2003 13:17   Titel: Re: BASH: ini file auslesen, kommentare auslassen

    Hi Jochen,

    wenn man nur weiß, wonach man suchen muß, ist man bash ja recht informativ

    code:

    # fetching variables from the ini-file

    source ./file.ini || { echo -e "\nmovie_db.ini ist korrupt!" &&
    echo -e "\nInitialisierung fehlgeschlagen!\n" &&
    exit 1; }




    ist nun die (wahrscheinlich) endgültige Form. Wäre ja auch zu doof, wenn es keine built-in Funktion diesbezüglich gegeben hätte...


    Zuletzt bearbeitet von killerhippy am 29. Apr 2003 13:17, insgesamt 1-mal bearbeitet
     
    Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

    Beiträge vom vorherigen Thema anzeigen:   
         Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
    Seite 1 von 1

     
    Gehen Sie zu:  

    Powered by phpBB © phpBB Group
    pro_linux Theme © 2004 by Mandaxy