带有数学表达式的 udev 规则

带有数学表达式的 udev 规则

我有一个 udev 规则,它使用如下表达式为串行设备(USB 串行端口)创建符号链接:SYMLINK+="MyDevice_%n"。%n 分配从 0 开始的系统设备节点号。有没有办法修改编号 - 而不是 %n,也许是 %n+1?数学表达式在 udev 规则中不起作用。我可能能够使用 bash 脚本来执行等效操作,echo $((%n+1))但我不确定如何在 udev 规则中执行此操作。有什么有用的建议吗?

答案1

使用 udev 规则 PROGRAM 字段执行 /bin/sh echo 表达式并使用 %c 捕获结果,如下所示...

PROGRAM="/bin/sh -c 'echo $((%n+1))'", SYMLINK+="MyDevice_%c"

如果 %n 为零,则生成的符号链接将具有MyDevice_$((%n+1))或的等效项。$(()) 构造称为“算术扩展”,它会导致内容被评估为整数表达式。它是 shell 的语法元素。MyDevice_1

答案2

由于您不想从 开始MyDevice_0,请使用++%n从 1 开始计数器(MyDevice_1

PROGRAM="/bin/sh -c 'echo $((++%n))'", SYMLINK+="MyDevice_%c"

相关内容