udev 不会将 bash 脚本作为 RUN 参数运行

udev 不会将 bash 脚本作为 RUN 参数运行

我正在尝试设置一个简单的脚本,让它在 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。

相关内容