Portál AbcLinuxu, 2. května 2025 11:25
Rozeslat dopisy se mi nakonec podařilo s pomocí následujícího skriptu:
#!/bin/sh # export from="Administrator ankety <webmaster@domena.cz>" export smtp=mail.domena.cz export ttycharset=iso-8859-2 cp respondenti-kody-original.txt respondenti-kody.txt for OSOBA_EMAIL in `cat respondenti-mail.txt`; do KOD=`head -n1 respondenti-kody.txt`; sed -e '1,1d' respondenti-kody.txt > pomocna; cat pomocna > respondenti-kody.txt; cat zacatek-dopisu.txt > dopis; echo $KOD >> dopis; cat konec-dopisu.txt >> dopis; echo "Odesilam mail s kodem $KOD na adresu $OSOBA_EMAIL"; mail -s "Pristupovy kod" $OSOBA_EMAIL < dopis; done rm pomocna rm dopis rm respondenti-kody.txtKaždý řádek souboru respondenti-mail.txt obsahuje jednu mailovou adresu, každý řádek v respondenti-kody-original.txt pak jeden platný přístupový kód – těch samozřejmě musí být alespoň tolik, co mailových adres. Samotný text dopisu skládám ze dvou souborů zacatek-dopisu.txt a konec-dopisu.txt, mezi něž vkládám inkriminovaný kód.
S čím jsem si dlouho nevěděl rady a co jsem nakonec vyřešil poněkud nehezky, bylo vyextrahování správného kódu ze souboru – jaksi se mi nepodařilo najít příkaz, který by vypsal pouze n-tý řádek z tohoto souboru. Takže si vždy zkopíruju ten první a následně jej ze souboru smažu, hloupé, že? Asi by bylo lepší mít maily i kódy v jednom souboru, vždy adresu a kód na jednom řádku a nějak to ve skriptu z toho vypreparovat – něco mi říká, že to by byl úkol pro awk – ten taky ještě neumím :(
Ještě poznámka k znakové sadě – program mail sám (z LOCALES) pozná, že mám systém v UTF-8, já však raději chci poslat dopisy v ISO-8859-2, proto to nastavení.
Tiskni
Sdílej:
cat soubor | head -n cisloradku | tail -n 1
Např. programNR == 100, NR == 200vypíše záznamy (řádky) 100 až 200.
man sed
azurit@azurit:~$ cat pokus.txt prvy druhy treti stvrty azurit@azurit:~$ grep -n '.*' pokus.txt | grep '^2:' | sed -e 's/2:\(.*\)/\1/g' druhy
sed -e "$n ! d"nebo méně elegantně ale efektivněji (hlavně pro delší soubory)
sed -e "$n ! d ; $n q"
read
.
for OSOBA_EMAIL in `cat respondenti-mail.txt`nepřečte Hynek Vychodil...
cat respondenti-mail.txt | while read OSOBA_EMAIL
sed 's: :\n:g' respondenti-mail.txt > '~'; mv '~' respondenti-mail.txt
#!/bin/sh # export from="Administrator ankety <webmaster@domena.cz>" export smtp=mail.domena.cz export ttycharset=iso-8859-2 citac=1 cat respondenti-mail.txt | while read OSOBA_EMAIL do KOD=`sed -ne "$citac p" respondenti-kody-original.txt`; citac=$((citac + 1)) cat zacatek-dopisu.txt > dopis; echo $KOD >> dopis; cat konec-dopisu.txt >> dopis; echo "Odesilam mail s kodem $KOD na adresu $OSOBA_EMAIL"; mail -s "Anketa" $OSOBA_EMAIL < dopis; sleep 0.5; done rm dopis
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.