Sziasztok!
A kovetkezo problemat szeretnem magoldani. Van egy Log file, melyben log-oldik, hogy ki mikor milyen file-okat toltott fel egy ftp-re. Szeretnem ezen a file-on vegig menni es a feltoltott fileok nevet elkuldeni egy email cimre.
Elkeztem utanna nezni, s arra jutottam megprobalom awk-val, de elakadtam.
awk '/i r/ {mail -s "figyelmeztetes" xxx.yyy@valami.hu < $9}' atmeneti
Az 'i r' adja ki azokat a sorokat, ahol feltoltes van, a $9 az feltoltott file neve.
Ez azonban nem mukodik. Gondja van a nevben levo ponttal. Ezt hogy tudom kiszurni?
Ha ezt kiszurom, ugy hogy olyan emailre kuldom, melyben nincs pont. A parancs lefut, de nem kuldi el az emailt. Hol a gond? Hulyen csinalom? Van jobb megoldas?
- 864 megtekintés
Hozzászólások
Probald meg igy:
#! /bin/bash
{
echo "From: ftp@$HOSTNAME (ftp feltoltes)"
echo "To: $MAILTO"
echo "Date: $(date "+%d %b %Y %T %z")"
echo "Subject: ftp feltoltes"
echo
awk '<kilistazza a feltolteseket>'
} | sendmail -t
(en ezt hasznalom, amikor szkriptbol akarok levelet kuldeni -- a
sendmail
a qmail altal szallitott sendmail wrapper)
- A hozzászóláshoz be kell jelentkezni
Lécci rakd code és /code közé, mert nem teljesen világos, h mit akartál írni.
Ellenben tudtommal awk-ban külső parancsot csak system -mel hívhatsz meg, nekem valami ilyesmi lenne a logikus:
awk '/i r/ { system( "mail -s figyelmeztetes xxx.yyy@valami.hu < " $9 )' atmeneti
Legalábbis első ránézésre valahogy így kéne. (A figyemeztetes köré nem kell az idézőjel, mert egy szó, ha kellene, akkor lehetne kezdeni görcsölni, hogy hogyan írjunk "-en belül "-et.)
- A hozzászóláshoz be kell jelentkezni
SZia!
Nem ismertem ezt a system meghivast, de erre a command not found valaszt kapom pont annyiszor, amennyi talalat van a fileban.
Ennek mi lehet a oka?
Valamint ha hasznalok az email cimben pontot vagy kukacjelet, akkor arra az unexpected charakter uzenetet kapom.
Ezt hogyan tudom kivedeni?
- A hozzászóláshoz be kell jelentkezni
Hulye vagyok, mukodik, csak ne tudok masolni
- A hozzászóláshoz be kell jelentkezni
Hat azert kapsz command not found -ot, mert valamiert az awk szerint nincs mail parancsod. shell ablakbol gepeld be, hogy type mail / vagy which mail, es esetleg add meg azzal az eleresi utvonallal, amit ott kidob. Ha nincs mail parancs, akkor lehet meg kiserletezni a mailx, vagy a Mail parancsokkl, azok is szoktak lenni.
Az a kukac vagy pont a cimben problema szerintem valami elgepeles lehet. Ha nem megy, akkor - mint korabban mar jeleztem gepeld be egy hozzaszolasban a pontos parancsot (legjobb a copy-and-paste), csak epp rakjal az elejere egy (code) , a vegere meg egy (/code) sort, akkor elvben pont azt latjuk, amit te irtal. Kerek zarojel helyett ( - hasznalj szogleteset [ .
Jav: kozben valaszoltak. Akkor sztorno.
- A hozzászóláshoz be kell jelentkezni
A mail paranacs mukodik a command not found azert volt, mert nem tettem idezojelek koze a mail parancsot. Igy mar mukodik. Ezzel azonban - mivel a $9 egy file-ra mutat, a file teljes tartalmat szurja bele az emailbe. En viszont csak a file nevet szeretnem, sot azt, hogy "hello! Az xyz file-t feltoltottek". Ezt hogyan tudom megoldani? Probaltam print $9-el de azt nem fogadja el a system hivasban.
Valakinek van erre valami otletet?
- A hozzászóláshoz be kell jelentkezni
Ebben az esetben ne fájlátirányítást használj.
Normálisan, shell-ben ezt kéne írnod:
echo hello! A(z) $FILENAME file-t feltoltottek | mail -s figyelmeztetes xxx.yyy@valami.hu
Tehát ezt kell beletrükköznöd a system -be:
awk '/i r/ { system( "echo hello! A(z) " $9 " file-t feltoltottek | mail -s figyelmeztetes xxx.yyy@valami.hu" )' atmeneti
A system 3 paraméterét ( "echo ... Az" ; $9 ; és "file ... valami.hu" ) az awk majd szépen összeragasztja egy db sztringgé (miközben a $9 -et kicseréli a fájl nevére), így már a szükséges utasítás lesz ott, és szépen lefut minden megfelelő esetben.
- A hozzászóláshoz be kell jelentkezni
Koszonom szepen, igy mar mukodik!
- A hozzászóláshoz be kell jelentkezni