Skript verhält sich in bash_profile seltsam (aber knapp unter X)

Skript verhält sich in bash_profile seltsam (aber knapp unter X)

Ich habe ein einfaches .sh-Skript erstellt, das jede Minute prüft, ob eine bestimmte Datei leer ist oder nicht. Wenn sie nicht leer ist, lässt es eine LED auf meinem Laptop mit 0,5 Hz blinken. Ich rufe dieses Skript von meinem aus auf .bash_profile.

Immer wenn ich im TTY-Modus bin, funktioniert das Ding einwandfrei (das heißt: wenn die Datei nicht leer ist, blinkt die LED auf meinem Laptop mit genau dieser Frequenz).

Aber wenn ich X ausführe (ich verwende Xmonad/urxvt, aufgerufen über, startxfalls das helfen könnte), passiert etwas Seltsames. Die Frequenz des Blinkens ist unregelmäßig, es verlangsamt die Maschine (ein wenig) und wenn ich aufrufe, topsehe ich verschiedene Sudo-Prozesse (den, den ich aufrufe, um die LED ein- oder auszuschalten).

Es ist das gleiche Verhalten, als ob ich das Skript drei oder viermal aufgerufen hätte.

Ich weiß nicht, wie ich das Problem diagnostizieren soll. Im Handbuch steht, .bash_profiledass es einmal gelesen wird (beim Login). Können Sie mir helfen?

# 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

Antwort1

.bash_profilewird ausgeführt, wenn Bash als Login-Shell gestartet wird, nicht „beim Login“, wie Sie geschrieben haben. Das bedeutet, dass jedes Mal, wenn Bash entweder mit "--login"Option oder als gestartet wird "-bash", gelesen und ausgeführt wird .bash_profile. Höchstwahrscheinlich werden beim Starten Ihrer X-Sitzung implizit mehrere Bash-Instanzen gestartet (da es sich um eine Standard-Shell unter Linux handelt). Einige dieser Instanzen sind wahrscheinlich Login-Shells, Ihr Skript wird mehrmals aufgerufen, wodurch Ihre LED in den Disco-Modus wechselt.

Die Lösung für Ihr Problem wäre, das Skript aus dem zu verschieben .bash_profileund entweder einen cronJob dafür zu erstellen oder es mit neu zu schreibeninotify-tools.

verwandte Informationen