我编写了一个在启动时运行的 bash 脚本,并为周一至周五设置闹钟。周六和周日不需要,所以我修改了脚本以节省那些日子的精力。脚本有效,有点。但是,它总是与第一个“if”语句一起使用。电脑每天在指定时间醒来,只在开机时不执行'== Friday'和'== Saturday'选项。如果我手动运行脚本,则会正确筛选“== Friday”和“== Saturday”选项。
关于为什么会发生这种情况的任何想法。我担心脚本的可靠性。
#!/bin/bash
# see if waiting for the system to start helps get the correct time
sudo sh -c "echo 0 > /sys/class/rtc/rtc0/wakealarm"
sleep 10
nvidia-settings -a [gpu:0]/GPUFanControlState=1
nvidia-settings -a [fan:0]/GPUCurrentFanSpeed=15
day=$(date +%A)
#printf "%s\n" "$day"
#DT=$(date --date='06:19 tomorrow')
if [[ "$day" == "Sunday" || "$day" == "Monday" || "$day" == "Tuesday" || "$day" == "Wednesday" || "$day" == "Thursday" ]];
then
DTs=$(date --date='06:19:00 tomorrow +22 seconds' +%s)
fi
if [[ "$day" == "Friday" || "$day" == "Saturday" ]];
then
DTs=$(date --date='06:19:00 next Monday' +%s)
fi
# The RTCWake needs to be set to 0 so that an IO error is not created
sudo sh -c "echo $DTs > /sys/class/rtc/rtc0/wakealarm"
WAKERTC=$(cat /sys/class/rtc/rtc0/wakealarm)
WAKERTC=$(date -d @$WAKERTC)
notify-send "will wake $WAKERTC"
notify-send "NVIDIA Fan set to 15"
仅供引用,额外的 22 秒允许我调试脚本。此外,'echo 0' 语句被移到脚本的早期,因为我认为启动中的一些延迟可能有助于时钟(它没有)。
编辑已添加 --- 感谢您就 if-then 代码的最佳实践提出建议。他们是我应该看到自己的好渔获物。虽然,脚本仍然行为不端。要么根本不执行 if 语句,生成一个通知语句,读取“will wake”,意味着没有设置警报,要么不识别周五/周六查询,第二天它仍然醒来。重要说明:您可能会注意到该脚本与 Nvidia GPU 风扇 Controller 交织在一起。这每次都执行。此外,如果从终端运行该脚本是完美的,但如果从启动应用程序运行则只能在大约 80% 的时间内运行。
最佳答案
试试这个:
if [[ "$day" == "Sunday" || "$day" == "Monday" || "$day" == "Tuesday" || "$day" == "Wednesday" || "$day" == "Thursday" ]]; then
DTs=$(date --date='06:19:00 tomorrow +22 seconds' +%s)
else
DTs=$(date --date='06:19:00 next Monday' +%s)
fi
当您可以使用 else
时,第二个 if
似乎是多余的
关于linux - 设置唤醒警报的 bash 脚本设置了错误的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32168594/