udevルールのACTIONにワイルドカードは使えない!?

  • URLをコピーしました!

Linuxではおなじみのudevルール。

USBが挿入された時にプログラムを実行、逆に抜去された時にプログラムを実行したい。なときにはudevルールを記述すればよいのですが、今回はそのudevルールがうまく動作しなかったので備忘録として原因と対策をまとめておく。

目次

udevルールのACTION

今回usbを挿入した場合にhoge.shの実行を、そして抜去した時には、作成された中間ファイルの削除を行いたかった。
そのため記述したudevルールのACTION部分は以下のようになる。

ACTION=="add",ENV{ID_BUS}=="usb",ENV{ID_FS_TYPE}=="vfat",RUN+="/home/pi/hoge.sh"
ACTION=="remove",ENV{ID_BUS}=="usb",ENV{ID_FS_TYPE}=="vfat",RUN+="/bin/rm hogefile*"

udevルールがうまく動作しない

上記の記述だと挿入した際のaddアクション(hoge.sh)は実行されるのだが、removeアクション(中間ファイルの削除)は実行されなかった。

ENVの指定がマズイのかと思い以下のコマンドを打ち、
その後にUSBを挿入してID_BUSID_FS_TYPEを確認。

$ udevadm monitor --property

ですが、指定した通りID_BUS=usbID_FS_TYPE=vfatで間違いなかった。
だったらRUNの部分を疑ってみる。

今回は中間ファイル一式を削除したいので/bin/rm以降にワイルドカードでファイル指定。hogefile*(hogefile~というファイルすべて削除)

ワイルドカードが怪しい??

となんとなくの勘でワイルドカードを使用せず1ファイル消去を実行するとサクッと動いた

解決方法

...ということでudevルールにワイルドカードを使うのがNGのようだ。

ワイルドカードを使って複雑なことがしたいというのならばshellに記述してudevルールからそのshellを呼び出してあげればいい。

また一つ勉強になった。

ばいちゃ。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次