有必要为 udev 守护程序编写一个规则,该规则将在闪存驱动器连接事件上运行脚本。
写了一个简单的规则(文件名10-alabel.rules,优先级最高):
KERNEL=="sd*", ENV{ID_FS_UUID}=="a004d31c-120d-4593-b051-6ef8951d52d0" RUN+="/lib/udev/create_virtual.sh %k"
create_virtual.sh 的内容:
#!/bin/bash
echo $1 >> /home/accumplus/1.txt
exit 0
移除闪存驱动器时会触发此规则。我需要补充。我添加动作参数:
ACTION=="add", KERNEL=="sd*", ENV{ID_FS_UUID}=="a004d31c-120d-4593-b051-6ef8951d52d0" RUN+="/lib/udev/create_virtual.sh %k"
之后,该规则原则上拒绝工作。我以为是因为 %k 参数的存在(设备很可能还没有被添加到 dev 目录,我已经提到了它的名字),但是删除这个参数并没有改变任何东西。
如何解决这个问题呢?
更新程序
如果不指定 UUID 环境变量,则会触发规则。我试图在添加闪存驱动器时运行的脚本中显示此环境变量的值:
echo $ID_FS_UUID >> /home/accumplus/1.txt
准确输出我在规则条件中指定的值:
a004d31c-120d-4593-b051-6ef8951d52d0
问题是重中之重。显然,设备没有时间获取 UUID,因此我的规则条件也不起作用。通过用更大的数字重命名规则文件,我达到了预期的结果。