Передайте stdout по каналу для управления на stdout

Я вижу два очевидных решения.

Если вы используете procmail в качестве MDA на вашем сервере, или хотите преобразовать его в использование, то вы можете запустить любой произвольный скрипт на любом произвольном почтовом ящике с помощью действия рецепта procmail | (pipe). Надеюсь, он не будет запущен от имени root, но это должно быть легко сделать скрипт, который выполняет необходимую магию и который может быть вызван соответствующим пользователем без права passwordless от имени root. Вывод скрипта может быть даже передан обратно в ту же электронную почту и электронную почту позже доставлены, сделав рецепт действия фильтра.

Альтернативой (которая должна требовать меньшего практического обслуживания) является создание одного почтового ящика и настройка Postfix's $recipient_delimiter на то, что обычно не используется для этой цели; например, . или -. Обратите внимание, что параметр receive_delimeter является настройкой для всего сервера. Допустим, вы устанавливаете почтовый ящик dummy@example.com и устанавливаете $recipient_delimeter = . . Это позволит dummy.@example.com, который будет доставлять на локальный почтовый ящик, соответствующий dummy@example.com. Чтобы отключить один из них, добавьте dummy.@example.com в соответствующую таблицу получателей с действием отклонения. Недостатком является то, что это будет ловушка для префикса, так что вы захотите сделать префикс трудно наткнуться случайно или атаки по словарю. Недостатком является то, что в обычном случае (отправитель уважает ваши пожелания и не перепродает ваш почтовый адрес) такой подход требует нулевой поддержки, и вы всегда можете изменить префикс позже и явно перечислить те комбинации, для которых вы хотите продолжать получать почту.

0
12.12.2014, 01:45
1 ответ

, предполагая, что вы можете перезапустить программу и положить его в трубу, вы можете затем трусить его в xargs , С помощью следующих предупреждений:

  • Вы хотите запустить команду одну строку за раз (-N 1)
  • , вы хотите поместить вывод внутри параметра (-I)
  • , вы, вероятно, хотите, чтобы сообщение было запуска Как только это хвост , поэтому вам нужно хвост , чтобы быть , буферизацией линии .

В зависимости от того, что вы установили:

stdbuf -o 0 tail -f FILE | xargs -i -n 1 terminal-notifier --message "{}"

unbuffer    tail -f FILE | xargs " "

, и я видел версию Tailf , которая поддерживала опцию -L (выпученная).

Вы также можете подражать хвостовой форму в Perl.

И вы можете заменить xargs xargs (даже если это довольно стандартный и повсеместный) со специально разработанным для петли в оболочке (это не так просто, как просто, а не Это выглядит, хотя; это похоже на обработку имена файлов с пробелами в цикле).

Если вы не можете перезапустить программу, вам нужно перехватить его stdout. Вот Ответ на переполнение стека О этом. Описаны другие утилиты и сценарии, такие как riredirect здесь ; Я не знаю о своей совместимости с MacOS, хотя.

Дальнейшие модификации

Выход может быть проанализирован нормально с утилитами, такими как SED или CUT:

Нематериал Hail -f file | Grep Animal |. Sed -e 'S / животное (. *) Gear / \ 1 /' | Скаргс ...

Таким образом, мы бы имеем:

Output by tail                      output by grep        output by sed
correct horse battery staple
animal rhino gear                   animal rhino gear     rhino
llama is animal                     llama is animal       llama is animal
llama peruvian                      
animal ant gearbox                  animal ant gearbox    antbox

( - выпученные вариант GREP могут быть использованы)

1
28.01.2020, 02:51

Теги

Похожие вопросы