НАЗВАНИЕ
plumbing - правила маршрутизации сигналов протоколом plumber
ОПИСАНИЕ
Правила указывают протоколу plumber(8) маршруты, по которым нужно направить сигналы, сгенерированные приложениями с помощью сигнального модуля plumbmsg(2). Конфигурационный файл представляет из себя группы правил, разделенных пустыми строками. Каждое правило в отдельности - это набор шаблонов, содержащих инструкции, и команд plumb(1). Правила интерпретируются протоколом в порядке соответствия: применяется первое правило, шаблонам которогоудовлетворяют параметры полученного сигнала, сгенерированного каким-либо из запущенныхприложений, остальные правила даже не будут рассматриваться. Поэтому, если у вас в конфигурационном файле имеются лишние шаблоны их можно закомментировать знаком `#` в начале строки (каждой строке - один `#`). Поле аргументов внутри шаблона, содержащее целое выражение, заключается в ковычки-апострофы, например: '[a-zA-Z0-9]+\.m' (для данных, вида: fileFiLe11.m).
Все шаблоны имеют общую форму:
- field verb arg
Каждое поле данных field соответствует такому же field во входящем сигнале (приложения генерят их с помощью plumbmsg(2), ведь протокол со всеми его модулями постоянно активен) и содержит набор специфических данных:
- src - имя файла (исходника) приложения, сгенерировавшего сигнал
- dst - порт назначения для построения маршрута
- dir - рабочий каталог приложения
- kind - формат передаваемых данных (например: text или image)
- attr - последовательность пар атрибутов `name=value` (см. plumb(1))
- data - поле данных (массив байтов)
Типы инструкций verb:
- is - сравнить целиком со строкой, указанной в arg (построчно) //Exact string comparison with arg
- matches - обычное сравнение с arg (побуквенное) //Regular expression comparison with arg
- isdir - arg должен быть именем существующего каталога
- isfile - arg должен быть именем существующего файла
- set - присвоить field значение arg. Шаблон, содержащий такую инструкцию, обязательно разместите в конце правила, после других шаблонов (но перед plumb).
Параметр arg может ссылаться на одну из следующих переменных:
- `$0 to $9` - Substrings resulting from the most recent regular expression match:`$0` - is the entire substring; `$1` - the first parenthesised substring, etc.
- $file - последнее имя файла, которым оперировала инструкция isfile во время обработки правилом входящего сигнала
- $dir - последнее имя каталога, которым оперировала инструкция isdir во время обработки правилом входящего сигнала
С полученными сигналами и их содержимым допускаются следующие действия:
plumb to port
Команда перенаправить сигнал в указанный порт (который по идее должен прослушиваться программой, которой и адресован сигнал).
plumb start command arg ...
Если указанный выше порт не прослушивается ни одной из программ, то исполнить командуcommand с параметрамиarg. При этом можно использовать значения переменных, начинающихся со знака`$`, которые были получены при проверке шаблонов правила на соответствие сигналу, и таким образом воспользоваться содержащейся в сигнале специфической информацией, подставив ее в командную строку в виде параметров. Естесственно, в командной строке переменные заменяются своими значениями.
plumb alwaysstart application
Инструкция alwaystart указывает протоколу на необходимость запуска только этого приложения для данных, удовлетворяющих правилу. //если не так, поправьте.
В завершение, рассмотрим пример: нижеприведенное правило отсылает имена модульных файлов (и находящихся в каталоге /module) - файлов с расширением `.m` - редактору файлов wm-brutus(1), запуская его, если он еще не был запущен:
kind is text data matches '([a-zA-Z0-9]+\.m)(:[0-9]+)?' data isfile /module/$1 data set /module/$0 plumb to edit plumb start /dis/wm/brutus.dis $file$2
Использование $2, как аргумента команды start, позволяет передать редактору файлов brutus еще и номер строки в открываемом файле. Note plumbing
ФАЙЛ
/usr/user/lib/plumbing
Смотри также