Re: Pipes & Co

Top Page

Reply to this message
Author: Edgar Bonet
Date:  
To: guilde
Subject: Re: Pipes & Co
Le mardi 15 avril, Philippe Beau a écrit :
> cat /tmp/tmp/testnospam |/var/qmail/bin/qmail-spam.sh |cat >toto


Another useless use of cat.

    /var/qmail/bin/qmail-spam.sh < /tmp/tmp/testnospam > toto


> cat /tmp/tmp/test |/var/qmail/bin/qmail-spam.sh |cat >toto
>
> j'ai bien mon email, ou pas mon email


Dans tous les cas tu as un fichier toto, vide ou pas.

> Par contre, dès que je le mets en lieu & place de qmail-queue, ca ne
> marche pas.


Comment ça ne marche pas ? Qu'est-ce qui se passe ? Quelle erreur ?

Je ne connais pas qmail-queue, mais je peux imaginer qu'il trouve ça
bizarre d'être appelé pour recevoir un fichier vide. Peut-être
vaudrait-il mieux ne pas l'appeler quand c'est un spam.

> Ci-joint le contenu de mon script :
>
> #!/bin/sh
>
> tmpfile=/tmp/test-spam-$$
> spamfile=/var/log/spamassassin/spamassassin.log
> cat > $tmpfile
>
> if [ `/bin/grep 'X-Spam-Flag: YES' $tmpfile|/usr/bin/wc -l` != 0 ]; then


C'est moi qui ai fait l'erreur, mais il fallait la corriger : tu dois
ancrer le motif de grep avec ^ et $, autrement tu vas détecter
'X-Spam-Flag: YES' n'importe où. En particulier tu vas détecter comme
spam toute cette discussion. Aussi les appels à wc et test (c.-à-d. [])
sont inutiles :

    if /bin/grep -q '^X-Spam-Flag: YES$' $tmpfile; then


>         cat $tmpfile >>$spamfile
>         rm -f $tmpfile
> else
>         cat $tmpfile
>         rm -f $tmpfile
> fi


Tu peux factoriser rm, je veux dire le sortir de la construction if :

    if /bin/grep -q '^X-Spam-Flag: YES$' $tmpfile; then
        cat $tmpfile >> $spamfile
    else
        cat $tmpfile
    fi
    rm -f $tmpfile


> qu'est ce qui ne pourrait pas aller ??


Tu peux essayer de mettre qmail-spam.sh à la fin de ton pipe, et laisser
à ce dernier le soin d'appeler qmail-queue uniquement si c'est
nécessaire :

    #!/bin/sh


    tmpfile=/tmp/test-spam-$$
    spamfile=/var/log/spamassassin/spamassassin.log
    cat > $tmpfile


    if /bin/grep -q '^X-Spam-Flag: YES$' $tmpfile; then
        cat $tmpfile >> $spamfile
    else
        /var/qmail/bin/qmail-queue.origine < $tmpfile
    fi
    rm -f $tmpfile


Pour info : j'utilise procmail pour ce genre de chose.

Edgar.

-- 
Edgar Bonet                         Tél    : 04 76 88 10 96
Laboratoire Louis Néel -- CNRS      Mobile : 06 77 19 79 39
25 av. des Martyrs, BP 166          Fax    : 04 76 88 11 91
38042 Grenoble cedex 9, France      e-mail : guilde@???