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

Script bash, lecture fichier "on the fly"

7 réponses
Avatar
bricem13
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=E9es dans $HOME/mail/
j'utilise procmail en que MDA.
Dans procmail, les mails sont tri=E9s selon les headers et pour mon
petit mail popper, j'utilise la r=E8gle suivante:


:0 c
*
|newMail.sh


tout nouveau mail est donc copi=E9 et pass=E9 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=3D`ps -ef|grep '[f]vwm -s'`

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

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

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

echo "$fvwmfunction"|FvwmCommand -c




le probl=E8me est que les donn=E9es =E0 lire sont volatiles et il n'est
capable de m'extraire seulement le premier champ sp=E9cifi=E9 (ici le
champ To, si je change l'ordre, il me lit le premier de la s=E9rie).

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


Je suis d=E9butant en bash et je bloque par manque de connaissances l=E0!
je sais pas comment faire!

Auriez-vous une id=E9e?


Cordialement Brice

7 réponses

Avatar
Stephane Chazelas
2005-07-8, 16:10(-07), :
[...]
#!/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
[...]


En awk, ca ferait plus de sens.

#! /usr/bin/awk -f
/^To:/ { to=substr($0, 5) } # mais ca deconne pour les champs
# sur plusieurs lignes,
# utiliser formail -c

/^Subject:/ { subject = substr($0, 10) }

/^From:/ { from = substr($0, 10) }

/^$/ { exit }

END {
if (system("pidof fvwm > /dev/null 2>&1") != 0) exit(1)
# Faut echapper les quotes pour fvwm, ce n'est pas clair
# dans ton exemple. Peut-etre quelque chose comme:
gsub(/"/, """, from); from = """ from """

print "MailPopup", from, subject, to | "FvwmCommand -c"
}

--
Stéphane

Avatar
bricem13
Merci de la réponse mais je ne connais pas awk (mes connaissances en
programmation sont maigres...).

J'ai résolu le pbm de la manière suivante:


#!/bin/bash


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

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

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


Je sauve donc le mail dans un fichier temporaire que j'efface après.

Merci

Brice
Avatar
Rakotomandimby Mihamina
wrote:
Merci de la réponse mais je ne connais pas awk (mes connaissances en
programmation sont maigres...).


Troll du week end:

Et puis sinon, dire que faire des scripts shell c'est de la
programmation, il y en a qui ne sont pas d'accord.


--
Miroir de logiciels libres => http://www.etud-orleans.fr
Un Nokia sous Linux, "programmable" en Open Source
http://www.nokia.com/770 , http://www.maemo.org/
http://www.maemo.org/platform/docs/tutorials/Maemo_tutorial.html

Avatar
william
Et puis sinon, dire que faire des scripts shell c'est de la
programmation, il y en a qui ne sont pas d'accord.


c'est quoi de la programmation ?

$troll -= 1


--
William.

Avatar
bricem13
bon au final j'ai choisi la solution d'enregistrer la mail dans un
fichier temporaire et de le travailler avec formail.

Merci pour les réponses (sauf les trolls -;)

--
Brice
Linux user nb. 372699
Debian Sarge
Avatar
Stephane Chazelas
2005-07-9, 03:08(-07), :
Merci de la réponse mais je ne connais pas awk (mes connaissances en
programmation sont maigres...).


awk fait partie de l'attirail de la programmation shell et est
tres utile et tres simple.

J'ai résolu le pbm de la manière suivante:


#!/bin/bash


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

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


Ce qui peut s'ecrire:

ps -eo 'args=' | grep '[f]vwm -s' && exit 0


tmp_mail=/tmp/tmp_mail


Les fichiers temporaires sont un cauchemard. Problemes de
securité (et si quelqu'un fait un ln -s ~toi/.rhosts
/tmp/tmp_mail, de propreté (et si ton script est interrompu par
un control-C) de confidentialité (t'es tu assuré que ce fichier
ne soit lisible que par toi? Tout le monde peut lire ton mail?),
de robustesse (que se passe-t-il quand il n'y a plus de place
sur le disque (heureusement en general sendmail verifie que /tmp
n'est pas trop plein avant d'accepter des mails).

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"
[...]


Note que c'est equivalent a:

fvwmfunction="MailPopup $from $subject $to"


--
Stéphane

Avatar
bricem13
ok pour l'équivalence!

Le fichier temporaire est stocké sous /tmp et effacé dès qu'il a
été utilisé par le script!

là par contre le ne voit pas trop ce que tu veux dire par: "ln -s
~toi/.rhosts
/tmp/tmp_mail" désolé mais je vois pas sur koi pointe le lien là!

Ok il est toujors possible de placer le fichier temporaire dans mon
/home.

Par contre autre question, qu'en est-il des types de codage de certains
mailers qui sont différents du mien? comment les reconvertir (soit ne
plus avoir des caractères tous bizarres et des trucs style:
?ISO-8859-1? entre autres?)


Merci pour la réponse

Brice