udev,如何阻止进一步的规则运行?

udev,如何阻止进一步的规则运行?

是否可以(如果可以的话如何)告诉 udev 停止对某个设备执行进一步的规则?

我知道 udev 文件按字母顺序命名有一个规则的顺序/序列。因此,较早的*.rules可能想要阻止进一步的执行(即按照后来发生的规则的顺序)似乎是合乎逻辑的。

让我们假设我有一个通过 udev 的 USB 内存媒体,并且它的 RUN+ 脚本已经安装,我现在不喜欢系统中的任何其他规则尝试(并且可能失败)再次安装该设备!

为了方便回复,我还想举一个例子:让规则如下:

# 在文件 30.myusb.rules 中
ACTION==“添加”,SUBSYSTEM==“USB”,ATTRS{idVendor}==“1f75”,ATTRS{idProduct}==“0902”,RUN+=“/bin/mount.30.1f75.0902.sh”

现在我想要这个更远(因为 31 > 30)规则不会发生

# 在文件 31.myusb.rules 中
ACTION==“添加”,SUBSYSTEM==“USB”,ATTRS{idVendor}==“1f75”,ATTRS{idProduct}==“0902”,RUN+=“/bin/mount.31.1f75.0902.sh”

用于制造的“过滤器”乌德夫能够判断两条规则是否适用该规则,但我希望 31.myusb.rules 规则永远不会发生。

因此,我正在寻找一种30.myusb.rules以伪代码建议的方式进行调整的方法

# 在文件 30.myusb.rules 中
ACTION==“添加”,SUBSYSTEM==“USB”,ATTRS{idVendor}==“1f75”,ATTRS{idProduct}==“0902”,RUN+=“/bin/mount.30.1f75.0902.sh”
ACTION==“添加”,SUBSYSTEM==“USB”,ATTRS{idVendor}==“1f75”,ATTRS{idProduct}==“0902”,STOP_FURTHER_RULES_WITH_THIS_FILTER

答案1

您可以GOTO在规则中使用,以便在应用规则后立即跳至标签。如果标签位于规则的最末尾,则跳过所有后续规则。

所以在30.myusb.rules

ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="1f75", ATTRS{idProduct}=="0902", RUN+="/bin/mount.30.1f75.0902.sh", GOTO="myusb_end"

并在末尾31.myusb.rules

LABEL="myusb_end"

或者使用GOTO="very_end", 并放入LABEL="very_end"最后加载的文件 ( /etc/udev/rules.d/zzzzzzzz.rules)。

答案2

你必须使用:=代替+=

# in file 30.myusb.rules
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="1f75", ATTRS{idProduct}=="0902", RUN:="/bin/mount.30.1f75.0902.sh"

来自男人页,

   "="
       Assign a value to a key. Keys that represent a list are reset and
       only this single value is assigned.

   "+="
       Add the value to a key that holds a list of entries.

   ":="
       Assign a value to a key finally; disallow any later changes.

相关内容