Script agindo de forma estranha em bash_profile (mas apenas abaixo de X)

2

Eu fiz um simples script .sh que verifica a cada minuto se um determinado arquivo está vazio ou não, e se não estiver vazio, faz um led no meu laptop piscar a 0.5Hz. Eu chamo este script do meu .bash_profile .

Sempre que estou em TTY, a coisa funciona sem falhas (para dizer: quando o arquivo não está vazio, o led no meu lappy pisca com essa frequência precisa).

Mas quando eu executo o X (eu uso o Xmonad / urxvt, invocado via startx se isso puder ajudar) algo estranho acontece. A frequência do piscar é errática, retarda (um pouco) a máquina e quando eu chamo top vejo vários processos sudo (aquele que eu chamo para ligar ou desligar o led).

É o mesmo comportamento de quando chamei o roteiro três ou quatro vezes.

Eu não sei diagnosticar o problema. O manual diz que .bash_profile é lido uma vez (no momento do login). Você pode me ajudar?

# 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
    
por Gerreffo 08.06.2013 / 16:42

1 resposta

1

.bash_profile é executado quando o Bash começa como um shell de login, não "no momento do login", como você escreveu. Isso significa que toda vez que o Bash iniciar com a opção "--login" ou como "-bash" , ele lerá e executará .bash_profile . Muito provavelmente, iniciar sua sessão X implicitamente inicia várias instâncias Bash (já que é um shell padrão no Linux). Algumas dessas instâncias provavelmente são cascas de login, seu script é chamado de várias vezes, o que faz com que o seu LED entre no modo disco.

A solução para o seu problema seria mover o script para fora do .bash_profile e criar um trabalho cron para ele ou reescrevê-lo usando inotify-tools .

    
por 27.09.2013 / 11:39