exim,变量字符串扩展

exim,变量字符串扩展

如何从转发文件中获取本地域列表?

例如/etc/exim4/forwards

[email protected]: [email protected]
# ignore this line
[email protected]: [email protected]
[email protected]: [email protected]

这里是字符串扩展(或者不管它叫什么G) 应该返回test.com : hugo.com

readfile我认为它可以用和来完成map,但我无法让它工作。

答案1

我有件事几乎按照您想要的方式工作。此扩展的作用是:

  1. 在文件中查找,使用;作为分隔符。
  2. 排除任何带有 # 的行(即注释)。
  3. 应该跳过空行,但我的正则表达式不匹配,它仍然包含那些空行,所以我只是将其删除并将或{{}{}} 块留在其中。
  4. 提取每行 : 之前的项目,并从中提取域。
  5. 将所有内容汇总到列表中。

我并不声称这正是您所需要的,但它展示了如何解析和 grep 列表。

CentOS58[root@ivwm41 exim]# more test_list.cf 
[email protected]: [email protected]
# ignore this line
[email protected]: [email protected]
[email protected]: [email protected]

CentOS58[root@ivwm41 exim]# exim -be '${reduce {<; ${readfile{/etc/exim/test_list.cf}{;}} } {} {${if  or{ {match{$item}{#}} {match{$item}{#}} } {$value} {$value:${sg {${extract{1}{:}{$item}}} {^.*@}{} }}}}}'
:test.com:test.com:hugo.com

如果你将扩展逻辑地分解成各个部分,它看起来是这样的:

exim -be '${reduce {<; ${readfile{/etc/exim/test_list.cf}{;}} } 
             {}
             {${if or{ {match{$item}{#}} {match{$item}{#}} } 
                 {$value}
                 {$value:${sg{${extract{1}{:}{$item}}} {^.*@} {}}}}
             }
           }
         '

仍需修复的一件事是前导冒号 : 不应该出现在那里。我不确定它为什么会出现在那里 :-/ 而且我真的没有时间进一步深入研究它。需要稍微调整一下逻辑以捕捉导致出现前导冒号的任何条件,然后结果应该是可以用作条件的域列表。

相关内容