Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 用于设置唤醒警报的bash脚本设置了错误的时间_Linux_Bash_Time_Wakeup - Fatal编程技术网

Linux 用于设置唤醒警报的bash脚本设置了错误的时间

Linux 用于设置唤醒警报的bash脚本设置了错误的时间,linux,bash,time,wakeup,Linux,Bash,Time,Wakeup,我编写了一个bash脚本,在启动时运行,并为周一到周五设置了一个警报。星期六或星期天不需要,所以我修改了脚本以节省这些天的精力。剧本还不错。但是,它总是伴随着第一个“如果”语句。计算机每天在指定的时间唤醒,仅在启动时无法执行“==星期五”和“==星期六”选项。如果我手动运行脚本,'==Friday'和'==Saturday'选项将被正确筛选 任何关于为什么会发生这种情况的想法。我担心脚本的可靠性 #!/bin/bash # see if waiting for the system to st

我编写了一个bash脚本,在启动时运行,并为周一到周五设置了一个警报。星期六或星期天不需要,所以我修改了脚本以节省这些天的精力。剧本还不错。但是,它总是伴随着第一个“如果”语句。计算机每天在指定的时间唤醒,仅在启动时无法执行“==星期五”和“==星期六”选项。如果我手动运行脚本,'==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语句,生成一个notify语句,其内容为“will wake”,这意味着没有设置报警,要么周五/周六查询无法识别,第二天仍然会唤醒。重要提示:您可能会注意到脚本与Nvidia GPU风扇控制器交错。每次都是这样。此外,如果从终端运行,脚本也很完美,但如果从启动应用程序运行,脚本只在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

第二个
if
在你可以使用
else

的时候似乎是多余的,我不知道为什么第二个
if
不起作用,但是如果你担心可读性,用一个
else
替换它,因为你的第二个
if
只是在本周剩下的时间里测试:)你的脚本没有(或者有它?),因此,它可能运行在与您预期不同的shell上。这可能会改变行为或中断启动期间运行的执行。谢谢!tgo的建议只是一种良好的实践。我会合并它,看看它是否也改变了功能。Ruud,也是一个很好的,彻底的代码审查。shebang就在那里,为了简单起见,我只是简化了脚本。我会把其他几行发出去。