El script actúa de manera extraña en bash_profile (pero justo debajo de X)

El script actúa de manera extraña en bash_profile (pero justo debajo de X)

He creado un script .sh simple que verifica cada minuto si un archivo en particular está vacío o no, y si no está vacío, hace que un LED de mi computadora portátil parpadee a 0,5 Hz. Llamo a este script desde mi .bash_profile.

Siempre que estoy en TTY, la cosa funciona perfectamente (para decir: cuando el archivo no está vacío, el LED de mi portátil parpadea con esa frecuencia precisa).

Pero cuando ejecuto X (uso Xmonad/urxvt, invocado a través de startxsi eso pudiera ayudar) sucede algo extraño. La frecuencia del parpadeo es errática, ralentiza (un poco) la máquina y cuando llamo topveo varios procesos sudo (el que llamo para encender o apagar el led).

Es el mismo comportamiento que si llamara al guión tres o cuatro veces.

No sé cómo diagnosticar el problema. El manual dice .bash_profileque se lee una vez (al momento de iniciar sesión). ¿Me puede ayudar?

# 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

Respuesta1

.bash_profilese ejecuta cuando Bash se inicia como un shell de inicio de sesión, no "en el momento de iniciar sesión" como escribió. Esto significa que cada vez que Bash comience con "--login"opción o como "-bash", leerá y ejecutará .bash_profile. Lo más probable es que al iniciar su sesión X se inicien implícitamente varias instancias de Bash (ya que es un shell predeterminado en Linux). Algunas de estas instancias probablemente sean shells de inicio de sesión, su script se llama varias veces, lo que hace que su LED entre en modo discoteca.

La solución a su problema sería sacar el script del archivo .bash_profiley crear un crontrabajo para él o reescribirlo usandoherramientas-inotify.

información relacionada