PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : for $(cat xyz) zeilenweise



7.e.Q
02-12-2005, 09:34
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:



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


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:


3c59x.ko
e1000.ko
bcm5700.ko -io 0x300
e100.ko
sk98lin.ko
tg3.ko
r8169.ko
mii.ko
pcnet32.ko

phate
02-12-2005, 09:44
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.

Joghurt
02-12-2005, 14:27
phates Lösung ist zwar vorzuziehen, der Vollständigkeit halber noch eine andere Möglichkeit:

tail /etc/pc_network_modules.conf |sed s/.ko// | while read mod; do echo "Mod: $mod";done

7.e.Q
05-12-2005, 07:42
Recht herzlichen Dank! :) Funzt wunderbar.

jean_luc_picard
13-12-2005, 19:38
Ich werde bei Gelegenheit mal Eure Tips ausprobieren. Ich habe mir bisher immer mit dem IFS (inter-field-seperator?) geholfen.



#!/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...