Скрипт ведет себя странно в bash_profile (но только под X)

Скрипт ведет себя странно в bash_profile (но только под X)

Я сделал простой скрипт .sh, который каждую минуту проверяет, пуст ли определенный файл, и если он не пуст, заставляет светодиод на моем ноутбуке мигать с частотой 0,5 Гц. Я вызываю этот скрипт из своего .bash_profile.

Всякий раз, когда я нахожусь в режиме TTY, все работает безупречно (если говорить точнее: когда файл не пустой, светодиод на моем ноутбуке мигает именно с этой частотой).

Но когда я запускаю X (я использую Xmonad/urxvt, вызываемый через , startxесли это может помочь), происходит что-то странное. Частота мигания нестабильна, это замедляет (немного) машину, и когда я вызываю, topя вижу различные процессы sudo (тот, который я вызываю, чтобы включить или выключить светодиод).

Это то же самое поведение, как если бы я вызвал скрипт три или четыре раза.

Я не знаю, как диагностировать проблему. В руководстве написано, .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 запускается как оболочка входа в систему, а не "во время входа в систему", как вы написали. Это означает, что каждый раз, когда Bash запускается с "--login"опцией или как "-bash", он будет читать и выполнять .bash_profile. Скорее всего, запуск вашего сеанса X неявно запускает несколько экземпляров Bash (так как это оболочка по умолчанию в Linux). Некоторые из этих экземпляров, вероятно, являются оболочками входа в систему, ваш скрипт вызывается несколько раз, что заставляет ваш светодиод переходить в режим диско.

Решением вашей проблемы было бы переместить скрипт из .bash_profile, и либо создать cronдля него задание, либо переписать его с использованиемinotify-инструменты.

Связанный контент