我编写了一个简单的 .sh 脚本,它每分钟检查一个特定文件是否为空,如果不为空,则使我的笔记本电脑上的 LED 以 0.5Hz 的频率闪烁。我从我的 中调用此脚本.bash_profile
。
每当我处于 TTY 状态时,这个东西都运行正常(也就是说:当文件不为空时,我笔记本电脑上的 LED 会以精确的频率闪烁)。
但是当我运行 X(我使用 Xmonad/urxvt,通过调用,startx
如果这有帮助)时,发生了一些奇怪的事情。闪烁的频率不稳定,它使机器速度(稍微)变慢,当我调用时,top
我看到各种 sudo 进程(我调用来打开或关闭 led)。
这与我调用脚本三、四次的行为相同。
我不知道如何诊断问题。手册上说.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 作为登录 shell 启动时执行,而不是像您写的那样“在登录时”执行。这意味着每次 Bash 以"--login"
option 或 as启动时"-bash"
,它都会读取并执行.bash_profile
。启动 X 会话最有可能隐式启动多个 Bash 实例(因为它是 Linux 上的默认 shell)。其中一些实例可能恰好是登录 shell,您的脚本被调用多次,这会使您的 LED 进入迪斯科模式。
解决您的问题的方法是将脚本移出.bash_profile
,然后cron
为其创建一个作业,或者使用重写它inotify 工具。