如何使用Bash在各个白天无限期地运行命令?

奥米德·卡利利(Omid Khalili)

我正在尝试编写一个bash脚本,并将其添加rc.localRaspberry Pi中以在每次启动时启动,并停留在后台,并根据一天中的时间显示不同的图像。早晨,下午和晚上的全屏图像都不同。

我的命令是:

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但没有任何反应。

如果有人可以帮助,我将不胜感激。

hn

您的代码以一种稍微不寻常的方式声明了一个函数。

通常,编写一个函数:

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 ]];

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章