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
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
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
@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
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.