Добавляя к другим ответам, вы также можете попробовать перенаправление ввода вместо cat
echo $(<my_file.txt)
или
echo `<my_file.txt`
$()
и `` выполнить то же самое, они запускаются команды внутри их области действия и передают вывод в оболочку, как если бы он был введен пользователем. Единственная разница между ними состоит в том, что $() может быть рекурсивным, а `` не может быть рекурсивным.
Это возможно, хотя для этого требуются некоторые довольно малоизвестные функции Procmail, и, конечно же, вам нужно понимать, чего вы добиваетесь.
:0
* ^From:[ ]*\/[^ ].*
* $ ^To:[ ]*$\MATCH
{ ... actions ... }
Оператор захвата \ /
собирает соответствующую строку в специальную переменную MATCH
. На следующей строке мы ищем ту же строку в заголовке To:
. Где $ MATCH
содержит захваченную строку, $ \ MATCH
содержит регулярное выражение, в котором любые специальные символы регулярного выражения в строке были экранированы, чтобы соответствовать буквально. В рецепте требуется модификатор $
, чтобы разрешить интерполяцию переменных Procmail в регулярное выражение.
Используется обычный [] *
(пробел или табуляция, ноль или более) для пропуска пробелов после двоеточия, затем захватывается все, начиная с первого непробельного символа.
На практике это означает, что заголовки From:
и To:
должны иметь идентичное содержимое. Если отправитель вводит другое «настоящее имя» (которое технически является просто комментарием), этот рецепт не будет соответствовать. Например,
From: Myself <me@example.net>
To: Everyone <me@example.net>
Здесь адрес электронной почты идентичен, но все поле отличается. Если вам нужно справиться с этим сценарием, возможно, измените регулярное выражение, чтобы оно соответствовало первым <
перед \ /
, но это, очевидно, будет зависеть от точных строк, которые вам нужно сопоставить; есть много возможных вариантов.