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

时间:2012-12-04 09:03:29

标签: shell variables export environment-variables udev

在规则文件中,通过传递参数“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为null也可以工作。

将args传递给udev规则的相同之处是什么?

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

2 个答案:

答案 0 :(得分:6)

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

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

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

man udev引用关键字" RUN":

  

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

答案 1 :(得分:1)

只需设置并查询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
相关问题