1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Deutsch
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  1. Informatik Forum
  2. Software und Anwendungen
  3. Betriebssysteme

Über Shellscript Zeile in einem config-file ändern

    • Linux
  • Incazzato
  • 4. April 2006 um 15:25
  • Unerledigt
  • Incazzato
    8
    Incazzato
    Mitglied
    Punkte
    570
    Beiträge
    85
    • 4. April 2006 um 15:25
    • #1

    Ich bräuchte öfter die Möglichkeit, mir von einem Skript Werte in einer simplen Textdatei (config-file) ändern zu lassen.

    z.B. eine Zeile
    "VERSION=x"
    auf
    "VERSION=y"
    ändern.

    Wie lässt sich sowas am einfachsten machen?

  • daff
    14
    daff
    Mitglied
    Reaktionen
    11
    Punkte
    2.021
    Beiträge
    386
    • 4. April 2006 um 17:34
    • #2

    perl (der sed, awk, oder sonstwas) bietet sich für sowas an denk ich:

    Code
    > perl -p -i -e 's/VERSION=x/VERSION=y/g' textfile


    Das ersetzt alle Vorkommnisse von VERSION=x durch VERSION=y. Kann man auch beliebig komplexer machen, siehe perl-Doku oder so.

    Restrain the specimen!

  • thanatos5
    8
    thanatos5
    Mitglied
    Punkte
    625
    Beiträge
    116
    • 5. April 2006 um 01:31
    • #3

    warum kompliziert machen wenn du ersetzen machen kannst mit VIM...:devil:

    "Am Anfang war ich, und dann kamst du,
    und nun wird mir schlecht :-)):devil:
    "

  • daff
    14
    daff
    Mitglied
    Reaktionen
    11
    Punkte
    2.021
    Beiträge
    386
    • 5. April 2006 um 15:42
    • #4

    Weil er von einem Skript gesprochen hatte, das er braucht. Und einen perl- (oder sed-, oder awk-, oder sonstwas) -Einzeiler in ein Skript zu schreiben, oder von der Shell aus zu benutzen ist noch einfacher, als jedes mal Vim zu laden oder gar, Gott behüte, ein Vim-Skript zu schreiben.

    Restrain the specimen!

  • Incazzato
    8
    Incazzato
    Mitglied
    Punkte
    570
    Beiträge
    85
    • 6. April 2006 um 15:30
    • #5

    Wo ich schon mal dabei bin:
    Wie kann ich einem Shell-Skript beibringen, jede Zeile eines config-Files als Environment-Variable zu exportieren, damit ich im conf-File kein "export" stehen habe (ausgenommen Kommentare, die mit '#' beginnen)?

    z.B. ein File z.conf
    VERSION=12
    PATH=/xy

    das Skript soll z.conf einlesen und daraus die Befehle
    "export VERSION=12"
    und
    "export PATH=/xy"
    generieren.

    Vermutlich müsste ich dazu nur wissen, wie ich zeilenweise lesen kann und wie ich einen substring-Vergleich machen kann (1. Zeichen). Wenn möglich nur mit Shell-Bordmitteln.

  • Incazzato
    8
    Incazzato
    Mitglied
    Punkte
    570
    Beiträge
    85
    • 6. April 2006 um 15:57
    • #6

    Wo ich schon mal dabei bin:
    Wie kann ich einem Shell-Skript beibringen, jede Zeile eines config-Files als Environment-Variable zu exportieren, damit ich im conf-File kein "export" stehen habe (ausgenommen Kommentare, die mit '#' beginnen)?

    z.B. ein File z.conf
    VERSION=12
    PATH=/xy

    das Skript soll z.conf einlesen und daraus die Befehle
    "export VERSION=12"
    und
    "export PATH=/xy"
    generieren.

    Vermutlich müsste ich dazu nur wissen, wie ich zeilenweise lesen kann und wie ich einen substring-Vergleich machen kann (1. Zeichen). Wenn möglich nur mit Shell-Bordmitteln.

  • [fl]Quel`Tos
    12
    [fl]Quel`Tos
    Mitglied
    Reaktionen
    14
    Punkte
    1.384
    Beiträge
    262
    • 6. April 2006 um 15:57
    • #7

    mhh.. so auf die schnelle.. so ca. müsst das funktionieren denk ich:

    Code
    cp z.conf z.conf.temp
    `sed -i "s/^#.*$//" z.conf.temp`
    
    
    while read var
    do
      `export $var`
    done < z.conf.temp
    
    
    rm z.conf.temp
    Alles anzeigen


    bes. beim sed-ausdruck bin ich mir aber nicht 100% sicher :winking_face:

    Let us be thankful we have commerce. Buy more. Buy more now. Buy. And be happy.

  • Jensi
    28
    Jensi
    Mitglied
    Reaktionen
    141
    Punkte
    8.486
    Beiträge
    1.649
    • 6. April 2006 um 16:45
    • #8
    Zitat

    Wie kann ich einem Shell-Skript beibringen, jede Zeile eines config-Files als Environment-Variable zu exportieren, damit ich im conf-File kein "export" stehen habe (ausgenommen Kommentare, die mit '#' beginnen)?


    Das geht auch viel einfacher:

    Code
    source filename


    Oder noch kürzer:

    Code
    . filename
  • Incazzato
    8
    Incazzato
    Mitglied
    Punkte
    570
    Beiträge
    85
    • 6. April 2006 um 17:43
    • #9
    Zitat von [fl]Quel`Tos

    mhh.. so auf die schnelle.. so ca. müsst das funktionieren denk ich:

    Code
    cp z.conf z.conf.temp
    `sed -i "s/^#.*$//" z.conf.temp`
    
    
    while read var
    do
      `export $var`
    done < z.conf.temp
    
    
    rm z.conf.temp
    Alles anzeigen


    bes. beim sed-ausdruck bin ich mir aber nicht 100% sicher :winking_face:


    hmm, woher kriegt "while read var" die Daten?
    Jensi: wäre schön, dabei werden die Variablen aber nicht exportiert.

    Ich krieg von den blöden Skriptsprachen Kopfschmerzen...

  • Jensi
    28
    Jensi
    Mitglied
    Reaktionen
    141
    Punkte
    8.486
    Beiträge
    1.649
    • 6. April 2006 um 19:06
    • #10

    Was willst du damit denn machen?

  • [fl]Quel`Tos
    12
    [fl]Quel`Tos
    Mitglied
    Reaktionen
    14
    Punkte
    1.384
    Beiträge
    262
    • 7. April 2006 um 00:06
    • #11
    Zitat von Incazzato

    hmm, woher kriegt "while read var" die Daten?

    Code
    while read var
    do
      ...
    done [b]< z.conf.temp[/b]


    da her :winking_face:

    könntest glaub ich auch so machen:

    Code
    cat z.conf.temp | while read var
    bla..

    Let us be thankful we have commerce. Buy more. Buy more now. Buy. And be happy.

  • Incazzato
    8
    Incazzato
    Mitglied
    Punkte
    570
    Beiträge
    85
    • 7. April 2006 um 12:18
    • #12
    Zitat von [fl]Quel`Tos
    Code
    while read var
    do
      ...
    done [b]< z.conf.temp[/b]


    da her :winking_face:


    ach so... sowas hab ich noch nie gesehen.

    Zitat von Jensi

    Was willst du damit denn machen?


    Flexible, automatische Generierung eines make-Environments

  • Jensi
    28
    Jensi
    Mitglied
    Reaktionen
    141
    Punkte
    8.486
    Beiträge
    1.649
    • 7. April 2006 um 13:04
    • #13
    Zitat von Incazzato

    Flexible, automatische Generierung eines make-Environments

    autoconf? :winking_face:

  • colo
    7
    colo
    Mitglied
    Reaktionen
    2
    Punkte
    482
    Beiträge
    95
    • 9. April 2006 um 12:40
    • #14
    Zitat von [fl]Quel`Tos
    Code
    while read var
    do
      ...
    done [B]< z.conf.temp[/B]

    da her :winking_face:

    könntest glaub ich auch so machen:

    Code
    cat z.conf.temp | while read var
    bla..

    Ersteres liest zeilenweise, letzteres Whitespace-separiert. Kommt eben drauf an, was man braucht. :)

    Free Software. Free Society. Better Lives.

    Mein Blog - Thema Technik

  • [fl]Quel`Tos
    12
    [fl]Quel`Tos
    Mitglied
    Reaktionen
    14
    Punkte
    1.384
    Beiträge
    262
    • 10. April 2006 um 09:46
    • #15

    glaub ich eher nicht:

    Code
    $ cat testfile
    this will take a while
    Code
    $ while read foo bar
    > do
    > echo "$foo"
    > echo "$bar"
    > done < testfile
    this
    will take a while
    Code
    $ cat testfile | while read foo bar
    > do
    > echo $foo
    > echo $bar
    > done
    this
    will take a while


    tun beide genau das selbe - od. hab ich da wo an fehler?

    Let us be thankful we have commerce. Buy more. Buy more now. Buy. And be happy.

  • Incazzato
    8
    Incazzato
    Mitglied
    Punkte
    570
    Beiträge
    85
    • 10. April 2006 um 16:09
    • #16
    Zitat von Jensi

    autoconf? :winking_face:


    nein :winking_face:

  • MaxAuthority
    17
    MaxAuthority
    Gewinner des Desktop-Contest 2002
    Reaktionen
    5
    Punkte
    3.165
    Beiträge
    626
    • 10. April 2006 um 17:22
    • #17
    Zitat von Incazzato

    nein :winking_face:

    Dann probier mal das: http://onion.dynserv.net/%7Etimo/tconf.html

    Bash-basiert, und find ich sehr nett zum verwenden.

    http://vimperator.org - Make Firefox behave like Vim

  • colo
    7
    colo
    Mitglied
    Reaktionen
    2
    Punkte
    482
    Beiträge
    95
    • 11. April 2006 um 02:02
    • #18
    Zitat von [fl]Quel`Tos

    glaub ich eher nicht:

    Code
    d. hab ich da wo an fehler?[/quote] 
    Nope - ich hab nur den dummen Fehler begangen, dein Konstrukt auf die Schnelle mit sowas schaendlichem wie
    [code]for i in `cat file`; do ...; done;

    zu verwechseln :winking_face:

    Free Software. Free Society. Better Lives.

    Mein Blog - Thema Technik

  • Incazzato
    8
    Incazzato
    Mitglied
    Punkte
    570
    Beiträge
    85
    • 11. April 2006 um 19:25
    • #19
    Zitat von MaxAuthority

    Dann probier mal das: http://onion.dynserv.net/%7Etimo/tconf.html

    Bash-basiert, und find ich sehr nett zum verwenden.


    Die Freiheit hab ich leider nicht. Das betreffende Projekt ist sehr eng an ein vorhandenes SDK (embedded system) geknüpft, das eine ganz eigene Makefile-Struktur hat. Meine Skripte sollen nur ein paar Sachen automatisieren (benötigtes Environment erstellen, make-targets aufrufen, die Version des SDK berücksichtigen, ein config-Fike in Compilerflags "übersetzen"...)

    danke für eure Hilfe

  • Maximilian Rupp 27. Dezember 2024 um 00:11

    Hat das Thema aus dem Forum Betriebssysteme nach Betriebssysteme verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung

  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  • Deutsch
  • English
Zitat speichern