![Skript verhält sich in bash_profile seltsam (aber knapp unter X)](https://rvso.com/image/1366226/Skript%20verh%C3%A4lt%20sich%20in%20bash_profile%20seltsam%20(aber%20knapp%20unter%20X).png)
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, startx
falls das helfen könnte), passiert etwas Seltsames. Die Frequenz des Blinkens ist unregelmäßig, es verlangsamt die Maschine (ein wenig) und wenn ich aufrufe, top
sehe 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_profile
dass 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_profile
wird 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_profile
und entweder einen cron
Job dafür zu erstellen oder es mit neu zu schreibeninotify-tools.