linux Udev:在比较中使用结果

lnvxswe2  于 2023-05-16  发布在  Linux
关注(0)|答案(2)|浏览(161)

有谁能给予我一个提示,为什么这是有效的?

ACTION=="add", SUBSYSTEM=="block", PROGRAM="/bin/echo -n 12345", ENV{ID_FS_UUID}=="12345", RUN+="/path/to/some/script.sh %k %c $env{ID_FS_UUID}"

这个就不是吗

ACTION=="add", SUBSYSTEM=="block", PROGRAM="/bin/echo -n 12345", ENV{ID_FS_UUID}=="%c", RUN+="/path/to/some/script.sh %k %c $env{ID_FS_UUID}"
qc6wkl3g

qc6wkl3g1#

您必须检查是否提供了一个$result来替换您指定的%c。Fromman udev

$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 "+" character, this part plus all
    remaining parts of the result string are substituted: "%c{N+}".

如果您没有提供正确的$result,那么这就是您的问题。

yftpprvb

yftpprvb2#

这是一个老问题,但我遇到了一个类似的问题,只是反过来。问题可能是您在RUN中看到的内容与比较期间发生的内容不匹配。而它的原因是这个美丽的宝石(从曼udev):
NAME、SYMLINK、PROGRAM、OWNER、GROUP、MODE和RUN字段支持简单的类似printf的字符串替换。RUN格式的字符会在所有规则都处理完后应用,也就是在程序执行之前。它允许使用由早期匹配规则设置的设备属性。对于所有其他字段,在处理单个规则时应用替换。
另一个规则可能在稍后更改了您的%c,而在您的比较过程中,它持有另一个值。我不认为比较是在程序之前完成的。
我建议在这种情况下使用udevadm test

相关问题