USB デバイスの挿入後に bash スクリプトを実行する udev ルールを作成しました
SUBSYSTEMS=="usb", ATTRS{serial}=="00000000", SYMLINK+="Kingston", RUN+="/bin/flashled.sh"
ただし、スクリプトは 1 回だけではなく数回実行されます。ハードウェアの検出方法に問題があると思いますか? スクリプトと fi に sleep 10 を入れてみましたが、違いはありません。
これは解決策ではありませんが、回避策です:
1 つの (簡単な) 方法は、スクリプト "/bin/flashled.sh" を次のように開始することです。
#!/bin/bash
#this file is /bin/flashled.sh
#let's exit if another instance is already running
if [[ $(pgrep -c "$0" ) -gt 1 ]]; then exit ;fi
... ... ...
ただし、これは一部の境界ケースでは競合状態が発生しやすい可能性があります (bash は少し遅いため、これが常に機能することを確認する方法はありません) が、あなたのケースでは完全に機能する可能性があります。
もう 1 つの方法 (より確実ですが、より多くのコード) は、次のように "/bin/flashled.sh" を開始することです。
#!/bin/bash
#this file is /bin/flashled.sh
#write in your /etc/rc.local: /bin/flashled.sh & ; disown
#or let it start by init.
while :
do
kill -SIGSTOP $$ # halt and wait
... ... # your commands here
sleep $TIME # choose your own value here instead of $TIME
done
ブート中に (たとえば、/etc/rc.local によって) 開始して、継続するシグナルを待機するようにします...「継続」シグナルをいくつ取得しても問題ありません (それらはキューに入れられません)。 $TIME 以内である限り
それに応じて udev ルールを変更します。
SUBSYSTEMS=="usb", ATTRS{serial}=="00000000", SYMLINK+="Kingston", RUN+="/usr/bin/pkill -SIGCONT flashled.sh"