For Schleife

30/08/2007 - 10:36 von Stefan Becker | Report spam
Hallo,

ich habe folgendes Script:

#!/bin/sh
echo "Script gestartet"
for MAIL in 'ls /var/qmail/mailnames/lz-hochlar.de'; do
sa-learn --username=lz-hochlar --ham
/var/qmail/mailnames/lz-hochlar.de/${MAIL}/Maildir/cur/
sa-learn --username=lz-hochlar --spam
/var/qmail/mailnames/lz-hochlar.de/${MAIL}/Maildir/.spam/cur/
done; exit 0

ls /var/qmail/mailnames/lz-hochlar.de direkt auf der Shell eingegeben,
gibt die korrkten verzeichnisse info und test zurück.

Wenn ich das Script dann so starte kommt:
Script gestartet
Unable to open /var/qmail/mailnames/lz-hochlar.de/ls: Datei oder
Verzeichnis nicht gefunden
Unable to open /var/qmail/mailnames/lz-hochlar.de/Maildir/cur/: Datei
oder Verzeichnis nicht gefunden
Learned from 0 message(s) (0 message(s) examined).

Warum macht er das nicht korrekt?

_-
MfG

Stefan Becker
 

Lesen sie die antworten

#1 Paul Hink
30/08/2007 - 11:11 | Warnen spam
Stefan Becker wrote:

ich habe folgendes Script:

#!/bin/sh
echo "Script gestartet"
for MAIL in 'ls /var/qmail/mailnames/lz-hochlar.de'; do
sa-learn --username=lz-hochlar --ham
/var/qmail/mailnames/lz-hochlar.de/${MAIL}/Maildir/cur/
sa-learn --username=lz-hochlar --spam
/var/qmail/mailnames/lz-hochlar.de/${MAIL}/Maildir/.spam/cur/
done; exit 0

ls /var/qmail/mailnames/lz-hochlar.de direkt auf der Shell eingegeben,
gibt die korrkten verzeichnisse info und test zurück.

Wenn ich das Script dann so starte kommt:
Script gestartet
Unable to open /var/qmail/mailnames/lz-hochlar.de/ls: Datei oder
Verzeichnis nicht gefunden
Unable to open /var/qmail/mailnames/lz-hochlar.de/Maildir/cur/: Datei
oder Verzeichnis nicht gefunden
Learned from 0 message(s) (0 message(s) examined).

Warum macht er das nicht korrekt?



Weil du ' (einfaches Anführungszeichen) und ` (accent grave)
verwechselt hast, in obigem Script wird das "ls
/var/qmail/mailnames/lz-hochlar.de" nicht ausgeführt, sondern so wie es
ist als Zeichenfolge interpretiert.

Ersetze

for MAIL in 'ls /var/qmail/mailnames/lz-hochlar.de'; do

durch

for MAIL in `ls /var/qmail/mailnames/lz-hochlar.de`; do

uns das Script sollte tun, was du möchtest.

Besser ist allerdings:

#!/bin/sh
echo "Script gestartet"
for MAIL in /var/qmail/mailnames/lz-hochlar.de/*; do
sa-learn --username=lz-hochlar --ham "${MAIL}/Maildir/cur/"
sa-learn --username=lz-hochlar --spam "${MAIL}/Maildir/.spam/cur/"
done
exit 0

(Kein useless use of `ls` und robuster, was die Mailboxnamen angeht.)

Paul

Ähnliche fragen