我试图编写一个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
,但没有任何反应。
如果有人愿意,我将不胜感激。
答案 0 :(得分:0)
您的代码以一种不寻常的方式声明了一个函数。
通常,会编写一个函数:
name() { commands }
您有:
name() while ... done
这掩盖了一个事实,尽管您声明了一个函数,但从未真正运行它!
因此,解决方案是:
fireup()
-在这种情况下,while循环将简单运行fireup
行以调用该函数除此之外,while逻辑存在问题。考虑:
while [ $(date +"%T") -ge 06:00:00 ] && [ $(date +"%T") -lt 12:00:00 ];
这将试图比较两组字符串,就好像它们是数字一样,这将永远不会成功,并且会导致显示某种错误。
代替尝试:
while [[ $(date +%T) > 05:59:59 && $(date +%T) < 12:00:00 ]];
答案 1 :(得分:0)
感谢@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
或第二个代码中的第一个真if
运行对应的feh
,但是这个{{ 1}}将永远不会结束,因此第一个真实循环或条件将永远保持打开状态,并且只要此feh
保持打开状态,就永远不会检查几天中的其他时间来更改图片。
我每天早晨,下午和晚上都在feh
中添加了killall feh
,这导致代码跳入下一个循环或条件检查。这不是最有效的方法,但现在可以正常工作。谢谢。