linux - 在 udev 脚本中将 ATTR{idVendor} 作为参数传递

标签 linux shell usb udev

我有一个脚本,只要连接供应商 1004 的 USB 设备就会运行该脚本。我正在使用的 udev 规则有效并且看起来像这样。

SUBSYSTEM=="usb", ATTR{idVendor}=="1004", RUN+="/var/www/beta/trigger.php"

现在我想让这个脚本在连接任何 USB 设备时运行,并将供应商 ID 作为参数传递。 (因此脚本可以决定是否必须运行它。)

到目前为止,添加一个可以在脚本中访问的参数是有效的:

SUBSYSTEM=="usb", RUN+="/var/www/beta/trigger.php myparam"

有人可以告诉我如何用 ATTR{idVendor} 的值替换“myparam”吗?我尝试了各种组合,但始终没有得到预期的结果...

非常感谢!

最佳答案

为了补充这个答案,udev 还允许您将参数传递给 RUNPROGRAM

来自 udev 手册页:

   The NAME, SYMLINK, PROGRAM, OWNER, GROUP, MODE and RUN fields support simple
   printf-like string substitutions. The RUN format chars gets applied after
   all rules have been processed, right before the program is executed. It
   allows the use of device properties set by earlier matching rules. For all
   other fields, substitutions are applied while the individual rule is being
   processed.

例如,您可以有这样的规则:

# Passes major, minor and serial number as parameters to script.
ACTION=="add", SUBSYSTEM=="usb", RUN+="/tmp/test.sh %M %m $attr{serial}"

可用的替换是:

    $kernel, %k
       The kernel name for this device.

   $number, %n
       The kernel number for this device. For example, ´sda3´ has kernel number
       of ´3´

   $devpath, %p
       The devpath of the device.

   $id, %b
       The name of the device matched while searching the devpath upwards for
       SUBSYSTEMS, KERNELS, DRIVERS and ATTRS.

   $driver
       The driver name of the device matched while searching the devpath
       upwards for SUBSYSTEMS, KERNELS, DRIVERS and ATTRS.

   $attr{file}, %s{file}
       The value of a sysfs attribute found at the device, where all keys of
       the rule have matched. If the matching device does not have such an
       attribute, follow the chain of parent devices and use the value of the
       first attribute that matches. If the attribute is a symlink, the last
       element of the symlink target is returned as the value.

   $env{key}, %E{key}
       A device property value.

   $major, %M
       The kernel major number for the device.

   $minor, %m
       The kernel minor number for the device.

   $result, %c
       The string returned by the external program requested with PROGRAM. A
       single part of the string, separated by a space character may be
       selected by specifying the part number as an attribute: %c{N}. If
       the number is followed by the ´+´ char this part plus all remaining
       parts of the result string are substituted: %c{N+}

   $parent, %P
       The node name of the parent device.

   $name
       The current name of the device node. If not changed by a rule, it
       is the name of the kernel device.

   $links
       The current list of symlinks, separated by a space character. The
       value is only set if an earlier rule assigned a value, or during a
       remove events.

   $root, %r
       The udev_root value.

   $sys, %S
       The sysfs mount point.

   $tempnode, %N
       The name of a created temporary device node to provide access to the
       device from a external program before the real node is created.

   %%
       The ´%´ character itself.

   $$
       The ´$´ character itself.

关于linux - 在 udev 脚本中将 ATTR{idVendor} 作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12818987/

相关文章:

database - 使用 Shell 脚本检查数据库连接

android - android 上的 USB 类

python - 如何监控USB设备插入?

linux - Linux inotify API 的效率如何?

linux - 如何将文本文件读取到参数

c - 当应用程序连接服务器与终端时如何将应用程序绑定(bind)到用户

Linux:如何强制 USB 设备使用相同的 ttyUSB 编号

python - 使用 Cron 运行 Python 脚本?

linux - 命令(wget)从存储库网站获取所有带有 rpm 扩展名的文件

linux - 停止在使用 sudo 运行的脚本中间成为 root