从udev规则文件向shell脚本传递参数

8
在规则文件中,通过传递“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脚本中,我们可以使用双引号传递参数,即使参数为空也可以正常工作。

如何在传递参数给udev规则时实现相同的效果?

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

2个回答

13

你应该可以使用单引号代替你提到的双引号:

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

注意:我没有测试过这个。也许在单引号内进行变量替换会失败...

man udev中引用关键字“RUN”:

程序名称及其后面的参数由空格分隔。可以使用单引号来指定带有空格的参数。


3

只需设置和查询udev的环境变量,这里是一个示例,用于检查系统是否在运行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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接