linux - 设置唤醒警报的 bash 脚本设置了错误的时间

标签 linux bash time wakeup

我编写了一个在启动时运行的 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/

相关文章:

linux - 如何将具有不同长度的行的文件转换为单列,将行的第一个单词添加到单独的列

bash - 如何使用点而不是线绘制一些数据(在终端中使用 xmgrace),而不在 GUI 中显式更改它?

c++ - 在 C++ 中从字符串中读取 GMT 时间

php - 如何在php中查找日期差异

linux - 如何以特定方式重命名目录。巴什

linux - 通信内核模块和用户空间(驱动程序)

linux - Bash 在 for 中跳过迭代

linux - 如何使用 bash 查找某个文件中的哪些行不是由另一个文件中的行开始的?

bash - xdotool 如何做水平滚动?

java - 如何将现有日期对象中的日期部分替换为当前日期