Ansatzの備忘録

勉強したことあるいはふと思い立ったこと

シェルワンライナー160本ノック問題117

問題117 USBの抜き差しの監視

1秒単位でUSBの抜き差しの有無を監視する問題だった。1秒おきといっているのでsleepコマンドをwhileループに入れてうまくやるのだろうなとは思ったがどこのディレクトリを見ればよいのかわからず降参した。答えを見るとwsl2の環境では存在しないディレクトリだった。

解答例は

f(){ ls /sys/bus/usb/drivers/usb | wc -l ;}
n=$(f) ; while sleep 1 ; do m=$(f) ; [ $n -gt $m ] && echo 抜かれました ; [ $n -lt $m ] && echo 挿されました ; n=$m ; done

と二段構えになっている。最初に関数を定義する。中身はusbの情報があるディレクトリのファイル数を出力するものになっている。この関数を用いてあとはsleepとテストコマンドで条件分岐をして監視を行う。ディレクトリに関する知識をどこかで体系的に学ばないといけなくなってきた気がする。