Sendmail第七章 宏7. 宏 在sendmail.cf文件中有一个十分重要的组成部分,就是那些使用代表文本的符号。这与bsh和csh中的变量的使用极为类似:
以上几个语句都是定义了一个名为REMOTE的变量,被为其赋值为mailhost。 而要使用变量中存储的值,可以使用以下表达式:
也就是说,以上表达式将得到存储在变量REMOTE是值,在这个例子中就是文本字符mailhost。一经定义了REMOTE的值为mailhost,你就可以在任何地方使用以上表达式来代替文本字符mailhost。 7.1 概要 宏能极大地简化您的工作。它允许你在一个集中的地方定义一些文本符号。而你只需修改这里的文本字符,则改变将自己传播到文件中其它部分。例如,假设我们在sendmail.cf文件中定义了:
如果你在sendmail.cf文件的其它地方都使用${REMOTE},则只需简单修改定义D{REMOTE}mailhost中的字符串,就将使所有表达式${REMOTE}的值改变。 宏定义的语法格式如下:
必须使用字符D开始。这个字母D的后面紧跟着宏的名字(在这就是X),注意中间并没有空格隔开。接着在宏名的后面紧跟着值,注意在宏名与值之间也没有用空格隔开。这个值从宏名开始,直到本行结束。 宏名可以由一个字符组成,也可以由多个字符组成。如果你使用多个字符做为宏名,就必须使用“{ }”把它们括起来。如果是使用单个字符做宏名,则也应该使用“{ }”包括起来,而在V8.7之前也可以不使用“{ }”。
通常,当读取配置文件的时候就会自动展开宏。因此,你必须在使用宏之间定义它们:
在这里,ROLE首先被赋值为son,当处理到第一个S命令时,sendmail会将${ROLE}替换为前面定义的值:son,因此得到:
而后,配置文件又将ROLE的值修改为了为mother,所以在处理到第二个S命令时,sendmail会将${ROLE}替换为ROLE的值mother,因此得到:
不过请注意这是一个十分不好的风格,通常,为了不产生混乱,每个宏应该只被定义一次。 7.2 定义宏 在上一章里,我们粗略了解了分发代理hub和local本地分发代理的定义。我们可以看到,在这两个分发代理的定义中的最后一部分“A=”都使用到了宏。
宏有两种:一种是你自己定义的,而另一种则是sendmail定义的。你自己定义的宏,宏名一定要以大写字母开始;如果宏名是以小写字母开始的,如h、u,则是sendmail定义的宏。 你已经看到过一个以大写字母开始的宏:
在你的网络中,邮件中枢机器会使用了mailhost或类似的(如mailrelay)的别名,然而有时则不存在这样的别名。此时你必须使用它的实际机器名(如mail.us.edu)。现在,我们编辑client.cf,然后加入第一个宏{REMOTE}。
在此,我们在client.cf文件中新增了三行。第一行是一个注释语句,第三行则是一个空行,有来可视地分隔开宏定义部分与分发代理定义部分。第二行是新的宏定义。正如注释中说的,这个{ROMOTE}宏将包含邮件将转发到的机器名。 现在我们花一些时间来测试一下这个新的client.cf文件:
上一篇:Sendmail第六章:邮件中枢与分发代理 下一篇:Sendmail第八章:规则 更多相关文章
|
推荐文章
精彩文章
|