Назад | Перейти на главную страницу

exim, расширение переменной строки

Как я могу получить список локальных доменов из файла пересылки?

Пример /etc/exim4/forwards:

a@test.com: a@lala.com
# ignore this line
b@test.com: a@example.com
b@hugo.com: hugo@example.com

Здесь расширение строки (или как оно там называется грамм) должен вернуться test.com : hugo.com.

Я полагаю, это можно сделать с readfile и map, но я не могу заставить его работать.

У меня есть кое-что такое почти работает так, как вы этого хотите. Это расширение делает следующее:

  1. Зачерпните файл, используя; как разделитель.
  2. Исключите любые строки с # в них (например, комментарии).
  3. Это должен пропустить пустые строки, но мое регулярное выражение не соответствует, оно все еще включает эти пустые строки, поэтому я просто удалил его и оставил там блок or {{} {}}.
  4. Извлеките элемент перед: в каждой строке и извлеките из него домен.
  5. Перемешайте все это в список.

Я не утверждаю, что это именно то, что вам нужно, но это показывает, как списки можно анализировать и использовать grep.

CentOS58[root@ivwm41 exim]# more test_list.cf 
a@test.com: a@lala.com
# ignore this line
b@test.com: a@example.com
b@hugo.com: hugo@example.com

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}}} {^.*@} {}}}}
             }
           }
         '

Одна вещь, которую еще нужно исправить, - это ведущее: не должно быть. Я не уверен на 100%, почему он там: - / и у меня действительно нет времени углубляться в это. Логику нужно немного помассировать, чтобы уловить какое-либо условие, вызывающее появление этого ведущего двоеточия, а затем результатом должен быть список доменов, который вы можете использовать в качестве условия.