最简单的和惯用的方式有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的选项;默认情况下,它只会继承环境的清理副本),或者在其命令行以及配方文件中。