因此,我目前正在尝试在udev
连接特定 USB wifi 网卡后执行某些操作(启动 airmon-ng)。但我无法让内联脚本正常工作。可以使用以下简单示例重现此问题:
创建以下可执行脚本/test.sh
:
#!/bin/sh
echo hello > /tmp/test.txt
创建以下文件/etc/udev/rules.d/85-auto-monitor.rules
:
# This works:
ACTION=="move", KERNEL=="wlx8416f91a5ed3", RUN+="/test.sh"
# This does not work:
# ACTION=="move", KERNEL=="wlx8416f91a5ed3", RUN+="sh -c 'echo hello > /tmp/test.txt'"
使用以下命令重新加载文件.rules
:
sudo udevadm control --reload
我就是不明白为什么外部脚本可以工作,而内联脚本却不行。如果我在终端中运行内联脚本,它就可以工作。
答案1
跑步{类型}
将程序添加到处理特定事件的所有规则后要执行的程序列表中,具体取决于“类型”:
“程序”
执行指定为分配值的外部程序。如果没有给出绝对路径,则程序应该位于 /usr/lib/udev 中;否则,必须指定绝对路径。
如果没有指定类型,则这是默认值。
“内置”
作为程序,但使用内置程序之一而不是外部程序。
因此,在您的示例中,您必须使用绝对路径,sh
如 Alex P。提及:
RUN+="/bin/sh -c 'echo hello > /tmp/test.txt'"