我正在尝试编写一个bash脚本,并在 raspberry pi 中的 rc.local
上添加到启动时,每个靴子都留在后台,并显示不同的图像取决于一天中的时间。早上,下午和晚上的不同全屏图像。
我获得的命令是:
feh -Y -x -q -D 5 -B white -F --zoom max -r ~/Pictures/1-Morning/
feh -Y -x -q -D 5 -B white -F --zoom max -r ~/Pictures/2-Afternoon/
feh -Y -x -q -D 5 -B black -F --zoom max -r ~/Pictures/3-Night/
上面的所有命令单独工作并打开我想要的正确图像,但是当我将这些命令移动到bash脚本时,它们会停止工作。我尝试使用做到这一点,而却没有运气:
#!/bin/bash
fireup()
while [ $(date +"%T") -ge 06:00:00 ] && [ $(date +"%T") -lt 12:00:00 ];
do
killall feh ; feh -Y -x -q -D 5 -B white -F --zoom max -r ~/Pictures/1-Morning/;
while [ $(date +"%T") -ge 12:00:00 ] && [ $(date +"%T") -lt 19:00:00 ];
do
killall feh ; feh -Y -x -q -D 5 -B white -F --zoom max -r ~/Pictures/2-Afternoon/
while [ $(date +"%T") -ge 19:00:00 ] && [ $(date +"%T") -lt 06:00:00 ];
do
killall feh ; feh -Y -x -q -D 5 -B black -F --zoom max -r ~/Pictures/3-Night/
done
done
done
我也尝试过crontab
,但什么也没发生。
如果有人会提供帮助,我会很感激。
您的代码以稍微不寻常的方式声明函数。
最常写一个函数:
name() { commands }
您有:
name() while ... done
这掩饰了一个事实,尽管您声明了一个功能,但实际上从未运行它!
因此,解决方案是:
- 删除行
fireup()
-在这种情况下,while循环将简单地运行 - 附加线
fireup
以调用函数
除此之外,时代的逻辑有问题。考虑:
while [ $(date +"%T") -ge 06:00:00 ] && [ $(date +"%T") -lt 12:00:00 ];
此试图比较两组字符串,就好像它们是数字一样,这将永远不会成功,并且应该导致某种错误。
而是尝试:
while [[ $(date +%T) > 05:59:59 && $(date +%T) < 12:00:00 ]];
感谢@jhnc,我现在有两个代码。
使用while
的第一个代码:
#!/bin/bash
while [[ $(date +%T) > 05:59:59 && $(date +%T) < 12:00:00 ]];
do
killall feh
feh -Y -x -q -D 5 -B white -F --zoom max -r ~/Pictures/1-Morning/
done
while [[ $(date +%T) > 11:59:59 && $(date +%T) < 19:00:00 ]];
do
killall feh
feh -Y -x -q -D 5 -B white -F --zoom max -r ~/Pictures/2-Afternoon/
done
while [[ $(date +%T) > 18:59:59 && $(date +%T) < 06:00:00 ]];
do
killall feh
feh -Y -x -q -D 5 -B black -F --zoom max -r ~/Pictures/3-Night/
done
用if
的第二个代码:
#!/bin/bash
while :; do
currenttime=$(date +%H:%M:%S)
if [[ "$currenttime" > "05:59:59" ]] && [[ "$currenttime" < "12:00:00" ]]; then
killall feh ; feh -Y -x -q -D 5 -B white -F --zoom max -r ~/Pictures/1-Morning/
elif [[ "$currenttime" > "11:59:59" ]] && [[ "$currenttime" < "19:00:00" ]]; then
killall feh ; feh -Y -x -q -D 5 -B white -F --zoom max -r ~/Pictures/2-Afternoon/
else
killall feh ; feh -Y -x -q -D 5 -B black -F --zoom max -r ~/Pictures/3-Night/
fi
done
上面这两个代码的唯一问题是,第一个代码中的第一个真实while
或第二个代码中的第一个True if
,运行通讯feh
,但此feh
永远不会结束永远,只要此feh
留在那里,就永远不会检查几天的其他时间以更改图片。我每天早晨,下午和晚上都在crontab
中添加了killall feh
,这会导致代码跳入下一个循环或条件检查。这不是最有效的方法,但现在正在起作用。谢谢。