腳本在 bash_profile 中表現奇怪(但就在 X 下)

腳本在 bash_profile 中表現奇怪(但就在 X 下)

我製作了一個簡單的 .sh 腳本,它每分鐘檢查特定文件是否為空,如果不為空,則使筆記型電腦上的 LED 以 0.5Hz 的頻率閃爍。我從我的.bash_profile.

每當我在 TTY 中時,它都會完美地工作(也就是說:當文件不為空時,我筆記本上的 LED 會以精確的頻率閃爍)。

但是當我運行 X 時(我使用 Xmonad/urxvt,startx如果可以幫助的話透過呼叫)會發生一些奇怪的事情。閃爍的頻率不穩定,它會減慢機器的速度(有點),當我打電話時,top我會看到各種 sudo 進程(我調用的用於打開或關閉 LED 的進程)。

這與我呼叫腳本三四次的行為相同。

我不知道如何診斷問題。手冊說.bash_profile只讀一次(在登入時)。你能幫我嗎?

# 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 作為登入 shell 啟動時執行,而不是像您所寫的那樣「在登入時」執行。這意味著每次 Bash 以"--login"option 或 as啟動時"-bash",它都會被讀取並執行.bash_profile。啟動 X 會話很可能會隱式啟動多個 Bash 實例(因為它是 Linux 上的預設 shell)。其中一些實例可能恰好是登入 shell,您的腳本被調用多次,這使您的 LED 進入迪斯可模式。

問題的解決方案是將腳本移出.bash_profile,並cron為其建立作業,或使用重寫它inotify 工具

相關內容