我正在使用OpenSuse Leap上的Udev规则,并且在我的系统中插入一个USB设备后,我尝试运行一个简单而小的脚本。
但是,我在关键字"RUN+=“中添加的脚本没有运行。
这些步骤如下:
1)我根据udevadm给出的信息编写了"10_MY_RULES.rules“规则。
KERNEL=="sdf1", SUBSYSTEM=="block", SUBSYSTEMS=="usb", ATTRS{product}=="Flash Drive", ATTRS{manufacturer}=="Samsung",ATTRS{idProduct}=="1000", ATTRS{idVendor}=="090C", RUN="/home/user/bin/script.sh"我的剧本"script.sh“就是这样写的:
#!/bin/bash; mkdir /home/user/Desktop/CREATE_FOLDER_TEST2) OpenSuse Leap有几个分配udev规则的地方。
这些地点如下:
我将我的规则放在“/run / udev /rues.d”中,因为当我插入我的USB设备时,udev将在/run下创建一个访问文件。
3)运行以下命令:
4)一旦这样做,我也运行"udevadm监视器“,看看我的系统正在做什么,一旦一个外围设备插入,在这种情况下,我的USB。
5)当我的闪存被添加到系统时,我注意到没有执行任何操作,我的脚本没有运行。因此,我运行了以下命令,以在特定设备上触发我的规则
我注意到我的规则正在被阅读,正如你在我图片的最后一行中所看到的.

没有任何运气,我修改了我的规则,并修改了它。我添加了更多的内核、子系统、ATTRS等等
以上所有这些我都以根和用户的身份以两种模式运行。
发布于 2019-02-01 09:34:56
您是否尝试过手动执行script.sh?
我试过了
bash: ./script.sh: /bin/bash;: bad interpreter: No such file or directory不能在脚本的#!行中使用分号作为命令分隔符。这一行只用于指定脚本解释器和可能的选项,而不是其他选项。
实际上,您的规则似乎失败了,因为您的script.sh无法执行;您的udev规则可能很好。正如@eblock评论的那样,您应该使用最少的必要数量的检查:如果您的规则不起作用,您应该删除一些检查,而不是添加更多的检查。
还请注意,/run不是持久的,因为它位于tmpfs文件系统(=本质上是一个RAM磁盘)。你放进去的任何东西都会在下一次重新启动后消失。因此,/run/udev/rules.d应该只用于由其他规则或其他自动化产生的自动生成的规则。
/usr/lib/udev/rules.d适用于发行版的标准规则。系统管理员应该在必要时使用/etc/udev/rules.d来补充或重写标准规则。
https://unix.stackexchange.com/questions/461684
复制相似问题