Существует ли простой способ связи между двумя разными правилами, одно для события ADD, другое для события BIND на том же устройстве?
Сначала выполняется правило ADD, затем следует правило BIND,Я хотел бы изменить поведение моего правила BIND, основываясь на переменной, установленной правилом ADD.
Что я пробовал до сих пор:
Я попытался использовать ENV{variable}="1"
в правиле ADD и сопоставить его с правилом BIND, используя ENV{variable}=="1"
.К сожалению, эта переменная больше не доступна в правиле BIND, похоже, что время жизни этих переменных ENV ограничено только этими правилами на одном устройстве и одним и тем же действием (следовательно, только правилами ADD).
ACTION=="add", ENV{MODALIAS}=="abc", \
ENV{variable}="1"
ACTION=="bind", ENV{MODALIAS}=="abc", \
ENV{variable}=="1"
ACTION=="bind", ENV{MODALIAS}=="abc", \
ENV{variable}=="2"
Я всегда думал, что переменные ENV доступны везде в udev, но это, кажется, неправильно ...
Я также пытался установить ATTR{foo}="bar"
в правиле ADD и сопоставить его вправило BIND, использующее ATTRS{foo}=="bar"
.Также не работает.
ACTION=="add", ENV{MODALIAS}=="abc", \
ATTR{variable}="1"
ACTION=="bind", ENV{MODALIAS}=="abc", \
ATTRS{variable}=="1"
ACTION=="bind", ENV{MODALIAS}=="abc", \
ATTRS{variable}=="2"
Понятия не имею, почему это не работает.
Единственный способдо сих пор работает echo
значение переменной в файле в правиле ADD (с использованием RUN
) и чтение его в правиле BIND с использованием PROGRAM
и RESULT
.
ACTION=="add", ENV{MODALIAS}=="abc", \
RUN+="/bin/bash -c 'echo \"1\" > /etc/udev/rules.d/variable'"
ACTION=="bind", ENV{MODALIAS}=="abc", \
PROGRAM="/bin/bash -c 'cat /etc/udev/rules.d/variable'", \
RESULT=="1"
ACTION=="bind", ENV{MODALIAS}=="abc", \
PROGRAM="/bin/bash -c 'cat /etc/udev/rules.d/variable'", \
RESULT=="2"
Есть еще идеи?
Это копия https://superuser.com/questions/1424242/udev-communicate-between-two-rules - к сожалению, я думаю, что суперпользователь был неподходящим местом для запроса.