procmailrc - konfigurační soubor programu
procmail
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.
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.
Řá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.
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 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).
- LOGNAME, HOME and
USER_SHELL
- Vaše (příjemcovy) standardní hodnoty
- SHELL
- /bin/sh
- PATH
- $HOME/bin :/usr/local/bin :/usr/bin :/bin (Výjimkou je doba
zpracování souboru /etc/procmailrc, kdy je nastavena na
`/usr/local/bin :/usr/bin :/bin'.)
- SHELLMETAS
- & |<>~;?*[
- SHELLFLAGS
- -c
- ORGMAIL
- /var/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
- /usr/sbin/sendmail
- SENDMAILFLAGS
- -oi
- 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.24
- 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.
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.
The following tokens are known to both the procmail internal egrep
and the standard egrep(1) (beware that some egrep implementations
include other non-standard extensions; in particular, the repetition
operator { is not supported by procmail's egrep):
- ^
- 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.
Viz manuálová stránka
procmailex(5).
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.
procmail(1), procmailsc(5), procmailex(5),
sh(1), csh(1), mail(1), mailx(1),
uucp(1), aliases(5), sendmail(8), egrep(1),
regexp(5), grep(1), biff(1), comsat(8),
lockfile(1), formail(1)
[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'.
Some non-optimal and non-obvious regexps set MATCH to an incorrect
value. The regexp can be made to work by removing one or more unneeded '*',
'+', or '?' operators on the left-hand side of the \/ token.
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 :.*(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
|proc) |NETSERV |o(wner |ps) |r(e(quest |sponse) |oot) |b(ounce |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).
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í.
Překlad této příručky do
španělštiny vytvořili Jindřich
Vavruška <netplus@comp.cz> a Pavel Heimlich
<tropikhajma@gmail.com>
Tento překlad je bezplatná dokumentace;
Přečtěte si
GNU General
Public License Version 3 nebo novější
ohledně podmínek autorských práv. Neexistuje
ŽÁDNÁ ODPOVĚDNOST.
Pokud narazíte na nějaké chyby v
překladu této příručky, pošlete
e-mail na adresu
translation-team-cs@lists.sourceforge.net.