Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Script bash, lecture fichier "on the fly"

11 réponses
Avatar
Brice Méalier
Bonjour

pour programmer un mail popper sous fvwm m'indiquant le sujet, la
provenance et la destination de mails entrant sur ma machine, je
souhaite utiliser un script bash.

Donc voici mon environnement:
j'utilise des boites au format mbox stockées dans $HOME/mail/ j'utilise
procmail en que MDA.
Dans procmail, les mails sont triés selon les headers et pour mon petit
mail popper, j'utilise la règle suivante:


:0 c
*
|newMail.sh


tout nouveau mail est donc copié et passé dans un script bash.

Ce script doit simplement extraire les headers "From", "Subject" et "To"
et les envoyer dans des variables qui me serviront un peu plus tard pour
mon popper.

Ce que j'ai fait pour le moment:

#!/bin/bash

FVWM=`ps -ef|grep '[f]vwm -s'`

# make sure we are running fvwm
if [ -z "$FVWM" ]
then
exit 0
fi

to=`grep -v "\-To"|grep -m 1 "To:"|tr " " "_"`
subject=`grep -m 1 "Subject:"|tr " " "_"`
from=`grep -m 1 "From:"|tr " " "_"`

fvwmfunction='MailPopup'\ "$from"\ "$subject"\ "$to"

echo "$fvwmfunction"|FvwmCommand -c




le problème est que les données à lire sont volatiles et il n'est
capable de m'extraire seulement le premier champ spécifié (ici le champ
To, si je change l'ordre, il me lit le premier de la série).

Donc 2 solutions (il me semble): lancer les 3 "grep" en même tempset
enregistrer leurs sorties respectives (je crois pas ça possible...) ou
enregistrer l'entrée du script dans un fichier et travailler avec ce
fichier puis y faire un echo "">fichier en attendant le prochain mail.


Je suis débutant en bash et je bloque par manque de connaissances là! je
sais pas comment faire!

Auriez-vous une idée?


Cordialement Brice




--
Brice Méalier
mealier_brice@yahoo.fr
Linux user nb. 372699
Debian Sarge


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org

10 réponses

1 2
Avatar
Brice Méalier
On Sat, Jul 09, 2005 at 07:54:28AM +0200, Jean-Damien Durand wrote :
Tu peut recuperer les headers que tu veux en une seule fois, par example:

headers=`egrep "^(To:|Subject:|From:)"|tr " " "_"`|sort -t: -u|xargs
echo "MailPopup $headers"|FvwmCommand -c

(coup de bol: From, Subject et To sont dans le bon ordre alphabetique - le fait que tu
changes les espaces en '_' aide - sinon ca serait un peu plus tordu a cause du echo
apres).

En esperant que ca marche pour toi...




Merci de la réponse mais ça marche pas!


J'ai donc décidé de sauver le mail dans un fichier temporaire et de
travailler ce fichier:

tmp_mail=/tmp/tmp_mail

cat > $tmp_mail

to=`grep -v "-To" < $tmp_mail |grep -m 1 "To:"|tr " " "_"`
subject=`grep -m 1 "Subject:" < $tmp_mail |tr " " "_"`
from=`grep -m 1 "From:" < $tmp_mail |tr " " "_"`


rm $tmp_mail

fvwmfunction='MailPopup' "$from" "$subject" "$to"

echo "$fvwmfunction"|FvwmCommand -c


Merci


--
Brice Méalier

Linux user nb. 372699
Debian Sarge


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Leopold BAILLY
Brice Méalier writes:

On Sat, Jul 09, 2005 at 07:54:28AM +0200, Jean-Damien Durand wrote :
Tu peut recuperer les headers que tu veux en une seule fois, par example:

headers=`egrep "^(To:|Subject:|From:)"|tr " " "_"`|sort -t: -u|xargs
echo "MailPopup $headers"|FvwmCommand -c

(coup de bol: From, Subject et To sont dans le bon ordre alphabetique - le fait que tu
changes les espaces en '_' aide - sinon ca serait un peu plus tordu a ca use du echo
apres).

En esperant que ca marche pour toi...




Merci de la réponse mais ça marche pas!


J'ai donc décidé de sauver le mail dans un fichier temporaire et de
travailler ce fichier:

tmp_mail=/tmp/tmp_mail

cat > $tmp_mail

to=`grep -v "-To" < $tmp_mail |grep -m 1 "To:"|tr " " "_"`
subject=`grep -m 1 "Subject:" < $tmp_mail |tr " " "_"`
from=`grep -m 1 "From:" < $tmp_mail |tr " " "_"`


rm $tmp_mail

fvwmfunction='MailPopup' "$from" "$subject" "$to"

echo "$fvwmfunction"|FvwmCommand -c


Merci



Un script perl aurait été plus adapté, il t'éviterai de lire 3 fois le mail.

L'entée standard peut être traitée ligne à ligne, pour chaque heade r tu peux
donc alimenter la variable qui va bien, enfin tu peus t'arrêter de lire d ès que
toutes les variables sont renseignées.


Léo.
Avatar
Brice Méalier
On Sun, Jul 10, 2005 at 01:56:35PM +0200, Leopold BAILLY wrote :
Brice Méalier writes:

> On Sat, Jul 09, 2005 at 07:54:28AM +0200, Jean-Damien Durand wrote :
>> Tu peut recuperer les headers que tu veux en une seule fois, par example:
>>
>> headers=`egrep "^(To:|Subject:|From:)"|tr " " "_"`|sort -t: -u|xargs
>> echo "MailPopup $headers"|FvwmCommand -c
>>
>> (coup de bol: From, Subject et To sont dans le bon ordre alphabetique - le fait que tu
>> changes les espaces en '_' aide - sinon ca serait un peu plus tordu a cause du echo
>> apres).
>>
>> En esperant que ca marche pour toi...
>
>
> Merci de la réponse mais ça marche pas!
>
>
> J'ai donc décidé de sauver le mail dans un fichier temporaire et de
> travailler ce fichier:
>
> tmp_mail=/tmp/tmp_mail
>
> cat > $tmp_mail
>
> to=`grep -v "-To" < $tmp_mail |grep -m 1 "To:"|tr " " "_"`
> subject=`grep -m 1 "Subject:" < $tmp_mail |tr " " "_"`
> from=`grep -m 1 "From:" < $tmp_mail |tr " " "_"`
>
>
> rm $tmp_mail
>
> fvwmfunction='MailPopup' "$from" "$subject" "$to"
>
> echo "$fvwmfunction"|FvwmCommand -c
>
>
> Merci

Un script perl aurait été plus adapté, il t'éviterai de lire 3 fois le mail.

L'entée standard peut être traitée ligne à ligne, pour chaque header tu peux
donc alimenter la variable qui va bien, enfin tu peus t'arrêter de lire dès que
toutes les variables sont renseignées.



Ok pour le script perl mais je ne sais pas programmer en Perl!

J'en ai un à disposition qui marche très bien mais j'essaie d'y mettre
un test avant à savoir: tester que je suis bien sous Fvwm (sinon le
script ne doit pas être exécuté). J'ai implémenté un petit truc:


my $test=`ps ax|grep -c [f]vwm`;

if ($test==0) {
exit 0;
}


mais je me demande bien si c'est correct! si tu en as une idée, ça
serait sympa de me le dire!

Merci

--
Brice Méalier

Linux user nb. 372699
Debian Sarge


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
kohzak
Bonjour à tous

Je voudrai connaitre la difference entre ia64 et Amd64 car prevoyant d
acheter un athlon 64 socket 939 pour monter un serveur, j aimerai savoir
quel debian-installer prendre.

J aimerai aussi savoir si vous avez des liens pour comprendre comment
fonctionne un system 64 bits et comment gérer les appli 32 et 64 bits
entre elle.

Merci :)








--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
kohzak
J ai trouvé ma reponse :

EM64T (Xeon, Pentium 4 6xx), AMD64 (Opteron, Athlon 64), IA64 (Itanium)





kohzak a écrit :

Bonjour à tous

Je voudrai connaitre la difference entre ia64 et Amd64 car prevoyant d
acheter un athlon 64 socket 939 pour monter un serveur, j aimerai savoir
quel debian-installer prendre.

J aimerai aussi savoir si vous avez des liens pour comprendre comment
fonctionne un system 64 bits et comment gérer les appli 32 et 64 bits
entre elle.

Merci :)


















--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Laurent CARON
Brice Méalier a écrit :

Bonjour

pour programmer un mail popper sous fvwm m'indiquant le sujet, la
provenance et la destination de mails entrant sur ma machine, je
souhaite utiliser un script bash.

Donc voici mon environnement:
j'utilise des boites au format mbox stockées dans $HOME/mail/ j'utilise
procmail en que MDA.
Dans procmail, les mails sont triés selon les headers et pour mon petit
mail popper, j'utilise la règle suivante:


:0 c
*
|newMail.sh


tout nouveau mail est donc copié et passé dans un script bash.

Ce script doit simplement extraire les headers "From", "Subject" et "To"
et les envoyer dans des variables qui me serviront un peu plus tard pour
mon popper.

Ce que j'ai fait pour le moment:

#!/bin/bash

FVWM=`ps -ef|grep '[f]vwm -s'`

# make sure we are running fvwm
if [ -z "$FVWM" ]
then
exit 0
fi

to=`grep -v "-To"|grep -m 1 "To:"|tr " " "_"`
subject=`grep -m 1 "Subject:"|tr " " "_"`
from=`grep -m 1 "From:"|tr " " "_"`

fvwmfunction='MailPopup' "$from" "$subject" "$to"

echo "$fvwmfunction"|FvwmCommand -c




le problème est que les données à lire sont volatiles et il n'est
capable de m'extraire seulement le premier champ spécifié (ici le champ
To, si je change l'ordre, il me lit le premier de la série).

Donc 2 solutions (il me semble): lancer les 3 "grep" en même tempset
enregistrer leurs sorties respectives (je crois pas ça possible...) ou
enregistrer l'entrée du script dans un fichier et travailler avec ce
fichier puis y faire un echo "">fichier en attendant le prochain mail.


Je suis débutant en bash et je bloque par manque de connaissances là! je
sais pas comment faire!

Auriez-vous une idée?


Cordialement Brice








man formail

--
Le signe "oui" est d'un homme qui s'endort ;
au contraire, le réveil secoue la tête et dit non.
-+- Émile Chartier, dit Alain (1868-1951) -+-


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Jean-Luc Coulon (f5ibh)
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Le 10.07.2005 15:16:52, kohzak a écrit :
Bonjour à tous

Je voudrai connaitre la difference entre ia64 et Amd64 car prevoyant d
acheter un athlon 64 socket 939 pour monter un serveur, j aimerai
savoir
quel debian-installer prendre.



Il faut prendre amd64. ia64 est l'architecture Intel Itanium. Ça n'a
rien à voir.

Voyez
https://alioth.debian.org/docman/view.php/30192/21/debian-amd64-howto.html
pour plus d'informations.


J aimerai aussi savoir si vous avez des liens pour comprendre comment
fonctionne un system 64 bits et comment gérer les appli 32 et 64 bits
entre elle.

Merci :)



Jean-Luc
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)

iD8DBQFC0SmzXit3lz9m7V4RAl0YAKD2bDKbwuZ4MV72oiaIgoH0vZEtggCghvV9
j5JRImkScFMy9x7qywSZRGA=
=tuY/
-----END PGP SIGNATURE-----
Avatar
Brice Méalier
On Sun, Jul 10, 2005 at 03:51:30PM +0200, Laurent CARON wrote :
Brice Méalier a écrit :

>Bonjour
>
>pour programmer un mail popper sous fvwm m'indiquant le sujet, la
>provenance et la destination de mails entrant sur ma machine, je
>souhaite utiliser un script bash.
>
>Donc voici mon environnement:
>j'utilise des boites au format mbox stockées dans $HOME/mail/ j'utilise
>procmail en que MDA.
>Dans procmail, les mails sont triés selon les headers et pour mon petit
>mail popper, j'utilise la règle suivante:
>
>
>:0 c
>*
>|newMail.sh
>
>
>tout nouveau mail est donc copié et passé dans un script bash.
>
>Ce script doit simplement extraire les headers "From", "Subject" et "To"
>et les envoyer dans des variables qui me serviront un peu plus tard pour
>mon popper.
>
>Ce que j'ai fait pour le moment:
>
>#!/bin/bash
>
>FVWM=`ps -ef|grep '[f]vwm -s'`
>
># make sure we are running fvwm
>if [ -z "$FVWM" ]
>then
> exit 0
>fi
>
>to=`grep -v "-To"|grep -m 1 "To:"|tr " " "_"`
>subject=`grep -m 1 "Subject:"|tr " " "_"`
>from=`grep -m 1 "From:"|tr " " "_"`
>
>fvwmfunction='MailPopup' "$from" "$subject" "$to"
>
>echo "$fvwmfunction"|FvwmCommand -c
>
>
>
>
>le problème est que les données à lire sont volatiles et il n'est
>capable de m'extraire seulement le premier champ spécifié (ici le champ
>To, si je change l'ordre, il me lit le premier de la série).
>
>Donc 2 solutions (il me semble): lancer les 3 "grep" en même tempset
>enregistrer leurs sorties respectives (je crois pas ça possible...) ou
>enregistrer l'entrée du script dans un fichier et travailler avec ce
>fichier puis y faire un echo "">fichier en attendant le prochain mail.
>
>
>Je suis débutant en bash et je bloque par manque de connaissances là! je
>sais pas comment faire!
>
>Auriez-vous une idée?
>
>
>Cordialement Brice
>
>
>
>
>
>
man formail




Deja fait! et ça marche presque...

En fait maintenant j'ai problème de locales avec! Il a du mal avec
certains unicode ou ISO-8859-* que certains posteurs utilisent et ça je
ne sais pas du tout comment le gérer.

Si quelqu'un a une idée, elle est bienvenue.

--
Brice Méalier

Linux user nb. 372699
Debian Sarge


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Brice Méalier
On Sun, Jul 10, 2005 at 05:21:28PM +0200, Leopold BAILLY wrote :
Brice Méalier writes:

> On Sun, Jul 10, 2005 at 01:56:35PM +0200, Leopold BAILLY wrote :
>> Brice Méalier writes:
>>

[...]

>> Un script perl aurait été plus adapté, il t'éviterai de lire 3 fois le mail.
>>
>> L'entée standard peut être traitée ligne à ligne, pour chaque header tu peux
>> donc alimenter la variable qui va bien, enfin tu peus t'arrêter de lire dès que
>> toutes les variables sont renseignées.
>
> Ok pour le script perl mais je ne sais pas programmer en Perl!
>
> J'en ai un à disposition qui marche très bien mais j'essaie d'y mettre
> un test avant à savoir: tester que je suis bien sous Fvwm (sinon le
> script ne doit pas être exécuté). J'ai implémenté un petit truc:
>
>
> my $test=`ps ax|grep -c [f]vwm`;
>
> if ($test==0) {
> exit 0;
> }
>
>
> mais je me demande bien si c'est correct! si tu en as une idée, ça
> serait sympa de me le dire!

C'est bon.

Autre façon de faire :

exit if( system("ps ax | grep -q [f]vwm") != 0 );


Léo.




Merci!

bah premier truc que je fais en perl....

est-ce que tu connais un bon tuto pour le perl? parce que ce que j'ai
trouvé est moyen...




--
Brice Méalier

Linux user nb. 372699
Debian Sarge


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Leopold BAILLY
Brice Méalier writes:

On Sun, Jul 10, 2005 at 01:56:35PM +0200, Leopold BAILLY wrote :
Brice Méalier writes:






[...]

Un script perl aurait été plus adapté, il t'éviterai de lire 3 f ois le mail.

L'entée standard peut être traitée ligne à ligne, pour chaque he ader tu peux
donc alimenter la variable qui va bien, enfin tu peus t'arrêter de lir e dès que
toutes les variables sont renseignées.



Ok pour le script perl mais je ne sais pas programmer en Perl!

J'en ai un à disposition qui marche très bien mais j'essaie d'y mettre
un test avant à savoir: tester que je suis bien sous Fvwm (sinon le
script ne doit pas être exécuté). J'ai implémenté un petit truc:


my $test=`ps ax|grep -c [f]vwm`;

if ($test==0) {
exit 0;
}


mais je me demande bien si c'est correct! si tu en as une idée, ça
serait sympa de me le dire!



C'est bon.

Autre façon de faire :

exit if( system("ps ax | grep -q [f]vwm") != 0 );


Léo.
1 2