bash_profile でスクリプトが異常に動作する (ただし X のみ)

bash_profile でスクリプトが異常に動作する (ただし X のみ)

特定のファイルが空かどうかを毎分チェックし、空でない場合はラップトップの 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_profilecronジョブを作成するか、スクリプトを次のように書き換えます。inotify ツール

関連情報