PROCMAILRC(5) | File Formats Manual | PROCMAILRC(5) |
JMÉNO¶
procmailrc - konfigurační soubor programu procmail
POUŽITͶ
$HOME/.procmailrc
POPIS¶
Chcete-li rychle začít, podívejte se na POZNÁMKY na konci manuálové stránky procmail(1).
Tento konfigurační soubor může obsahovat směs přiřazení do proměnných prostředí (z nichž některé mohou mít pro procmail zvláštní význam) a předpisů. V nejjednodušší podobě obsahují předpisy jednořádkové regulární výrazy vyhledávané v hlavičce přijaté e-mailové zprávy. První předpis, který nalezne shodu s regulárním výrazem, potom určí kam se zpráva dále přesune (obvykle do souboru). Pokud se zpracování dostane až na konec rc souboru, procmail doručí e-mailovou zprávu na $DEFAULT.
Existují dva druhy předpisů: doručující a nedoručující. Pokud je nalezena shoda v doručujícím předpisu, procmail považuje zprávu (ano, uhádli jste) za doručenou a ukončí zpracování konfiguračního souboru po úspěšném provedení akčního řádku předpisu. Pokud je nalezena shoda v nedoručujícím předpisu zpracování bude pokračovat i po provedení akčního řádku tohoto předpisu.
Doručující předpisy jsou ty, které způsobí, že hlavičky a/nebo tělo zprávy jsou zapsány do souboru, použity nějakým programem nebo přesměrovány na nějakou poštovní adresu.
Nedoručující předpisy jsou ty, které způsobí, že výstup nějakého programu nebo filtru je znovu zachycen procmail-em, nebo předpisy, které otevírají vnořený blok.
Procmailu můžete říci, že má zpracovávat doručující předpis jako nedoručující, když uvedete příznak 'c' v hlavičce předpisu. To přinutí procmail vytvořit kopii právě zpracovávané zprávy. Zpráva je tudíž doručena podle předpisu, ale zároveň se s její kopií pokračuje ve zpracování konfiguračního souboru.
Použitím libovolného počtu předpisů můžete svou příchozí poštu velmi přímočarým způsobem roztřídit do několika složek. Avšak mějte na paměti, že do těchto složek mohou přicházet současně různé zprávy (jestliže běží více instancí procmailu, což není neobvyklé při větším množství došlých zpráv). Aby v tom případě ve složkách nevznikl zmatek, velmi doporučujeme vhodně používat zámků (angl. "lock files").
V konfiguračním souboru lze libovolně míchat přiřazení do proměnných prostředí a předpisy. Proměnné, které mají v procmailu zvláštní význam, budou použity příslušným způsobem v momentě zpracování řádku kde se vyskytují (tzn. že můžete kdykoliv změnit pracovní adresář zadáním nové hodnoty MAILDIR, přepínat zámky přiřazením do LOCKFILE, kdykoliv změnit umask, atd., možností je nekonečně mnoho :-).
Přiřazování a substituce těchto proměnných se provádí přesně stejně jako v sh(1) (včetně všech možností uvozování a escape sekvencí), ale kromě toho ještě poskytuje další výhody v tom, že prázdné znaky obklopující '=' jsou ignorovány. Pokud se objeví jméno proměnné bez koncového '=', bude tato proměnná zrušena. Jakýkoliv program uvedený ve zpětných apostrofech procmail spustí a předá mu celou zprávu na standardní vstup.
Komentáře¶
Slovo začínající znakem # a všechny následující znaky až do konce řádku jsou ignorovány. Toto neplatí pro řádky obsahující podmínku, ty nemohou být komentovány.
Předpisy¶
Řádek začínající znakem ':' označuje začátek předpisu. Má tento formát:
:0 [příznaky] [ : [lokální_zámek] ] <jedna nebo více podmínek (jedna na řádek)> <právě jeden akční řádek>
Podmínkový řádek začíná znakem `*'. Zbytek řádku kromě uvozujících a koncových mezer je poslán znak po znaku na vstup vnitřního egrep-u. Regulární výrazy vnitřního egrepu jsou naprosto kompatibilní s rozšířenou syntaxí regulárních výrazů programu egrep(1). Viz též Rozšířená syntaxe regulárních výrazů.
Mezi podmínkami v jednom předpisu platí logický součin (AND). Pokud předpis neobsahuje žádnou podmínku, výsledek testu bude vždycky pravdivý.
Příznak může být jeden z
následujících znaků:
- H
- Do programu egrep se pošle záhlaví zprávy
(standard).
- B
- [přibližně] Do egrepu se pošle tělo
zprávy.
- D
- Sdělí egrepu, že má rozlišovat
malá a velká písmena (standard je
nerozlišovat).
- A
- Tento předpis bude závislý na posledním
předcházejícím předpisu bez
příznaku `A' nebo `a' (na aktuální
úrovni vnoření). To vám umožňuje
řetězit akce, které závisí na
společné podmínce.
- a
- Má tentýž význam jako `A', ale bude
zároveň záviset na
úspěšném dokončení
předchozího předpisu.
- E
- Tento předpis se provede pouze v případě,
že bezprostředně
předcházející předpis nebyl proveden.
Jeho úspěšné provedení
rovněž znemožní provedení
bezprostředně následujících
předpisů s `E'. To vám umožňuje
definovat akce typu `else if'.
- e
- Předpis se provede pouze v případě, že
bezprostředně předcházející
předpis selhal. To vám umožňuje
definovat akce na zpracování chyb.
- h
- Záhlaví zprávy se pošle na vstup roury, do
souboru nebo na místo určení zprávy (default).
- b
- Tělo zprávy se pošle na vstup roury, do souboru nebo
na místo určení zprávy (default).
- f
- S rourou se má zacházet jako s filtrem.
- c
- Vytvoř kopii zpracovávané zprávy. Tento
příznak má význam pouze v
doručujících předpisech. Jediný
druh nedoručujícího předpisu v
němž dojde tento příznak smysluplného
použití je blok (vnoření). Aby mohla
být zpracována kopie, příznak
způsobí rozdvojení právě
běžícího procesu (zámky se
nedědí), přičemž nový proces
pokračuje ve zpracování obvyklým
způsobem, zatímco původní proces
přeskočí blok a pokračuje za ním.
- w
- Čeká na ukončení
spuštěného filtru nebo programu a otestuje
návratovou hodnotu (standardně ji ignoruje). Pokud bude
filtr neúspěšný, text nebude filtrován.
- W
- Stejný význam jako příznak `w', ale
potlačí hlášky `Program failure'.
- i
- Ignoruje chyby zápisu v tomto předpisu (obvykle
nastávají při předčasném
uzavření roury).
- r
- `Hrubý' režim (raw). Nepokouší se ujistit jestli zpráva končí prázdným řádkem, zapíše ji tak jak je.
Můžete použít
zvláštní podmínky, které nejsou
přímo regulárními výrazy. Takové
podmínky musí začínat:
- !
- Negace podmínky následující po
vykřičníku.
- $
- Zbytek podmínky vyhodnotí podle pravidel pro substituci
uvnitř dvojitých uvozovek v sh(1) ,
přeskočí úvodní mezery a potom znovu
vyhodnotí.
- ?
- Použije návratový kód uvedeného
programu.
- <
- Otestuje, zda je celková délka zprávy
menší než uvedený počet bajtů
(decimálně).
- >
- Obdobně jako '<'.
- jméno_proměnné ??
- Porovná zbytek podmínky s hodnotou této
proměnné (nesmí se jednat o pseudoproměnnou).
Zvláštním případem jsou `B', `H', `HB'
a `BH', které pouze mění prohledávanou oblast
záhlaví/těla zprávy, definovanou pro
aktuální předpis.
- \
- Použijte, chcete-li použít kterýkoliv z
výše uvedených znaků na začátku
řádku v jeho normálním významu.
Lokální zámek¶
Pokud umístíte na konec prvního řádku předpisu druhou dvojtečku, procmail použije lokální_zámek (pouze pro aktuální předpis). Volitelně můžete za dvojtečku zadat jméno zámku, který chcete použít. Pokud tak ovšem neučiníte, procmail použije jméno výstupního souboru (nebo jméno za první '>>'), za které připojí hodnotu $LOCKEXT.
Akční řádek předpisu¶
Akční řádek může
začínat jedním z následujících
znaků:
- !
- Pošle poštu (forward) na všechny
následující e-mailové adresy.
- |
- Spustí určený program; pokud je nalezen
kterýkoliv znak z $SHELLMETAS, pokusí se spustit program
pomocí $SHELL-u. Volitelně můžete před
znak roury umístit proměnná=, což
způsobí, že standardní výstup
spuštěného programu bude uložen do
proměnné prostředí (procmail v tomto
místě neukončí
zpracovávání konfiguračního souboru).
Pokud zadáte pouze znak roury bez žádného
názvu programu, procmail přesměruje obsah
zprávy na standardní výstup.
- {
- Následována alespoň jednou mezerou, tabulátorem nebo znakem nový řádek označuje začátek vnořeného bloku. Všechno uvnitř bloku až po následující uzavírající závorku bude záviset na podmínce aktuálního předpisu. Počet úrovní vnoření není omezen. Uzavírací závorka pouze ukončuje blok; v žádném případě nezpůsobuje ukončení procmailu. Když je dosaženo konce bloku, zpracování pokračuje obvyklým způsobem za blokem. Ve vnořeném bloku mají příznaky `B' a `H' vliv pouze na podmínky předcházející tento blok, příznaky `h' a `b' nemají vůbec žádný vliv.
Cokoliv jiného bude považováno za jméno poštovní schránky (buď jméno souboru nebo adresáře, absolutní nebo relativní k aktuálnímu adresáři (viz MAILDIR)). Pokud se jedná o jméno souboru (byť neexistujícího), zpráva bude přidána na jeho konec.
Pokud se jedná o jméno adresáře,
zpráva bude doručena do souboru se zaručeně
jedinečným názvem
začínajícím $MSGPREFIX, nově
vytvořeného v tomto adresáři. Pokud název
adresáře končí řetězcem
"/.", předpokládá se, že se
jedná o složku systému MH a procmail použije
další volné číslo, které nalezne.
Pokud jméno schránky končí na "/", je
tento adresář považován za složku
maildir; tj. procmail doručí zprávu do souboru v
podadresáři pojmenovaném "tmp" a
přejmenuje jej, aby byl v podadresáři "new".
Pokud je schránka určena jako složka MH nebo
složka maildir, procmail vytvoří potřebné
adresáře, pokud neexistují; nebude považovat
schránku za neexistující jméno souboru. Pokud
procmail doručuje do adresáře, můžete
zadat několik adresářů do nichž chcete
zprávu doručit (procmail k tomu používá
hardlinky).
Implicitní hodnoty proměnných¶
- LOGNAME, HOME a SHELL
- Vaše (příjemcovy) standardní hodnoty
- PATH
- $HOME/bin :/bin :/usr/bin :/usr/local/bin :/usr/bin/X11 (Výjimkou
je doba zpracování souboru /etc/procmailrc, kdy je nastavena
na `/bin :/usr/bin :/usr/local/bin :/usr/bin/X11'.)
- SHELLMETAS
- & |<>~;?*[
- SHELLFLAGS
- -c
- ORGMAIL
- /var/spool/mail/$LOGNAME
(V případě, že bylo zadáno -m nedefinováno)
- MAILDIR
- $HOME/
(Kromě případu, kdy jméno prvního úspěšně otevřeného rc souboru začíná `./' nebo bylo zadáno -m; tehdy je implicitní hodnota `.')
- DEFAULT
- $ORGMAIL
- MSGPREFIX
- msg.
- SENDMAIL
- /bin/mail
- SENDMAILFLAGS
-
- HOST
- Aktuální jméno počítače
(hostname)
- COMSAT
- no
(Pokud je jméno rc souboru určeno v příkazové řádce)
- PROCMAIL_VERSION
- 3.22
- LOCKEXT
- .lock
Ostatní nulované nebo přednastavené proměnné jsou IFS, ENV a PWD.
Z bezpečnostních důvodů vymaže
procmail při startu všechny proměnné,
které by které by mohly ovlivnit chování runtime
linkeru.
PROSTŘEDͶ
Dříve než vás zahltí
množství proměnných, mějte na
paměti, že všechny mají rozumné
implicitní hodnoty.
- MAILDIR
- Aktuální adresář za běhu procmailu
(což znamená, že všechny cesty jsou
relativní vzhledem k $MAILDIR).
- DEFAULT
- Standardní soubor poštovní schránky
(pokud není určeno jinak, procmail uloží
zprávu do této schránky). Před zápisem
do této schránky použije procmail automaticky
$DEFAULT$LOCKEXT jako zámek. Tuto proměnnou nemusíte
nastavovat, neboť již obsahuje implicitní
systémovou schránku.
- LOGFILE
- Tento soubor bude obsahovat jakákoliv chybová nebo
diagnostická hlášení procmailu (za
normálních okolností žádná :-)
příp. jiných programů
spuštěných procmailem. Jestliže tento soubor
není definován, veškerá diagnostická
nebo chybová hlášení budou zaslána
e-mailem odesilateli zprávy. Viz též
LOGABSTRACT.
- VERBOSE
- Nastavením této proměnné na `yes' nebo `on'
(ano, resp. zapnout; pozn. překl.) případně
`no' či `off' (ne, vypnout) můžete zapínat
respektive vypínat rozšířenou
diagnostiku.
- LOGABSTRACT
- Těsně před svým ukončením
zapíše procmail do souboru $LOGFILE shrnutí
zprávy: záhlaví `From:' a `Subject:', do jaké
složky (schránky) byla zpráva uložena a
jaká byla její délka v bajtech. Nastavením
této proměnné na `no' se výpis
potlačí. Nastavením této
proměnné na `all' (všechno) se zajistí
výpis pro každý úspěšně
dokončený doručující
předpis.
- LOG
- Cokoliv přiřazené této proměnné
bude připojeno do souboru $LOGFILE.
- ORGMAIL
- Obvykle systémová schránka (ORiGinal
MAILbox). Pokud z nějakého tajemného
důvodu (jako `filesystem full') nemůže
být zpráva doručena, tato schránka bude
poslední možností. Pokud se procmailu
nepodaří zprávu uložit ani sem (móc,
moc špatný :-) vrátí zprávu
odesílateli.
- LOCKFILE
- Globální semafor. Pokud tento soubor již existuje,
procmail před dalším zpracováním
počká až zmizí; potom jej sám
vytvoří (a samozřejmě také
smaže, když skončí). Pokud je
specifikován více než jeden semafor bude ten
předchozí smazán dříve než se
zkusí vytvořit nový.
Užívání globálního semaforu se
nedoporučuje. Tam kde je to možné, použijte
místo toho lokální zámky (na bázi
jednotlivých předpisů).
- LOCKEXT
- Implicitní přípona, jejímž
připojením ke jménu cílového souboru se
získá jméno lokálního
zámku (pokud jsou zapnuty, pro jednotlivé
předpisy).
- LOCKSLEEP
- Počet sekund, které procmail vyčká než
opět zkusí zámek (pokud již existoval);
pokud není specifikováno, implicitní hodnota je 8
sekund.
- LOCKTIMEOUT
- Počet sekund, které musí uplynout od času
poslední modifikace/vytvoření zámku aby
procmail usoudil, že se to musí být soubor
pozůstalý v důsledku chyby, který nyní
může být nuceně odstraněn. Pokud je
nastavena nula, lhůta se nepoužije a procmail bude
čekat navždy dokud se soubor neodstraní; pokud
není specifikována žádná hodnota,
implicitně 1024 sekund. Tato proměnná se hodí
proti zacyklení sendmailu/procmailu. Procmail je
imunní vůči odchylkám hodin na
různých počítačích.
- TIMEOUT
- Počet sekund, které musí uplynout než procmail
usoudí, že některý z dceřiných
procesů, které spustil, musel zamrznout.
Dotyčný program obdrží od procmailu
signál TERMINATE a zpracování
konfiguračního souboru bude pokračovat. Pokud je
nula, lhůta se nepoužije a procmail čeká dokud
se neukončí dceřiný process; není-li
hodnota specifikována je implicitní hodnota 960 sekund.
- MSGPREFIX
- Předpona souboru, pokud se zpráva doručuje do
adresáře (nepoužívá se při
doručování do MH adresáře).
- HOST
- Pokud toto není totožné se jménem
počítače, které vrací hostname,
zpracování aktuálního
konfiguračního souboru se okamžitě
ukončí. Pokud byly na příkazové
řádce uvedeny další konfigurační
soubory, zpracování bude pokračovat
následujícím z nich. Pokud již byly
všechny použity, program se ukončí, ale
nezpůsobí chybu (tzn. že poštovnímu
programu se bude zdát, že pošta byla
doručena).
- UMASK
- Jméno říká vše (pokud ne,
zapomeňte na něj :-). Jakákoliv hodnota
přiřazená UMASK bude interpretována jako
osmičkové číslo. Není-li
specifikováno, maska je implicitně 077. Pokud maska dovoluje
o+x, všechny schránky do nichž procmail
doručuje přímo prodělají změnu
o+x. To se dá použít ke kontrole zda
přišla nová pošta.
- SHELLMETAS
- Pokud se kterýkoliv ze znaků řetězce
SHELLMETAS objeví v řádku obsahujícím
filtr nebo program, řádek bude poslán do $SHELL
namísto přímého spuštění.
- SHELLFLAGS
- Jakékoliv volání $SHELL-u bude
uskutečněno ve tvaru
"$SHELL" "$SHELLFLAGS" "$*";
- SENDMAIL
- Pokud nepoužíváte
přesměrování (forwarding), nelamte si s
tímhle hlavu. Určuje program, který bude forwardovat
jakoukoliv poštu.
Volá se jako: "$SENDMAIL" $SENDMAILFLAGS "$@";
- NORESRETRY
- Počet opakovaných pokusů pokud nastane
některá z chyb `process table full'
(zaplnění tabulky procesů), `file table full'
(zaplnění tabulky souborů), `out of memory'
(nedostatek paměti) nebo `out of swap space'
(zaplnění odkládacího prostoru). Pokud je toto
číslo záporné, procmail to bude zkoušet
donekonečna; pokud není specifikováno,
implicitní hodnota je 4. Další pokusy o
opakování akce nastávají v intervalu $SUSPEND
sekund. Myšlenka tohoto uspořádání
spočívá v tom, že pokud je např.
vyčerpán swapovací prostor nebo se
zaplnila tabulka procesů, obvykle to zjistí
několik dalších programů, které
buď skončí nebo zkolabují,
čímž uvolní nedostávající
se systémové zdroje procmailu.
- SUSPEND
- Čas v sekundách kdy bude procmail čekat na
něco co momentálně není k dispozici
(paměť, fork, atd.); není-li specifikováno,
implicitní hodnota je 16 sekund. Viz též:
LOCKSLEEP.
- LINEBUF
- Délka interní řádkové
vyrovnávací paměti. Nelze nastavit
menší než 128. Délka
žádného řádku v
konfiguračním souboru by neměla
překročit $LINEBUF znaků před ani po
provedení substitucí. Pokud není
specifikováno, standard je 2048. Toto omezení
samozřejmě neplatí na zprávu samotnou;
ta může mít libovolné délky
řádků nebo může být i
binárním souborem. Viz též PROCMAIL_OVERFLOW.
- DELIVERED
- Pokud je nastavena na `yes', procmail bude předstírat (MTA),
že zpráva byla doručena. Pokud při
takovém nastavení nelze zprávu doručit,
zpráva bude navždy ztracena (nebude odeslána na
postmastera apod.).
- TRAP
- Při ukončení procmailu (neplatí, pokud bylo
způsobeno přijatým signálem) se provede obsah
této proměnné. Kopie zprávy je k dispozici na
standardním vstupu. Jakýkoliv výstup
vytvořený tímto příkazem bude
připojen do souboru $LOGFILE. Možná
použití TRAP-u: odstranění
dočasných souborů, na míru šité
výtahy zpráv, atd. Viz též: EXITCODE a
LOGABSTRACT.
- EXITCODE
- Implicitně je návratová hodnota procmailu nula
(úspěch), pokud úspěšně
doručil zprávu nebo byla proměnná HOST
špatně nastavena a na příkazové
řádce nebyly žádné další
konfigurační soubory; jinak je vráceno
selhání. Ještě předtím ale
procmail prozkoumá hodnotu této proměnné.
Pokud byla této proměnné přiřazena
kladná hodnota, použije se jako návratová
hodnota při ukončení procmailu. Pokud je tato
proměnná nastavena, ale prázdná, procmail
použije návratovou hodnotu vrácenou programem
TRAP Pokud tato proměnná není nastavena,
procmail ji nastaví krátce před
vyvoláním programu TRAP.
- LASTFOLDER
- Tuto proměnnou nastaví procmail, kdykoliv
doručí nějakou zprávu do složky nebo do
programu. Vždy obsahuje jméno souboru (nebo programu) kam
procmail doručil zprávu. Pokud byla zpráva
doručena do více složek najednou, bude $LASTFOLDER
obsahovat hardlinkovaná jména souborů
oddělěná mezerami.
- MATCH
- Procmail přiřadí této proměnné
hodnotu, kdykoliv má uložit text z
úspěšně porovnaného
regulárního výrazu. Obsahuje veškerý
text vyhovující regulárnímu výrazu za
speciálním znakem `\/'.
- SHIFT
- Přiřazení kladné hodnoty této
proměnné má stejný efekt jako
příkaz `shift' v sh(1). Tento příkaz
má největší využití při
získání dalších argumentů
předaných procmailu, když je použit jako
generický filtr e-mailových zpráv.
- INCLUDERC
- Jméno konfiguračního souboru (relativní
vzhledem k aktuálnímu adresáři), který
bude zařazen do zpracování, jako by byl
součástí aktuálního
konfiguračního souboru. Vnořování je
povoleno a je limitováno pouze systémovými zdroji
(paměť a deskriptory souborů). Protože nejsou
prováděny žádné kontroly
přístupových práv nebo vlastníka
konfiguračního souboru, měli by se
uživatelé INCLUDERC ujistit, že právo
zapisovat do něj nebo do jeho adresáře mají
jen důvěryhodní uživatelé.
Přiřazení INCLUDERC na
příkazové řádce nemá
žádný efekt.
- SWITCHRC
- Určuje konfigurační soubor (relativně k
aktuálnímu adresáři), na který se
při zpracovávání přejde. Pokud tento
soubor neexistuje nebo se nejedná o normální soubor
či /dev/null, zapíše se do logu chyba a
zpracovávání bude pokračovat v
aktuálním konfiguračním souboru. V
opačném případě se
zpracovávání aktuálního
konfiguračního souboru ukončí a začne
se s určeným konfiguračním souborem.
Odnastavení (unsetting) SWITCHRC způsobí
ukončení zpracovávání
aktuálního konfiguračního souboru, jako kdyby
normálně skončil. Stejně jako u
INCLUDERC se ani zde neprovádí
žádné kontroly přístupových
práv a vlastníka konfiguračního souboru a
přiřazení na příkazové
řádce nemají žádný vliv.
- PROCMAIL_VERSION
- Číslo verze spuštěného programu
procmail.
- PROCMAIL_OVERFLOW
- Tato proměnná bude nastavena na neprázdnou hodnotu
pokud procmail zjistí přetečení bufferu. Viz
sekce CHYBY, kde je uvedeno více o chování
při výskytu přetečení.
- COMSAT
- Implicitně je notifikace Comsat(8)/biff(1)
zapnutá. Dá se vypnout nastavením této
proměnné na `no'. Alternativně lze službu biff
upravit nastavením této proměnné buď na
`služba@', `@hostname' nebo `služba@hostname'.
Není-li specifikováno, použije se biff@localhost.
- DROPPRIVS
- Nastaví-li se na `yes', procmail `shodí' všechna
práva, kterých eventuálně mohl nabýt
(suid, sgid). Toto se hodí pouze v případě,
že chcete, aby se zbylá část souboru
/etc/procmailrc provedla jménem příjemce.
Rozšířené regulární výrazy¶
Následující speciální
konstrukce používá jak interní egrep v
procmailu, tak standardní egrep(1):
- ^
- Začátek řádku.
- $
- Konec řádku.
- .
- Jakýkoliv znak kromě konce řádku.
- a*
- Posloupnost libovolného, i nulového počtu
áček.
- a+
- Posloupnost jednoho nebo více áček.
- a?
- Jedno nebo žádné a.
- [^-a-d]
- Jakýkoliv znak, který není pomlčka, a,
b, c, d nebo konec řádku.
- de|abc
- Buď posloupnost `de' nebo `abc'.
- (abc)*
- Žádný výskyt nebo libovolný
počet opakování posloupnosti `abc'.
- \.
- Jediná tečka; \ se používá k uvození všech znaků se zvláštním významem. Viz také použití $\ u proměnných.
Tohle byly samozřejmě pouze příklady. Jakákoliv složitější kombinace je rovněž přípustná.
Následující speciální
konstrukce používá specifická
rozšíření procmailu:
- ^ nebo $
- Odpovídá novému řádku (u
víceřádkových porovnání).
- ^^
- Zakotví výraz na úplném začátku
porovnávané oblasti, resp. na jejím
úplném konci je-li tato kombinace nalezena na konci
výrazu.
- \< nebo \>
- Porovnání se shoduje se znakem před anebo za slovem.
Tyto speciální výrazy jsou pouhým synonymem
pro `[^a-zA-Z0-9_]', ale shoda nastane i pro znak `nový
řádek'. Jelikož tyto symboly se shodují se
skutečnými znaky, lze je použít pouze k
oddělení slov, nikoli pro odlišení mezer mezi
slovy.
- \/
- Rozděluje výraz na dvě části.
Všechno co se shoduje v pravé části se
přiřadí proměnné MATCH.
PŘÍKLADY¶
Viz manuálová stránka procmailex(5).
NÁSTRAHY¶
Akční řádek, který pokračuje na dalším řádku musí vždycky končit obráceným lomítkem, dokonce ani kdyby spouštěný shell nepotřeboval nebo nechtěl, aby obrácené lomítko takový řádek označovalo. Důvod spočívá v dvoufázovém procesu analýzy řádku (nejdřív procmail, potom shell (nebo také ne, v závislosti na SHELLMETAS)).
Nedávejte na podmínkové řádky s regulárními výrazy žádné komentáře, protože celý řádek je kompletně předán internímu egrepu (kromě pokračovacích obrácených lomítek na konci řádku).
Úvodní mezera na řádku na němž pokračuje regulární výraz je obvykle ignorována (takže můžete pokračování odsadit), ale nikoliv na pokračovacích podmínkových řádcích, které jsou vyhodnocovány podle pravidel sh(1) pro substituce uvnitř dvojitých závorek.
Dávejte si pozor na zacyklení při provádění nezdravých věcí, jako třeba odeslání zprávy (forward) na svůj vlastní účet. Zacyklení může být přerušeno správným použitím LOCKTIMEOUT.
Jakékoliv implicitní (standardní) hodnoty, které má procmail pro některé proměnné vždycky přepíší už definované hodnoty. Pokud chcete implicitní hodnoty s jistotou změnit, musíte nové hodnoty definovat v konfiguračním souboru, nebo jako parametr na příkazovém řádku.
Soubor /etc/procmailrc nemůže změnit nastavení PATH v uživatelských konfiguračních souborech, protože když procmail projde soubor /etc/procmailrc, je tato hodnota je resetována. I když v této oblasti dojde v budoucnu ke zlepšení, jediným správným řešením je v současné době překompilování procmailu s požadovanou hodnotou.
Proměnné nastavené uvnitř akce typu `|' spouštěné shellem si nezachovávají své hodnoty po ukončení předpisu jelikož jsou nastaveny v podřízeném shellu spuštěném procmailem. Chcete-li mít jistotu, že si proměnná podrží svou hodnotu, musíte provést přiřazení ještě před uvozujícím `|' předpisu.
Pokud definujete v doručujícím
předpisu příznak `h' nebo `b' a dojde ke shodě
podmínky, pak, pokud jste nedefinovali zároveň
příznak `c', tělo zprávy resp.
záhlaví bude bez varování ztraceno.
DALŠÍ INFORMACE¶
procmail(1), procmailsc(5), procmailex(5), sh(1), csh(1), mail(1), mailx(1), binmail(1), uucp(1), aliases(5), sendmail(8), egrep(1), regexp(5), grep(1), biff(1), comsat(8), lockfile(1), formail(1)
CHYBY¶
[přibližně] Procmail je schopen sám o sobě provádět substituce proměnných pouze tohoto typu: $jméno, ${jméno}, ${jméno:-text}, ${jméno:+text}, ${jméno-text}, ${jméno+text}, $\jméno, $#, $n, $$, $?, $_, $- a $=; přičemž za $\name bude dosazen ekvivalent $jméno bez speciálních významů zvláštních znaků; za $_ bude dosazeno jméno aktuálního konfiguračního souboru, za $- $LASTFOLDER a $= bude obsahovat výsledek posledního předpisu. Výsledek substituce $\jméno navíc nebude rozdělen podle prázdných znaků. Když jsou použity volby -a nebo -m za $# se dosadí počet parametrů a za "$@" (uvozovky jsou povinné) se dosadí příslušné parametry. Ovšem pouze je-li předáván v seznamu parametrů nějakému programu a v tom případě je substituován pouze jeden výskyt "$@".
Substituce proměnných neohraničené uvozovkami jsou vždycky rozděleny podle mozer, tabulátorů a znaků konce řádku; proměnná IFS se interně nepoužívá.
Procmail nepodporuje substituci `~'.
Při zpracovávání konfiguračního souboru se používá řádková vyrovnávací paměť (řádkový buffer) o délce $LINEBUF. Jakékoliv rozšíření zpracovávaného řádku při substitucích nad tento limit bude oříznuto a bude nastavena proměnná PROCMAIL_OVERFLOW. Pokud je řádek, na kterém došlo k přetečení podmínkový nebo akční řádek, bude vyhodnocen jako selhání a procmail bude pokračovat ve zpracovávání. Pokud je to přiřazení proměnné nebo počáteční řádek předpisu, ukončí procmail zpracovávání konfiguračního souboru.
Pokud má globální semafor (zámek) relativní cestu, a aktuální adresář není ten, v němž byl semafor vytvořen, potom semafor nebude odstraněn, pokud procmail v tomto místě skončí (řešení: pro globální semafor používejte absolutní cestu).
Pokud má konfigurační soubor relativní cestu a v okamžiku jeho prvního otevření obsahuje MAILDIR relativní cestu a pokud je procmail přinucen rozdvojit se a aktuální adresář byl změněn od doby, kdy byl konfigurační soubor otevřen, nebude se procmail moci rozdvojit (řešení: použít absolutní cestu k určení konfiguračního souboru nebo zajistit, aby MAILDIR obsahoval absolutní cestu, když je konfigurační soubor otevírán).
Lokální semafor v předpisu, který otevírá neforkující vnořený blok nebude fungovat tak, jak čekáte.
Při uložení obsahu standardního výstupu předpisu do proměnné bude odstraněn právě jeden koncový znak `nový řádek'.
Nekteré nevhodné a nejasné
regulární výrazy způsobí nastavení
MATCH na nesprávnou hodnotu. Regulární výraz
může být opraven odstraněním jednoho nebo
více nepotřebných operátorů '*', '+',
nebo '?' na levé straně speciální konstrukce \/
.
RŮZNɶ
Pokud regulární výraz obsahuje `^TO_', bude tento řetězec nahrazen výrazem `(^((Original-)?(Resent-)?(To |Cc |Bcc) |(X-Envelope |Apparently(-Resent)?)-To) :(.*[^-a-zA-Z0-9_.])?)', což by mělo zachytit všechny možné specifikace adresáta obsahující určitou adresu.
Pokud regulární výraz obsahuje `^TO', bude tento řetězec nahrazen výrazem `(^((Original-)?(Resent-)?(To |Cc |Bcc) |(X-Envelope |Apparently(-Resent)?)-To) :(.*[^a-zA-Z])?)', což by mělo zachytit všechny možné specifikace adresáta obsahující určité slovo.
Pokud regulární výraz obsahuje `^FROM_DAEMON', bude to nahrazeno výrazem [přibližně] `(^(Mailing-List : |Precedence 'u' :.*(junk |bulk |list) |To : Multiple recipients of |(((Resent-)?(From |Sender) |X-Envelope-From) : |>?From )([^>]*[^(.%@a-z0-9])?(Post(ma?(st(e?r)? |n) |office) |(send)?Mail(er)? |daemon |m(mdf |ajordomo) |n?uucp |LIST(SERV 'u' |proc) |NETSERV |o(wner |ps) |r(e(quest |sponse) |oot) |b(ounce 'u' |bs\.smtp) |echo |mirror |s(erv(ices? |er) |mtp(error)? |ystem) |A(dmin(istrator)? |MMGR |utoanswer))(([^).! :a-z0-9][-_a-z0-9]*)?[%@>\t ][^<)]*(\(.*\).*)?)?$([^>] |$)))', což by mělo zachytit zprávy odeslané většinou démonů.
[přibližně] Pokud regulární výraz obsahuje `^FROM_MAILER', bude to nahrazeno výrazem [přibližně] `(^(((Resent-)?(From |Sender) |X-Envelope-From) : |>?From )([^>]*[^(.%@a-z0-9])?(Post(ma(st(er)? |n) |office) |(send)?Mail(er)? |daemon |mmdf |n?uucp |ops |r(esponse |oot) |(bbs\.)?smtp(error)? |s(erv(ices? |er) |ystem) |A(dmin(istrator)? |MMGR))(([^).! :a-z0-9][-_a-z0-9]*)?[%@>\t ][^<)]*(\(.*\).*)?)?$([^>] |$))' (ořezaná verze `^FROM_DAEMON'), což by mělo zachytit zprávy od většiny poštovních démonů.
[přibližně] Pro přiřazení logických hodnot proměnným jako VERBOSE, DELIVERED nebo COMSAT procmail akceptuje jako logickou jedničku každý řetězec, který začíná: nenulovou hodnotou, slovem `on', `y', `t' nebo `e'. Nepravda (logická 0) je jakýkoliv řetězec začínající nulovou hodnotou, `off', `n', `f' nebo `d'.
Pokud akční řádek předpisu specifikuje program, pak řádek skládající se z pouhé dvojice zpětné lomítko-nový řádek na jinak prázdném řádku bude převeden na znak nový řádek.
Zpracování regulárních
výrazů, zabudované v procmailu, nepodporuje
pojmenované třídy znaků (named character
classes).
POZNÁMKY¶
Jelikož v konfiguračním souboru se všeobecně ignorují úvodní bílé znaky bez uvozovek, můžete je využít zcela dle své chuti k odsazování textu.
Úvodní `|' na začátku akčního řádku, které specifikuje program nebo filtr se odřeže ještě před testováním řádku na přítomnost $SHELLMETAS.
Soubory zahrnuté direktivou INCLUDERC a obsahující pouze přiřazení do proměnných mohou být sdíleny s sh.
Současné chování přiřazení INCLUDERC a SWITCHRC na příkazovém řádku nemůže být zaručeno. V minulosti se již změnilo a v dalších verzích může být změněno znovu nebo úplně vypuštěno.
Chcete-li opravdu komplikované zpracování, můžete zvážit dokonce rekurzivní volání procmailu.
Za starých časů muselo být ':0'
značící začátek nového
předpisu změněno na
':n', kde 'n' představuje počet podmínek, které
následují.
AUTOŘI¶
Stephen R. van den Berg
<srb@cuci.nl>
Philip A. Guenther
<guenther@sendmail.com>
2001/08/04 | BuGless |