【发布时间】:2015-03-11 22:31:47
【问题描述】:
我在这方面遇到了很多麻烦。提前感谢您的帮助。
我正在尝试将 $kernel 或 %k 传递给 USB 录音机输入上的 bash 脚本。我有两个问题和一个挑战。
-
%k或$kernel都不会扩展为“sdd”或“sdc”等,而是得到一堆数字。 - udev 在连接时运行相同的脚本两次,所以我唯一能想到的是因为该脚本为主内核运行一次,例如sdd 并再次用于分区 sdd1。但这只是猜测。
我必须应对的挑战是,有许多这样的设备在物理上以大约几秒钟的间隔插入。他们都匹配。我使用 usbmount 在插入设备后自动挂载设备,但即使在 bash 脚本中使用“睡眠”也是如此。所以.. 我知道如果我将确切的设备内核传递给 bash 脚本,我可以自己安装它们。但是,由于 %k 没有扩展到 sdd 或其他什么......我无法在 bash 脚本中运行 mount 命令。以下是我提出的规则。我错过了什么吗?
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0271", RUN+="/home/user/recorder.sh %k"
如果我运行blkid,它会显示所有插入设备的列表及其内核路径,但是我无法区分哪个与正在运行的 udev 规则有关。
如果没有人知道可能是什么问题,我可以让某人在插入所有设备后手动运行一个脚本,运行命令blkid,然后解析该信息以开始单独安装它们,但我更愿意找出第一种方法。
另外,如果第二种方法是要走的路,有人可以在运行blkid 时帮助我解析以获得这些信息。仅供参考,第一个冒号之后的所有内容都可以按如下所示的不同顺序排列,所以如果你一直在考虑 %2 等于 LABEL="WS_400S" ......它不会。
示例:
/dev/sdd1: SEC_TYPE="msdos" LABEL="WS_400S" TYPE="vfat"
/dev/sde1: SEC_TYPE="msdos" TYPE="vfat" LABEL="WS_400S"
/dev/sdf1: LABEL="WS_400S" SEC_TYPE="msdos" TYPE="vfat"
只对与 LABEL 匹配且仅输出 /dev/sd 的任何内容感兴趣??变成一个变量。
【问题讨论】:
-
您正在采取什么行动来设置
%k或$kernel的值? (您正在运行什么程序,或???)。祝你好运。 -
我认为由于 udev 规则在设备输入上被激活,udev 知道设备是什么路径......因此
%k或 $kernel 会提供该信息。特别是因为如果我使用%n,它会正确扩展设备的正确内核编号。