![Скрипт ведет себя странно в bash_profile (но только под X)](https://rvso.com/image/1366226/%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82%20%D0%B2%D0%B5%D0%B4%D0%B5%D1%82%20%D1%81%D0%B5%D0%B1%D1%8F%20%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%BD%D0%BE%20%D0%B2%20bash_profile%20(%D0%BD%D0%BE%20%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE%20%D0%BF%D0%BE%D0%B4%20X).png)
Я сделал простой скрипт .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-инструменты.