转:
victor@X301A1:~$ ls /etc/udev/rules.d/ 70-persistent-cd.rules 70-persistent-net.rules README
然后:
victor@X301A1:~$ sudo gedit /etc/udev/rules.d/01-my-first-udev.rules
我的规则:
ACTION=="add", RUN+="echo HELLO ! > /home/victor/udev_test_log.txt"
保存文件后:
sudo udevadm control --reload-rules
我预计连接USB设备会在文件中写入但没有任何反应。 我哪里错了?
在RUN中,您必须将路径放入脚本。 见man udev
:
将程序添加到要为特定设备执行的程序列表中。 这只能用于非常短的运行任务。 长时间运行事件过程可能会阻止此设备或从属设备的所有其他事件。 需要立即将长时间运行的任务与事件过程本身分离。
例如,创建一个新脚本,在/lib/udev
使用sudo -H gedit /lib/udev/hello.sh
说出hello.sh
并将下一行放入其中:
#!/bin/bash echo HELLO ! > /home//udev_test_log.txt
使用您的用户名更改 。 保存文件,关闭它并使其可执行:
chmod +x /lib/udev/hello.sh
在/etc/udev/rules.d/01-my-first-udev.rules
文件中添加一条新规则,如下所示:
ACTION=="add", RUN+="/lib/udev/hello.sh"
实际上,我无法得到这方面的参考; 但这是Try&Error得到的东西。
所以你可以写多function脚本(不只是盲/单任务脚本:)),确保它适用于我的例子:
KERNEL=="2-1.2:1.[0-9]*", DRIVER!="usb-storage", RUN+="/bin/sh -c 'echo -n %k,%p > /home/sneetsher/Desktop/%n.txt'"
/bin/sh
绝对路径>
重定向在shell内部处理-c '...'
2个命令参数%k
, %p
, %n
udev变量(设备内核名称,设备路径,设备编号)
所以对于你的情况:
ACTION=="add", RUN+="/bin/sh -c 'echo HELLO ! > /home/victor/udev_test_log.txt'"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)