Anzeige:
Ergebnis 1 bis 5 von 5

Thema: for $(cat xyz) zeilenweise

  1. #1
    Registrierter Benutzer
    Registriert seit
    02.07.2004
    Beiträge
    456

    for $(cat xyz) zeilenweise

    Hi Leute

    ich hab hier ein kleines Problem mit meiner bash. Ich möchte in einer for-Schleife eine Datei zeilenweise an ein Programm übergeben. Genauer gesagt habe ich eine Datei, in der eine Reihe Kernelmodule eingetragen ist (jede Zeile eines). Hinter jedem Modul sollen nun auch noch Parameter angegeben werden können. Momentan ist es allerdings so, daß die Datei wortweise ausgelesen wird. Also so:

    Code:
    ISTS [/]# for module in $(tail /etc/pc_network_modules.conf |sed s/.ko//); do echo "mod: "$module; done
    mod: 3c59x
    mod: e1000
    mod: bcm5700
    mod: -io
    mod: 0x300
    mod: e100
    mod: sk98lin
    mod: tg3
    mod: r8169
    mod: mii
    mod: pcnet32
    Ich möchte aber, daß die Ausgabe so ausschaut (bzw modprobe damit gestartet wird):
    Code:
    mod: 3c59x
    mod: e1000
    mod: bcm5700 -io 0x300
    mod: e100
    mod: sk98lin
    mod: tg3
    mod: r8169
    mod: mii
    mod: pcnet32
    Wie mach ich das?

    Danke

    Gruß,
    Hendrik

    PS: Die Datei pc_network_modules.conf sieht so aus:
    Code:
    3c59x.ko
    e1000.ko
    bcm5700.ko -io 0x300
    e100.ko
    sk98lin.ko
    tg3.ko
    r8169.ko
    mii.ko
    pcnet32.ko

  2. #2
    Registrierter Benutzer Avatar von phate
    Registriert seit
    14.02.2003
    Beiträge
    149
    Code:
    while read mod modopts; do echo "Mod: ${mod%.ko} Opts: $modopts"; done < /etc/pc_network_modules.conf
    Synoym lassen sich in dieser Schleife die Befehle einbauen, die Du mit den Modulen und deren Optionen ausführen willst.

  3. #3
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    phates Lösung ist zwar vorzuziehen, der Vollständigkeit halber noch eine andere Möglichkeit:
    Code:
    tail /etc/pc_network_modules.conf |sed s/.ko// | while read mod; do echo "Mod: $mod";done

  4. #4
    Registrierter Benutzer
    Registriert seit
    02.07.2004
    Beiträge
    456
    Recht herzlichen Dank! Funzt wunderbar.

  5. #5
    Registrierter Benutzer
    Registriert seit
    30.04.2001
    Beiträge
    89

    Die kenn ich noch nicht...

    Ich werde bei Gelegenheit mal Eure Tips ausprobieren. Ich habe mir bisher immer mit dem IFS (inter-field-seperator?) geholfen.

    Code:
    #!/bin/bash
    
    #IFS auf "newline" setzen
    IFS="
    "
    
    for a in $(cat /path/to/file); do
       #zeile ausgeben
       echo $a
    done
    
    #IFS wieder zurücksetzen auf space+tab+newline
    IFS=" 
    "
    Diese Variante hat leider den Nachteil, dass einige Programme (z.B. ls) nicht damit klarkommen...

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •