脚本在 bash_profile 中表现异常(但仅在 X 下)

脚本在 bash_profile 中表现异常(但仅在 X 下)

我编写了一个简单的 .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 工具

相关内容