短い話: 私の Linux デスクトップでは、ノード/dev
が作成または削除されるたびに通知が必要です (デバイスを接続したときにどのノードが作成されるかを知ることは非常に便利です)。そのための単純なスクリプトを 2 つ書きました。
最初のものは、次の方法でこれらの変更をログ ファイルに書き込みます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
コマンドで) 監視し、通知を表示する 2 番目のスクリプト:
#!/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 ミリ秒) 待機してエントリを追加し、最後にエントリを受信してからタイムアウトした後にのみ、収集されたエントリをnotify-send
.
私は経験豊富な bash プログラマー (および Linux ユーザー) ではないので、誰かがこれを正しく実装する方法について手がかりを教えてくれたらうれしいです。