Provided by: manpages-pl_0.7-2_all 

NAZWA
procmailrc - plik rc procmaila
SKŁADNIA
$HOME/.procmailrc
OPIS
Szybką orientację w temacie można uzyskać, czytając UWAGI umieszczone na końcu strony podręcznika
procmail(1).
Plik rc składa się z przypisań zmiennych środowiskowych (niektóre z nich mają specjalne znaczenie dla
procmaila) i reguł. W najprostszej postaci, reguły są po prostu jednoliniowymi wyrażeniami regularnymi,
które są poszukiwane w nagłówkach przychodzącej poczty. Pierwsza reguła, która zostanie dopasowana, jest
używana do określenia, gdzie dany list ma pójść (zwykle do pliku). Jeśli przetwarzanie dojdzie do końca
pliku rc, procmail dostarczy pocztę do $DEFAULT.
Istnieją dwa rodzaje reguł: dostarczające i niedostarczające. Jeśli dopasowana zostanie reguła
dostarczająca, procmail zakłada, że poczta (jak się można domyślić) jest dostarczona i zakończy
przetwarzanie pliku rc po wykonaniu linii akcji reguły. Jeśli dopasowana zostanie reguła
niedostarczająca, to przetwarzanie pliku rc będzie kontynuowane nawet po wykonaniu akcji tej reguły.
Reguły dostarczające są tymi, które powodują zapis nagłówka lub ciała listu do pliku, jego zaabsorbowanie
przez program lub przekazanie (forwardowanie) do innego adresu pocztowego.
Reguły niedostarczające to te, które łapią wyjście programu lub filtru z powrotem do procmaila, lub te,
które rozpoczynają zagnieżdżony blok.
Można powiedzieć procmailowi, by traktował regułę dostarczającą jako niedostarczającą poprzez przekazanie
takiej regule flagi "c". Spowoduje to, że procmail wygeneruje kopię listu (carbon copy), dostarczając go
regule i kontynuując przetwarzanie pliku rc.
Używając dowolnej liczby reguł, można posortować pocztę wprost do określonych folderów pocztowych. Należy
pamiętać jednak, że poczta może wpływać do tych folderów w tym samym momencie (jeśli kilka procmaili
działa naraz, co nie jest nieprawdopodobne przy dużej ilości poczty). Aby upewnić się, że nie narobi to
bałaganu, zalecane jest robienie właściwego użytku z plików blokujących.
Inicjacje zmiennych środowiskowych i reguły mogą być swobodnie przeplatane w pliku rc. Jeśli zmienna
środowiskowa ma dla procmaila specjalne znaczenie, zostanie użyta odpowiednio w momencie przetwarzania.
(np. można zmienić katalog bieżący, kiedy tylko jest taka potrzeba, przez podanie nowego MAILDIR,
zamienić pliki blokujące przez podanie nowego LOCKFILE, zmienić umask, itd., możliwości jest
nieskończenie wiele :-).
Inicjacje i podstawienia tych zmiennych środowiskowych są obsługiwane dokładnie jak w sh(1) (włączając w
to wszystkie możliwe cytowania i sekwencje specjalne) i dodatkowo: spacje dookoła znaku "=" są
ignorowane, a każda zmienna nie zawierająca końcowego "=" zostanie usunięta ze środowiska. Każdy program
w odwrotnych apostrofach, uruchomiony przez procmail, będzie miał przekazany cały list na swoim wejściu
(stdin).
Komentarze
Słowo zaczynające się od # wraz z wszystkimi znakami występującymi po nim aż do znaku nowej linii jest
ignorowane. Nie dotyczy to linii warunkowych, które nie mogą być komentowane.
Reguły
Linia zaczynająca się od ":" oznacza początek reguły. Ma następujący format:
:0 [flagi] [ : [lokalnyplikblokujący] ]
<zero lub więcej warunków (jeden na linię)>
<dokładnie jedna linia akcji>
Warunki zaczynają się od "*" i wszystko, co następuje po tym znaku, jest przekazywane niezmienione
wewnętrznemu egrepowi, z wyjątkiem początkowych i końcowych białych spacji. Wyrażenia regularne są
całkowicie kompatybilne z normalnymi wyrażeniami regularnymi egrep(1). Zobacz także Rozszerzone
wyrażenia regularne.
Warunki są logicznie koniugowane; jeżeli nie ma warunków, wynik jest domyślnie prawdziwy.
Flagi mogą być dowolnymi z następujących:
H Egrepuj nagłówek (domyślnie).
B Egrepuj ciało.
D Powiedz wewnętrznemu egrepowi, aby rozróżniał duże i małe litery (zachowaniem domyślnym jest
ignorowanie wielkości liter).
A Ta reguła będzie zależeć od ostatniej poprzedzającej reguły (na bieżącym poziomie zagnieżdżenia) bez
flagi "A" lub "a". Umożliwia to wiązanie akcji zależących od wspólnego warunku.
a Ma takie samo znaczenie jak flaga "A" z dodatkowym warunkiem mówiącym, że bezpośrednio poprzedzająca
reguła musi się pomyślnie zakończyć przed uruchomieniem bieżącej reguły.
E Ta reguła jest wykonywana tylko, jeśli bezpośrednio poprzedzająca reguła nie była wykonana.
Wykonanie tej reguły wyłącza także wszelkie bezpośrednio następujące reguły z flagą "E". Umożliwia
to definiowanie akcji typu "else if".
e Ta reguła jest wykonywana tylko, jeśli bezpośrednio poprzedzająca reguła się nie powiodła (tj.
podjęto próbę wykonania akcji, ale skończyła się ona błędem).
h Przesyła nagłówek listu do potoku, pliku lub innego miejsca docelowego (domyślne).
b Przesyła ciało listu do potoku, pliku lub innego miejsca docelowego (domyślne).
f Zakłada, że potok jest filtrem.
c Generuje kopię carbon copy tego listu. Ma to tylko sens dla reguł dostarczających. Jedyną
niedostarczającą regułą, dla której flaga ta ma jakiś skutek jest wypadek zagnieżdżonego bloku — w
celu wygenerowania kopii proces procmaila zostanie sklonowany (pliki blokujące nie zostaną
odziedziczone); podczas gdy klon będzie pracować jak zwykle, rodzic przeskoczy blok.
w Czeka na zakończenie filtru lub programu i sprawdza kod wyjścia (normalnie ignorowany); jeśli filtr
zwrócił błąd, tekst nie był filtrowany.
W Ma takie samo znaczenie jak flaga "w", lecz powstrzyma wszelkie informacje typu "Program failure".
i Ignoruje wszelkie błędy zapisu na tej regule (np. zwykle przez wcześnie zamknięty potok).
r Tryb surowy: nie próbuje zapewnić, że list kończy się pustą linią i zapisuje go takim, jakim jest.
Istnieją pewne warunki specjalne, których można użyć, a które nie są w pełni wyrażeniami regularnymi. Aby
je wybrać, warunek musi zaczynać się od:
! Odwraca warunek.
$ Oszacowuje resztę warunku według reguł podstawiania sh(1) wewnątrz podwójnych cudzysłowów, pomija
początkowe białe spacje i ponownie przetwarza regułę.
? Używa kodu wyjścia podanego programu.
< Sprawdza, czy całkowita długość listu jest krótsza niż podana (dziesiętnie) liczba bajtów.
> Analogiczne do "<".
zmienna ??
Porównuje resztę warunku z wartością tej zmiennej środowiskowej (nie może to być pseudozmienna).
Specjalnymi wypadkami są zmienne "B", "H", "HB" i "BH", które zwyczajnie przeciążają domyślny obszar
przeszukiwania nagłówka/ciała (header/body) zdefiniowanego na początku dla tej reguły.
\ Aby zacytować dowolny z powyższych znaków na początku linii.
Lokalny plik blokujący
Jeśli umieści się drugi (kończący) ":" w pierwszej linii reguły, to procmail użyje lokalnego pliku
blokującego (locallockfile; tylko dla tej reguły). Opcjonalnie można podać nazwę pliku, który będzie
użyty; jednak jeśli się tego nie zrobi, procmail użyje nazwy pliku celu (lub nazwy pliku następującej po
pierwszym ">>") i dopisze do niej $LOCKEXT.
Linia akcji reguły
Linia akcji może zaczynać się od następujących znaków:
! Przekazuje (forwarduje) e-mail do wszystkich podanych adresów pocztowych.
| Uruchamia określony program, prawdopodobnie w $SHELL-u, jeśli wykryto któryś ze znaków
$SHELLMETAS. Można opcjonalnie poprzedzić ten symbol potoku wyrażeniem zmienna=, co spowoduje, że
standardowe wyjście (stdout) programu zostanie przechwycone do zmiennej środowiskowej zmienna
(procmail nie zakończy przetwarzania pliku rc w tym momencie). Jeśli podany zostanie tylko symbol
potoku, bez żadnego programu, to procmail wypisze list na stdout.
{ Jeśli następuje za tym przynajmniej jedna spacja, tabulacja lub nowa linia, to oznacza to początek
zagnieżdżonego bloku. Wszystko, aż do następnego nawiasu zamykającego, będzie zależeć od warunków
podanych dla tej reguły. Dozwolone jest nieograniczone zagnieżdżanie. Nawias zamykający istnieje
zwyczajnie po to, by oddzielić blok; w żadnym wypadku nie wywoła zakończenia procmaila w żaden
sposób. Po dotarciu do końca bloku, przetwarzanie będzie kontynuowane, jak zwykle, po tym bloku.
W bloku zagnieżdżonym flagi "H" i "B" dotyczą tylko warunków prowadzących do tego bloku, flagi "h"
i "b" w ogóle nie działają.
Wszystko inne będzie uznawane za nazwę skrzynki pocztowej (zarówno nazwę pliku lub katalogu, bezwzględną
lub względną w stosunku do bieżącego katalogu (zobacz opis zmiennej MAILDIR)). Jeśli jest to (możliwe że
jeszcze nieistniejąca) nazwa pliku, poczta zostanie do niego doklejona.
Jeśli jest to katalog, poczta zostanie dostarczona do nowo utworzonego, unikatowego pliku o nazwie
$MSGPREFIX* w podanym katalogu. Jeśli nazwa skrzynki pocztowej kończy się "/.", to katalog ten jest
uznawany za folder MH, tj. procmail użyje następnego numeru, który będzie dostępny. Jeśli nazwa skrzynki
pocztowej kończy się znakiem "/", to ten katalog jest uznawany za folder maildir, tj. procmail zapisze
pocztę w pliku w podkatalogu o nazwie "tmp", a następnie przeniesie go do podkatalogu o nazwie "new".
Jeśli skrzynka pocztowa jest podana jako folder MH lub maildir, procmail utworzy wymagane katalogi, jeśli
nie istnieją, zamiast traktować skrzynkę pocztową jako nieistniejącą. Gdy procmail dostarcza do
katalogów, można podać wiele katalogów, do których należy dostarczyć (procmail dostarczy pocztę, używając
twardych dowiązań).
Domyślne wartości zmiennych środowiskowych
LOGNAME, HOME i SHELL Twoje (odbiorcy) wartości domyślne
PATH $HOME/bin :/usr/local/bin :/usr/bin :/bin (z wyjątkiem przetwarzania pliku
/etc/procmailrc, w którego czasie zostanie ustawione na "/usr/local/bin:/usr/bin
:/bin".)
SHELLMETAS &|<>~;?*[
SHELLFLAGS -c
ORGMAIL /var/mail/$LOGNAME
(Chyba że podano -m, wtedy opcja ta jest nieustawiona)
MAILDIR $HOME
(Chyba że nazwa pierwszego pomyślnie otwartego pliku rc zaczyna się od "./", w
którym wypadku wartością domyślną jest ".")
DEFAULT $ORGMAIL
MSGPREFIX msg.
SENDMAIL /usr/sbin/sendmail
SENDMAILFLAGS -oi
HOST Nazwa bieżącego komputera
COMSAT no
(Jeśli plik rc jest podany w linii komend)
PROCMAIL_VERSION 3.23pre
LOCKEXT .lock
Inne czyszczone lub preustawiane zmienne środowiskowe to IFS, ENV i PWD.
Z powodów bezpieczeństwa podczas startu procmail wyrzuci wszystkie zmienne środowiskowe, co do których ma
podejrzenia, że mogą wpływać na działanie dynamicznego konsolidatora (ld.so(8)).
Środowisko
Zanim zgubisz się w mętliku zmiennych środowiskowych, pamiętaj że wszystkie one mają sensowne wartości
domyślne.
MAILDIR Bieżący katalog w momencie, gdy procmail jest uruchomiany (znaczy to, że wszystkie ścieżki są
relatywne do $MAILDIR).
DEFAULT Domyślny plik mailbox (jeśli nie powiedziano inaczej, procmail wrzuci pocztę do tego pliku).
Procmail automatycznie użyje $DEFAULT$LOCKEXT jako pliku blokującego przed zapisaniem czegoś
do tej skrzynki pocztowej. Nie trzeba ustawiać tej zmiennej, ponieważ standardowo wskazuje
ona na standardową skrzynkę pocztową systemu.
LOGFILE Plik ten będzie zawierał wszelkie komunikaty diagnostyczne i komunikaty o błędach od
procmaila (zazwyczaj żadne) lub od innych programów uruchomionych przez procmaila. Jeśli
plik ten nie jest podany, komunikaty będą przesyłane e-mailem z powrotem do nadawcy. Zobacz
także LOGABSTRACT.
VERBOSE Ustawiając tę zmienną na "yes" lub "on", można włączyć rozszerzoną diagnostykę, wyłączyć zaś
można ją przez ustawienie zmiennej na "no" lub "off".
LOGABSTRACT Zanim procmail zakończy, raportuje dostarczoną wiadomość w $LOGFILE, pokazując pola "From " i
"Subject: " nagłówka, folder, w którym wiadomość została zapisana, oraz jej długość (w
bajtach). Ustawienie tej zmiennej na "no" powstrzymuje generowanie tych informacji. Po
ustawieniu jej na "all", procmail będzie logował każdą pomyślnie zakończoną regułę
dostarczenia, którą przetworzy.
LOG Wartość przypisana tej zmiennej będzie dopisana do pliku $LOGFILE.
ORGMAIL Zazwyczaj mailbox systemowy (ORiGinal MAILbox). Jeśli z jakiegoś powodu (jak przepełnienie
systemu plików), list nie mógł być dostarczony do tego mailboxa, to procmail dostarczy go
tutaj. Jeśli jednak nie będzie mógł nawet tego uczynić, to list zostanie odbity do nadawcy.
LOCKFILE Globalny plik blokujący. Jeśli plik ten już istnieje, procmail będzie czekał aż zniknie i
utworzy go samodzielnie (i wyczyści gdy skończy). Jeśli podano więcej niż jeden plik
blokujący, to poprzedni zostanie usunięty przed próbą utworzenia nowego. Używanie globalnego
pliku blokującego jest złą praktyką, lepiej używać lokalnych (zależnych od reguły).
LOCKEXT Domyślne rozszerzenie, które jest dodawane do plików docelowych, aby określić, którego z
lokalnych plików blokujących użyć (tylko jeśli używanie tych plików jest włączone dla danej
reguły).
LOCKSLEEP Liczba sekund, które procmail ma odespać przed każdą kolejną próbą użycia pliku blokującego
(jeśli taki już istniał); jeśli liczby nie podano, to wynosi ona 8 sekund.
LOCKTIMEOUT Liczba sekund, które muszą minąć od utworzenia lub ostatniej modyfikacji pliku blokującego,
zanim procmail zdecyduje, że jest to plik blokujący pozostawiony w wyniku błędu i że trzeba
go usunąć na siłę. Wartość zero mówi, że timeout nie jest ustawiony i że procmail ma czekać
do skutku. Jeśli nie jest podany, to odpowiada 1024 sekundom. Wartość ta jest przydatna w
zapobieganiu niezdefiniowanym zawieszeniom programów sendmail(8) lub procmail. Procmail jest
odporny na różnice w czasie lokalnym na różnych komputerach.
TIMEOUT Liczba sekund, które muszą minąć zanim procmail zdecyduje, że dziecko, które uruchomił,
musiało się zawiesić. Program odbierze od procmaila sygnał TERMINATE, a przetwarzanie pliku
rc pójdzie dalej. Jeśli podano zero, to nie będzie tu używany czas oczekiwania i procmail
będzie czekać do skutku; jeśli zmienna nie jest podana, wartość domyślna odpowiada 960
sekundom.
MSGPREFIX Przedrostek nazwy pliku, który jest używany w wypadku dostarczania do katalogu (nie używany w
katalogach maildir lub MH).
HOST Jeśli nie jest to nazwa bieżącego komputera, to przetwarzanie bieżącego pliku rc zostaje
natychmiast przerywane. Jeśli w linii komend podano inne pliki rc, to przetwarzanie będzie
kontynuowane z następnym z nich. Jeśli wykorzystane zostaną wszystkie pliki rc, program
zakończy pracę, lecz nie wygeneruje błędu (np. mailer będzie sądził, że wiadomość została
dostarczona).
UMASK Nazwa mówi za siebie (jeśli nie, zapomnij o tym :-). Cokolwiek zostanie przypisane do
zmiennej UMASK jest interpretowane jako wartość ósemkowa. Jeśli nie jest podana, to domyślna
wartość maski wynosi 077. Jeśli maska zezwala na ustawienie o+x, to owo o+x zostanie dodane
do praw dostępu wszystkich skrzynek pocztowych, do których procmail dostarcza pocztę
bezpośrednio. Może to być używane do sprawdzania, czy przybyła nowa poczta.
SHELLMETAS Jeśli jakikolwiek ze znaków wymienionych w SHELLMETAS pojawi się w linii określającej filtr
lub program, to linia zostanie przekazana powłoce $SHELL, a nie zostanie wywołana
bezpośrednio.
SHELLFLAGS Każde wywołanie powłoki $SHELL będzie następujące:
"$SHELL" "$SHELLFLAGS" "$*";
SENDMAIL Jeśli nie używa się właściwości forwardowania, nie należy się tym przejmować. Określa to
program wzywany do forwardowania poczty.
Jest wywoływany jako: "$SENDMAIL" $SENDMAILFLAGS "$@";
NORESRETRY Liczba powtórek, które mają być dokonane po wystąpieniu jednego z błędów "process table
full", "file table full", "out of memory" lub "out of swap space". Jeśli liczba ta jest
ujemna, procmail będzie próbował wiecznie; jeśli nie jest podana, odpowiada wartości 4.
Powtórki zachodzą co każde $SUSPEND sekund. Idea, która się za tym kryje, jest taka, że jeśli
np. całkowicie wykorzystane zostały obszar pamięci wymiany lub tablica procesów, to wiele
innych programów wykryje to także i przerwie działanie lub "padnie", zwalniając cenne zasoby
procmailowi.
SUSPEND Liczba sekund, podczas których procmail będzie czekał, jeśli musi, na coś, co obecnie jest
niedostępne (pamięć, fork, itd.); jeśli nie podano, to wartością domyślną jest 16 sekund.
Zobacz także: LOCKSLEEP.
LINEBUF Długość wewnętrznych buforów liniowych, nie może być mniejsza niż 128. Wszystkie linie
odczytywane z pliku rc nie powinny mieć więcej niż $LINEBUF znaków przed i po rozszerzeniu.
Jeśli wartość nie jest podana, odpowiada 2048. Limitu tego oczywiście nie stosuje się do
samego listu, który może mieć dowolne długości linii lub może być plikiem binarnym. Patrz
także opis PROCMAIL_OVERFLOW.
DELIVERED Jeśli ustawione na "yes", to procmail będzie udawał przed agentem pocztowym, że poczta
została dostarczona. Jeśli poczta nie mogła być dostarczona po napotkaniu tego ustawienia,
zostanie utracona (tj. nie będzie zwrócona do nadawcy).
TRAP Gdy procmail będzie kończył działanie, ale nie z powodu otrzymania sygnału, to wywoła
zawartość tej zmiennej. Kopia listu może być odczytana ze stdin. Wszelkie wyjście
wyprodukowane przez tę komendę będzie dodane do pliku $LOGFILE. Przykładowe zastosowania TRAP
to: usuwanie plików tymczasowych, logowanie własnych uzupełnień, itp. Zobacz także EXITCODE i
LOGABSTRACT.
EXITCODE Domyślne procmail zwraca zerowy kod błędu (oznaczający powodzenie), jeśli udało mu się
poprawnie dostarczyć list lub gdy zmienna HOST nie była ustawiona na nazwę bieżącego
komputera, a w linii poleceń nie podano kolejnych plików rc. W przeciwnym wypadku zwracany
jest błąd. Przed zakończeniem jednakże procmail sprawdza wartość tej zmiennej. Jeśli została
ustawiona na dodatnią wartość numeryczną, procmail użyje jej jako kodu wyjścia. Jeśli zmienna
ta jest ustawiona, lecz pusta, procmail ustawi kod wyjścia na wartość zwracaną przez program
TRAP. Jeśli zmienna ta nie została ustawiona, procmail ustawi ją na krótko przed wywołaniem
programu TRAP.
LASTFOLDER Zmienna ta jest inicjowana przez procmail za każdym razem, gdy dostarcza coś jakiemuś
folderowi lub programowi. Zawsze zawiera nazwę ostatniego foldera (lub programu), do którego
coś dostarczano. Jeśli ostatnie dostarczenie obejmowało łącznie kilka folderów, to
$LASTFOLDER będzie zawierał nazwy wszystkich plików (będących de facto dowiązaniami twardymi)
jako listę rozdzieloną spacjami.
MATCH Zmienna ta jest inicjowana przez procmail za każdym razem, gdy ma wyciągnąć tekst z wyrażenia
regularnego. Będzie zawierać cały tekst odpowiadającego wyrażenia regularnego występującego
po żetonie "\/".
SHIFT Przypisanie dodatniej wartości tej zmiennej daje taki sam rezultat, jak komenda "shift" w
sh(1). Komenda ta jest najbardziej użyteczna do wyciągania dodatkowych argumentów podanych
procmailowi działającemu jako filtr pocztowy.
INCLUDERC Nazywa plik rc (względny w stosunku do bieżącego katalogu), który powinien być włączony jako
część bieżącego pliku rc. Dozwolone jest nieograniczone zagnieżdżanie (limitowane tylko przez
zasoby systemowe takie jak pamięć czy liczba dostępnych deskryptorów plików). Ponieważ nie są
są sprawdzane ani uprawnienia, ani właściciel pliku rc, użytkownicy INCLUDERC powinni się
upewnić, że tylko zaufani użytkownicy mają prawa do zapisu włączanego pliku rc i do katalogu,
w którym się ten plik znajduje. Przypisanie zmiennej INCLUDERC wartości w linii poleceń nie
ma żadnego efektu.
SWITCHRC Nazywa plik rc (względny w stosunku do bieżącego katalogu), na który powinno się przełączyć
przetwarzanie. Jeśli podany plik rc nie istnieje, nie jest zwykłym plikiem ani plikiem
/dev/null, to zostanie wypisany błąd i będzie kontynuowane przetwarzanie bieżącego pliku rc.
W przeciwnym razie przetwarzanie bieżącego pliku rc zostanie przerwane i rozpocznie się
przetwarzanie pliku podanego jako wartość tej zmiennej. Jeśli zmienna SWITCHRC zostanie
usunięta, to procmail przerywa przetwarzanie bieżącego pliku, tak jakby plik ten się kończył
na linii usuwającej tę zmienną. Podobnie jak w przypadku INCLUDERC nie są są sprawdzane ani
uprawnienia, ani właściciel pliku rc, a przypisanie tej zmiennej wartości w linii poleceń nie
ma żadnego efektu.
PROCMAIL_VERSION
Numer wersji działającego procmaila.
PROCMAIL_OVERFLOW
Zmienna ta zostanie ustawiona na niepustą wartość, jeśli procmail wykryje przepełnienie
bufora. Patrz rozdział BŁĘDY poniżej po opis innych działań podejmowanych po wykryciu
przepełnienia bufora.
COMSAT Notyfikacja comsat(8)/biff(1) domyślnie jest włączona, lecz można ją wyłączyć przez
ustawienie tej zmiennej na "no". Alternatywnie, usługę biff można dokonfigurować przez
ustawienie zmiennej na "service@", "@hostname" lub "sevice@hostname". Wartością domyślną jest
biff@localhost.
DROPPRIVS Jeśli jest to ustawione na "yes", procmail porzuci wszelkie uprawnienia (suid lub sgid),
jakie może mieć. Opcja ta jest użyteczna, aby zagwarantować, że dolna część pliku
/etc/procmailrc jest wywoływana w imieniu odbiorcy.
Rozszerzone wyrażenia regularne
Następujące żetony rozpoznawane są zarówno przez wewnętrzny egrep procmaila, jak i przez standardowy
egrep(1) (proszę być świadomym tego, że niektóre implementacje egrepa zawierają niestandardowe
rozszerzenia, w szczególności operator powtarzania { nie jest obsługiwany przez wewnętrznego egrepa
procmaila):
^ Początek linii.
$ Koniec linii.
. Dowolny znak poza znakiem nowej linii.
a* Dowolna sekwencja składająca się z zera lub więcej znaków "a".
a+ Dowolna sekwencja składająca się z jednego lub więcej znaków "a".
a? Ciąg pusty albo jeden znak "a".
[^-a-d] Dowolny znak, który nie jest kreską, znakiem "a", "b", "c" lub "d", lub znakiem nowej linii.
de|abc Albo sekwencja "de", albo "abc".
(abc)* Zero lub więcej sekwencji "abc".
\. Dopasowuje pojedynczą kropkę; należy użyć \ przed którymkolwiek ze znaków specjalnych, aby
pozbyć się jego specjalnego znaczenia. Patrz także opis podstawień zmiennych $\nazwa w
rozdziale BŁĘDY.
Były to tylko przykłady, oczywiście można używać również bardziej złożonych kombinacji.
Następujące znaczenia żetonów są rozszerzeniami procmaila:
^ lub $ Pasuje do znaku nowej linii (dla trafień wieloliniowych).
^^ Zakotwicza wyrażenie na samym początku obszaru przeszukiwania lub jeśli napotkane na końcu
wyrażenia, na samym końcu obszaru przeszukiwań.
\< lub \> Dopasowuje znak przed słowem lub po nim. Są to ogólnie skróty dla "[^a-zA-Z0-9_]", lecz mogą
także dopasowywać znaki nowej linii. Ponieważ odpowiadają rzeczywistym znakom, nadają się tylko
do oddzielania słów, nie do oddzielania przestrzeni między słowami.
\/ Dzieli wyrażenie na dwie części. Wszystko odpowiadające prawej stronie będzie przypisane do
zmiennej środowiskowej MATCH.
PRZYKŁADY
Patrz strona podręcznika procmailex(5).
ZASTRZEŻENIA
Kontynuowane linie w linii akcji, która określa program, muszą zawsze kończyć się odwrotnym ukośnikiem,
nawet jeśli używana powłoka nie potrzebuje lub nie chce odwrotnego ukośnika do wskazania kontynuacji.
Jest tak z powodu dwustopniowego procesu przetwarzania (najpierw procmail, potem powłoka (lub nie,
zależnie od SHELLMETAS)).
Nie wstawia komentarzy w regule w liniach warunkowych wyrażeń regularnych, linie te są przekazywane
wewnętrznemu egrepowi wprost (z wyjątkiem odwrotnych ukośników kontynuacji znajdujących się na końcu
linii).
Początkowe białe spacje w kontynuowanych wyrażeniach regularnych są zazwyczaj ignorowane (więc linie mogą
być wcięte), lecz nie jest tak w kontynuowanych wyrażeniach warunkowych, które są odczytywane według
reguł podstawiania sh(1) wewnątrz podwójnych cudzysłowów.
Uwaga na deadlocki podczas wykonywania niezdrowych rzeczy jak przekazywanie poczty na swoje własne konto.
Deadlocki można złamać przez właściwe użycie LOCKTIMEOUT.
Wszelkie domyślne wartości, których procmail używa dla zmiennych środowiskowych zawsze przeciążą te,
które były wcześniej zdefiniowane. Aby naprawdę przeciążyć wartości domyślne, należy je albo wstawić do
pliku rc, albo wypisać w linii poleceń jako argumenty.
Plik /etc/procmailrc nie może zmienić ustawienia zmiennej PATH widzianej później przez pliki rc
użytkowników — wartość tej zmiennej jest przywracana, gdy procmail kończy przetwarzanie pliku
/etc/procmailrc. W przyszłości należy się spodziewać ulepszenia tego zachowania, jednakże obecnie jedynym
rozwiązaniem jest przekompilowanie procmaila z żądaną wartością tej zmiennej.
Zmienne środowiskowe, ustawiane wewnątrz interpretowanej przez powłokę części akcji reguły "|", nie
zachowają swoich wartości po zakończeniu reguły, gdyż są ustawiane w podpowłoce procmaila. Aby upewnić
się, że wartość zostanie zachowana, należy dokonać przypisania przed początkowym znakiem "|" reguły, tak
że może przechwycić stdout programu.
Jeśli w regule dostarczającej podana zostanie tylko flaga "h" lub "b" i reguła ta zostanie dopasowana, to
jeżeli nie użyto flagi "c", ciało listu lub (odpowiednio) jego nagłówek zostaną utracone.
ZOBACZ TAKŻE
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)
BŁĘDY
Jedyne podstawienia zmiennych środowiskowych, które mogą być obsługiwane przez samego procmaila są typu
$nazwa, ${nazwa}, ${nazwa:-tekst}, ${nazwa:+tekst}, ${nazwa-tekst}, ${nazwa+tekst}, $\nazwa, $#, $n, $$,
$?, $_, $- i $=; gdzie $\nazwa zostanie zastąpione przez nazwa z zacytowanymi wszystkimi znakami mającymi
specjalne znaczenie w wyrażeniach regularnych; $_ będzie zastąpione nazwą bieżącego pliku rc, $- przez
$LASTFOLDER, a $= będzie zawierać punktację (score) ostatniej reguły. Co więcej znaki spacji nigdy nie
będą rozdzielać wyniku podstawiania $\nazwa. Gdy użyte są opcje -a lub -m to "$@" (cudzysłowy są
wymagane) rozwinie się do podanych argumentów. Jednakże "$@" będzie rozwijany tylko wtedy, gdy jest
używany na liście argumentów programu, i tylko jedno wystąpienie tej zmiennej będzie rozwijane.
Niecytowanie ekspansje zmiennych przeprowadzane przez procmail są zawsze dzielone na spacjach,
tabulatorach i znakach nowej linii; zmienna IFS nie jest wewnętrznie używana.
Procmail nie wspiera rozwijania "~".
Bufor linii o długości $LINEBUF jest używany podczas przetwarzania pliku rc; wszystkie ekspansje, które
nie mieszczą się w tym limicie długości są obcinane i ustawiana jest zmienna PROCMAIL_OVERFLOW. Jeśli
zbyt długa linia jest linią warunku lub akcji, to reguła zawierająca taki warunek lub akcję jest uznawana
za zakończoną niepowodzeniem, a procmail kontynuować będzie przetwarzanie kolejnych reguł. Jeśli linia
taka występuje w przypisaniu zmiennej lub linii rozpoczynającej, to procmail przerwie przetwarzanie pliku
rc.
Jeśli globalny plik blokujący ma ścieżkę relatywną, a bieżący katalog nie jest taki sam, jak wtedy, gdy
globalny plik blokujący został utworzony, to ten globalny plik blokujący nie zostanie usunięty, jeśli
procmail zakończy w tym momencie działanie (tak więc: należy używać ścieżek absolutnych dla globalnych
plików blokujących).
Jeśli plik rc ma ścieżkę względną, to kiedy ten plik jest otwierany po raz pierwszy, to MAILDIR zawiera
ścieżkę względną. Jeśli w którymś momencie procmail zostanie poinstruowany, żeby się sklonował, a bieżący
katalog roboczy się zmienił od czasu otwarcia pliku rc, to procmail nie będzie w stanie się sklonować
(lekarstwo: używanie ścieżek bezwzględnych do odwołań do plików rc lub upewnienie się, że MAILDIR zawiera
ścieżkę bezwzględną przed otwarciem pliku rc).
Lokalny plik blokujący reguły, który zaznacza początek zagnieżdżonego bloku, nie działa tak, jak by się
tego oczekiwało.
Gdy przechwytuje się standardowe wejście z reguły do zmiennej środowiskowej, to zostanie obcięty
dokładnie jeden, kończący znak nowej linii.
Niektóre nieoptymalne i nieoczywiste wyrażenia regularne ustawiają niepoprawną wartość zmiennej MATCH.
Takie wyrażenie regularne można poprawić, usuwając jeden lub więcej niepotrzebnych operatorów "*", "+"
lub "?" znajdujących się po lewej stronie tokena \/.
RÓŻNE
Jeśli wyrażenie regularne zawiera "^TO_", to zostanie zastąpione przez "(^((Original-)?(Resent-)?(To|Cc
|Bcc)|(X-Envelope|Apparently(-Resent)?)-To):(.*[^-a-zA-Z0-9_.])?)", co powinno złapać wszystkie
specyfikacje celu zawierające określony adres.
Jeśli wyrażenie regularne zawiera "^TO", to zostanie zastąpione przez "(^((Original-)?(Resent-)?(To|Cc
|Bcc)|(X-Envelope|Apparently(-Resent)?)-To):(.*[^a-zA-Z])?)", co powinno złapać wszystkie specyfikacje
celu zawierające określone słowo.
Jeśli wyrażenie regularne zawiera "^FROM_DAEMON", to zostanie zastąpione przez "(^(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'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 powinno złapać maile pochodzące od większości demonów (jak się
podoba to wyrażenie regularne? :-)
Jeśli wyrażenie regularne zawiera "^FROM_MAILER", to zostanie zastąpione przez "(^(((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 ][^<)]*(\(.*\).*)?)?$([^>]|$))" (uproszczona wersja
"^FROM_DAEMON"), co powinno złapać maile pochodzące od większości demonów pocztowych.
Podczas przypisywania wartości logicznych zmiennym takim jak VERBOSE, DELIVERED czy COMSAT, procmail
przyjmuje jako prawdziwy napis zaczynający się od: cyfry różnej od zera, "on", "y", "t" lub "e". Fałsz
jest każdym napisem zaczynającym się od: cyfry zero, "off", "n", "f" lub "d".
Jeśli linia akcji reguły określa program, to pojedyncza para znaków odwrotny-ukośnik+nowa-linia w niej
występująca zostanie przekształcona w nową linię, pod warunkiem, że linia nie zawiera innych żadnych
znaków.
Silnik wyrażeń regularnych wbudowany w procmaila nie obsługuje nazwanych klas znaków (np. [:alnum:]).
UWAGI
Ponieważ niecytowane początkowe białe spacje są ogólnie ignorowane w plikach rc, można zastosować takie
wcięcia linii, jakie nam odpowiadają.
Początkowy znak "|" w linii akcji wskazującej program lub filtr, jest obcinane przed sprawdzeniem
$SHELLMETAS.
Pliki włączane dyrektywą INCLUDERC zawierające tylko przypisania wartości zmiennym środowiskowym mogą być
dzielone z sh(1).
Nie ma żadnych gwarancji, że bieżące zachowanie przypisań zmiennych INCLUDERC i SWITCHRC w linii poleceń
nie zostanie zmienione. Zostało już raz zmienione w przeszłości i może być zmienione ponownie lub nawet
usunięte w przyszłych wersjach.
W celu naprawdę skomplikowanego przetwarzania można nawet rozważyć rekurencyjne wywoływanie procmaila.
W bardzo starych wersjach procmaila zamiast ":0" rozpoczynającego regułę trzeba było używać ":n", gdzie n
oznaczało liczbę warunków w regule.
AUTORZY
Stephen R. van den Berg
<srb@cuci.nl>
Philip A. Guenther
<guenther@sendmail.com>
TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika man są: Przemek Borys (PTM)
<pborys@dione.ids.pl>, Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>.
Polskie tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów na stronie
http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją 3.22 oryginału.
BuGless 2001/08/04 PROCMAILRC(5)