NAZWA
procmailrc - plik rc procmailaSKŁADNIA
$HOME/.procmailrcOPIS
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 [ flags] [ : [locallockfile] ] <zero or more conditions (one per line)> <exactly one action line>
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.
- !
- 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ą.
Domyślne wartości zmiennych środowiskowych
- LOGNAME, HOME and USER_SHELL
- Twoje (odbiorcy) wartości domyślne
- SHELL
- /bin/sh
- 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
- MAILDIR
- $HOME
- DEFAULT
- $ORGMAIL
- MSGPREFIX
- msg.
- SENDMAIL
- /usr/sbin/sendmail
- SENDMAILFLAGS
- -oi
- HOST
- Nazwa bieżącego komputera
- COMSAT
- no
- PROCMAIL_VERSION
- 3.24
- LOCKEXT
- .lock
Ś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:
- 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.
- 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.
- ^ 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. 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.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 |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 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 BergTŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Przemek Borys <[email protected]>, Robert Luberda <[email protected]> i Michał Kułach <[email protected]> Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI. Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej [email protected]BuGless |