我正在尝试设置一个简单的脚本,让它在 USB 存储设备插入计算机时运行。为了完成这项任务,我有一个100-usb.rules
文件,里面/etc/udev/rules.d
有一个非常通用的规则:
ACTION=="add", RUN+="/usr/local/auto-update.sh"
我希望无论何时我将任何东西插入计算机,该脚本都会触发。规则如此通用的原因是,无论我尝试哪种规则,脚本都不会运行。
现在/user/local/auto-update.sh
脚本有一个非常简单的命令:
#!/bin/bash
mkdir /tmp/testfolder
我已确保授予脚本执行权限
sudo chmod +x /usr/local/auto-update.sh
运行命令后ls -l /usr/local/auto-update.sh
我获得了权限
-rwxr-xr-x
奇怪的是,如果我将规则改为类似这样
ACTION=="add", RUN+="/bin/mkdir /tmp/folder1"
然后它实际上将继续创建该文件夹。
我真的迷失了...我不知道为什么它不起作用!
答案1
问题是在运行脚本时udev
没有在其导出的环境中提供。PATH
PATH=/bin:/usr/bin:/usr/local/bin
在 bash 脚本的开头添加一个或其他内容。
例如,当我的一个脚本在插入 USB 密钥时被调用时,我转储了环境内容并得到:
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-3/1-3:1.0/host4
DEVTYPE=scsi_host
ID_BUS=usb
ID_MODEL=Transcend
ID_MODEL_ENC=Transcend
ID_MODEL_ID=4000
ID_REVISION=0035
ID_SERIAL=TS-RDF5_Transcend_000000000036
ID_SERIAL_SHORT=000000000036
ID_TYPE=scsi
ID_USB_DRIVER=usb-storage
ID_USB_INTERFACES=:080650:
ID_USB_INTERFACE_NUM=00
ID_VENDOR=TS-RDF5
ID_VENDOR_ENC=TS-RDF5\x20
ID_VENDOR_ID=8564
SEQNUM=2023
SUBSYSTEM=scsi
USEC_INITIALIZED=65380632
即没有PATH。