短篇小说:在我的 Linux 桌面上,我希望在/dev
创建或删除下的节点时收到通知(知道插入某些设备时创建了哪些节点非常有用)。我为此写了两个幼稚的脚本:
第一个通过以下方式将这些更改写入日志文件inotifywait
:
#!/bin/sh
inotifywait -m -e create,delete --timefmt '%Y.%m.%d-%H:%M:%S' --format '[%T] %e %w%f' /dev > /var/log/devdir_changes
生成的日志文件如下所示:
[2014.08.19-01:32:51] CREATE /dev/vcs63
[2014.08.19-01:32:51] CREATE /dev/vcsa63
监视该日志文件(使用 bashread
命令)并显示通知的第二个脚本:
#!/bin/sh
while true; do
# -----------------------------------------------------------------------------------
# Now, listen for new messages
echo "listening for new messages.."
tail -f -n 0 /var/log/devdir_changes | \
while read time type message; do
notify-send "$type" "$message"
done
echo "restarting in 5 seconds.."
sleep 5
echo "restarting.."
done
echo "exiting."
它可以工作,但正如预期的那样,每个创建/删除的节点都有专用的通知气球。当我插入单个 USB 设备时,通常有几个节点,有时真的很多。因此,当检测到新条目时,我会等待一段时间(例如 200-300 毫秒)以获得更多条目,并且只有在最后一次收到条目后超时后,才会使用 .cry 收集条目notify-send
。
我不是经验丰富的 bash 程序员(和 linux 用户),所以如果有人给我一些关于如何正确实现它的线索,我会很高兴。