最簡單的和慣用的方式有procmail的一個critical section是使用鎖文件。
# Notice the second colon and the name of the lock file to use
:0:firefox.lock
* ^Subject: .*Email Subject!
| export DISPLAY=:0.0;
xrandr --size 1360x768;\
firefox "link"; \
timeout 10s recordmydesktop --fps 30; \
xrandr --size 1366x768
當計算配方時會創建$MAILDIR/firefox.lock
,並在配方完成時將其刪除。如果文件已經存在,Procmail會一直等到它消失或最終超時(這可能導致傳入的消息反彈)。
如果您需要跨越多個配方的關鍵部分,您可以分配到「神奇」變量LOCKFILE
,並在完成後將其設置爲空值。
LOCKFILE=firefox.lock
# ... Your recipes here ...
LOCKFILE=
(隱晦,等號在這個例子中的最後一行標誌是可選的。但我建議針對使用)
爲見man 5 procmailrc
(多)以上,其中LOCKSLEEP
和LOCKTIMEOUT
。
如果'在Procmail中'是如何使用一個條件的「如何說'的微不足道的答案。你已經有一個;如果該消息的標題匹配正則表達式^Subject:.*Email Subject!
,該動作將僅觸發。你可以嵌套這些條件,測試變量,外部命令等。這裏有一個愚蠢的例子來演示它們。
# If $FOO is set and non-empty
:0
* FOO ?? .
{
# ... then enter this nested block
# Does $HOME/bar exist?
:0
* ? test -e $HOME/bar
barista
# Otherwise, unconditionally deliver to foolish
:0
foolish
}
如果設置了變量FOO
,則輸入該塊。 Procmail使用你的環境變量,所以你可以在調用Procmail之前設置它(取決於Procmail的選項;默認情況下,它只會繼承環境的清理副本),或者在其命令行以及配方文件中。