特定のファイルが空かどうかを毎分チェックし、空でない場合はラップトップの LED を 0.5Hz で点滅させる簡単な .sh スクリプトを作成しました。このスクリプトを から呼び出します.bash_profile
。
TTY を使用しているときはいつでも、問題なく動作します (つまり、ファイルが空でない場合は、ラップトップの LED が正確な頻度で点滅します)。
しかし、X を実行すると (Xmonad/urxvt を使用します。startx
これが役立つ場合は、を介して呼び出します)、奇妙なことが起こります。点滅の頻度が不規則になり、マシンが (少し) 遅くなり、呼び出すと、top
さまざまな sudo プロセス (LED をオンまたはオフにするために呼び出すプロセス) が表示されます。
スクリプトを 3 回または 4 回呼び出した場合と同じ動作です。
問題を診断する方法がわかりません。マニュアルには、.bash_profile
ログイン時に 1 回読み込まれると書かれています。助けてもらえますか?
# blink mail led
blinkTime="0.2"
checkTime="60"
while true; do
hasIt=$(cat ~/someFolder/hazText.txt) # 1: has text
if [ $hasIt -eq "1" ]
then
echo "1" | sudo tee /sys/class/leds/led:alarm/brightness > /dev/null
sleep $blinkTime
echo "0" | sudo tee /sys/class/leds/led:alarm/brightness > /dev/null
sleep $blinkTime
else
sleep $checkTime
fi
done
答え1
.bash_profile
は、あなたが書いた「ログイン時」ではなく、Bash がログイン シェルとして起動するときに実行されます。つまり、Bash が"--login"
オプション付きまたは として起動するたびに"-bash"
、 が読み込まれて実行されます.bash_profile
。おそらく、X セッションを開始すると、暗黙的に複数の Bash インスタンスが開始されます (Linux のデフォルト シェルであるため)。これらのインスタンスのいくつかはおそらくログイン シェルであり、スクリプトが複数回呼び出され、LED がディスコ モードになります。
問題を解決するには、スクリプトをから移動し.bash_profile
、cron
ジョブを作成するか、スクリプトを次のように書き換えます。inotify ツール。