PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mehrere Dateien an Programm übergeben



Ironsoft
29-11-2001, 19:43
Hi,

weiß jemand ein einfaches Bash-Skript, welches z.B. alle *.conf Dateien eines Verzeichnisses in der Form

cat "erste-conf-Datei" | program1
.
.
.
cat "letzte-conf-Datei" | program1

übergibt ?

Thomas

Hans-Georg Normann
29-11-2001, 22:05
Hi Ironsoft

meinst Du das?

export DATEIEN=`ls *.conf`
if test "$DATEIEN"=""; then
exit
fi

for DUMMY in $DATEIEN; do
cat $DUMMY | Programm1
done;

Hans

Ironsoft
30-11-2001, 21:06
Perfekt, klappt wirklich anstandslos mit dieser kleinen Änderung:

Danke, danke, danke :D

export DATEIEN=`ls *.conf`
if test $DATEIEN=""; then
exit
fi

for DUMMY in $DATEIEN; do
cat $DUMMY | Programm1
done;

Hans-Georg Normann
30-11-2001, 22:34
Hi IronSoft

Schön daß es läuft. Ich habe mal beide Varianten in der Bash getstet. Sie laufen beide. Meine Variante beruht darauf, daß bei einigen UNIXEN $DAEIEN="" falsch liefert, wenn $DATEIEN leer ist. Da muß dann "$DATEIEN" verwendet werden.

Weiß nicht, ob das an den jeweiligen Unixversionen oder an der verwendeten Shell liegt.

Hans

micha
01-12-2001, 11:38
Test hat eine Option, um leere Strings zu überprüfen:


if [ -z "$DATEIEN" ]; then

Überprüft, ob der String leer ist.


if [ -n "$DATEIEN" ]; then

Überprüft, ob der String nicht leer ist.

Wenn Du ohne die Option überprüfen willst, ob der String etwas enthält, solltest Du noch einen Buchstaben mit in die Überprüfung aufnehmen, und testen, ob nur dieser Buchstabe vorhanden ist, da die andere Vorgehensweise, wie gesehen, zu Fehlern führen kann:


if [ "x$DATEIEN" = "x" ]; then


Gruß micha

thommy
03-12-2001, 08:09
Warum nicht gleich:

for DUMMY in `ls *.conf`; do
...
done

??? Erspart das explizite Testen!

Thomas

Hans-Georg Normann
03-12-2001, 23:09
Hi tommy

mir fehlt Grundlgenwissen! (Da merkt man, daß fünf Tage Durchblickerlehrgang, davon zwei Tage Verkaufshow :D , noch keine fundierte Ausbildung darstellen!)

Was passiert, wenn 'ls *.conf' kein Ergebnis liefert. Wird die For-Schleife kein- oder einmal durchlaufen?

Wenn 'ls *.conf' kein Ergebnis liefert, wird erhält man dann im genannten Beispiel nicht eine Fehlermeldung wie "Datei nicht gefunden"?

Hans

thommy
04-12-2001, 07:47
@Hans-Georg,

die Schleife wird nicht betreten, wenn `ls` kein Ergebnis liefert. Aber Du hast Recht, dass es in diesem Fall eine Fehlermeldung hagelt.

Um diese zu unterdrücken, bieten sich zwei Varianten an:

for DUMMY in `ls *.conf 2>/dev/null`; do
...
done

oder, für den Fall, dass es im Skript etliche solcher Meldungen zu unterdrücken gilt, ein

exec 2>&-

zu Beginn des Skripts, womit die Standardfehlerausgabe geschlossen wird.

Thomas