PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datei Zeilenweise auslesen und mehr



giga
14-02-2002, 21:21
Hallo,

ich möchte gern mit Perl ein Script schreiben. Da ich erst angefangen habe mit Perl zu arbeiten und mein Buch nicht hier habe, ein bestimmtes Script aber dringend brauche, hoffe ich mir kann jemand helfen.

Ich möchte eine Datei mit dem Namen list zeilenweise auslesen und mit jeder Zeile jeweils system("rpm -i $variable"); aufrufen. $variable ist dabei jeweils die aktuelle Zeile. Ich muss nämlich sehr viele Dateien installieren und das erscheint mir so am sinnvollsten.

die datei hat den Inhalt von "find ./ | grep .rpm > list"

Wäre echt nett wenn mir jemand helfen würde, danke!

deac
14-02-2002, 21:43
Das geht einfacher.
Du kannst an der Konsole einfach:
rpm -i `find ./`
eingeben. Das Ergebnis ist ähnlich. Allerdings, wenn eine Abhängigkeit nicht gegeben ist, so wird garnichts installiert. Das kann man so umgehen:
rpm hiv --force --nodeps `find ./`
Falls es zu viele Dateien sind, so hilft dies aber nicht weiter. Dann würde ich jedese Verzeichnis extra abklappern und in jedem Verzeichnis
rpm -hiv --force --nodeps *.rpm
aufrufen.

giga
14-02-2002, 21:47
Danke, ich würde aber gerne, dass das ganze auch mit anderen Dateien geht und ich so z.B. Tarballs automatisch installieren kann.

deac
14-02-2002, 22:10
Dies kannst du auch ohne eine Datei anzulegen und ohne Perl:

find ./ | while read $file ; do Deine Befehle [; weitere Befehle [; ... ] ] ; done

giga
14-02-2002, 22:21
bash: read: `/etc/profile.d/tetex.sh': not a valid identifier

Leider erscheint der Fehler...

deac
14-02-2002, 22:25
find ./ | while read file ; do Deine Befehle [; weitere Befehle [; ... ] ] ; done
Tschuldigung, da war ein kleiner Fehler drin.

Doc Maverick
15-02-2002, 11:39
Hi,
hier mal mein Perl-Vorschlag:


#!/usr/bin/perl -w

open(IN,"list") or die "Konnte list nicht öffnen: $!\n";
my @lines;
@lines=<IN>;
chomp(@lines);
close(IN);

foreach(@lines)
{
# hier soll mal das "prog" bla mit einer Zeile von list ausgeführt werden
`bla $_`;
}

giga
15-02-2002, 18:02
Danke euch beiden! Genau sowas woltle ich!

macolo
29-09-2002, 23:10
#!/bin/bash
cat /pfad/file | while read line
do
echo $line
done

geht wunderbar.

bsp:

das ist eine zeile
das ist die zweite zeile

aber


for zeile in $(cat /pfad/file)
do
echo $zeile
done

gibt nur je ein wort pro zeile aus. der delimiter ist also ein space? kann man das irgendwie fixen?

bsp:

das
ist
eine
zeile
das
ist
die
zweite
zeile

greets

macolo