7

在规则文件中,通过传递参数“LABEL”和“DEVNAME”来执行脚本以进行挂载

ACTION=="add", RUN+="/appmount/scripts/usb_mount.sh %E{ID_FS_LABEL} %E{DEVNAME}"

在 usb_mount.sh 文件中,将参数值打印为

echo "LABEL: $1 DEVNAME: $2" # this does not work reliably

一些设备的 LABEL 字段为空,因此 DEVNAME 打印为标签。在 bash 脚本中,我们可以在双引号中传递 args,即使 args 为空,它也会起作用。

将 args 传递给 udev 规则的等效项是什么?

解决此问题的方法可能是切换参数的顺序。有什么可靠的方法吗?

4

2 回答 2

13

您应该能够使用单引号而不是您提到的双引号:

ACTION=="add", RUN+="/appmount/scripts/usb_mount.sh '%E{ID_FS_LABEL}' '%E{DEVNAME}'"

当心:我没有测试这个。也许变量替换会在单引号内失败......

引用man udev关于“RUN”键的内容:

程序名和后面的参数用空格隔开。单引号可用于指定带空格的参数。

于 2013-02-20T14:39:25.947 回答
3

只需设置和查询 udev 的 env,这里是一个检查系统是否正在运行 VMWare 的示例:

cat /etc/udev/rules.d/99-vmware.rules
KERNEL=="id", SUBSYSTEM=="dmi", ATTR{sys_vendor}=="VMware, Inc.", ENV{VMWARE}='defined'

udevadm info -e  | grep 'VMWARE='
E: VMWARE=defined
于 2014-10-09T14:43:27.000 回答